Преобразование уравнения MathType, встроенного в двоичный файл OLE, в MathML

Я пытаюсь преобразовать уравнение MathType, которое хранится в виде двоичного файла OLE, в MathML, используя SDK MathType.

Входной файл для моей программы представляет собой DocX, который будет содержать встроенные уравнения MathType. Я ищу решение, которое не зависит от использования MS Word. DocX представляет собой zip-файл, и после его извлечения мы можем найти двоичный файл для каждого объекта OLE в папке «word/embeddings/». Обычно имя файла будет oleObject1.bin, oleObject2.bin и т. д.

Когда я проверил с помощью MathType SDK, у него есть класс «ConvertEquation», который имеет следующий метод:

virtual public bool Convert(EquationInput ei, EquationOutput eo)

EquationInput — это абстрактный класс, для которого доступны следующие конкретные классы:

EquationInputFileText
EquationInputFileWMF2
EquationInputFileWMF
EquationInputFileGIF
EquationInputFileEPS

В перечисленных выше классах ни один из них не поддерживает двоичный код OLE.

Согласно документу MathType SDK, данные MTEF сохраняются в собственном формате данных объекта. Всякий раз, когда объект уравнения должен быть записан в «поток» OLE, записывается 28-байтовый заголовок, за которым следуют данные MTEF. Я предполагаю, что это именно то, что присутствует в этом бинарном файле. Но похоже, что нет никакого способа, с помощью которого этот формат мог бы использоваться SDK для преобразования его в MathML. Есть предположения?

Спасибо


person Srikanth Vittal    schedule 26.08.2015    source источник
comment
Хотя это и не полный ответ, вы можете найти вдохновение в следующем вопросе. Ссылку для загрузки предложенного кода можно найти в последнем комментарии к ответу. Это зависит от Word, но может помочь вам начать работу. stackoverflow.com/ вопросы/15320088/   -  person DanL    schedule 10.09.2015
comment
Спасибо. Я это уже видел. С этим только в качестве руководства я зашел так далеко. Но я не могу идти дальше того, что я изложил выше.   -  person Srikanth Vittal    schedule 11.09.2015
comment
Если вы можете физически получить потоки байтов, я бы попробовал следующее: создайте приложение, которое может OLE активировать объект. Затем у вас будет ссылка на внутренний объект, который вы затем сможете передать функции преобразования. Ваше приложение будет делать то, что делает Word, когда оно активирует объект. Я бы подумал о том, чтобы сделать это в VB6 хотя бы в качестве теста.   -  person Sql Surfer    schedule 14.09.2015
comment
Это именно то, что я пытаюсь сделать, то есть передать внутренний объект функции преобразования. Но, как я уже задавал в своем вопросе, функция преобразования, похоже, не использует внутренний объект!   -  person Srikanth Vittal    schedule 14.09.2015


Ответы (2)


вы можете преобразовать wmf-файл mathtype в mathml следующим образом: ConvertEquation conv = new ConvertEquation(); var input = EquationInputFileWMF("mathTYpe.wmf"); var output = EquationOutputFileText("MathMLName.txt", "MathML2 (m namespace).tdl")); conv.Convert (ввод, ввод);

строка «MathML2 (m namespace).tdl» означает файл «tdl», который содержится в пути «MathType\Translators».

person rainy    schedule 03.03.2017
comment
Спасибо. Я попробую. - person Srikanth Vittal; 04.03.2017

Вы можете попробовать редактор формул MathMagic (версия для Windows). MathMagic может извлекать все встроенные уравнения Word из документа(ов) (.doc или .docx) и может сохранять/преобразовывать их в другой формат (например, JPG, PNG, BMP, PDF, TeX, LaTeX, MathML, .. .) как задание пакетного преобразования. К сожалению, их пробная версия не поддерживает это пакетное преобразование. Для включения функции преобразования требуется действующая лицензия (даже на 1 или 2 месяца).

person Sci Tech    schedule 03.07.2017