将嵌入在 OLE 二进制文件中的 MathType 方程转换为 MathML
Posted
技术标签:
【中文标题】将嵌入在 OLE 二进制文件中的 MathType 方程转换为 MathML【英文标题】:Convert MathType equation embedded in OLE Binary file to MathML 【发布时间】:2015-11-20 01:53:08 【问题描述】:我正在尝试使用 MathType 的 SDK 将存储为 OLE 二进制文件的 MathType 方程转换为 MathML。
我的程序的输入文件是一个包含嵌入式 MathType 方程的 DocX。我正在寻找一种独立于使用 MS Word 的解决方案。 DocX 是一个 zip 文件,解压后,我们可以在“word/embeddings/”文件夹中找到每个 OLE 对象的二进制文件。通常文件名是 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。有什么想法吗?
谢谢
【问题讨论】:
虽然不是一个完整的答案,但您可能会在下面的问题中找到一些启发。可以在答案的最后一条评论中找到下载建议代码的链接。它确实依赖于 Word,但它可能会帮助您入门。 ***.com/questions/15320088/… 谢谢。我已经看到了。以此为先,我才走到这一步。但我无法从我上面所说的继续前进。 如果你能从物理上得到字节流,我会试试这个:创建一个可以 OLE 激活对象的应用程序。然后您将获得对内部对象的引用,然后您可以将其传递给转换函数。当它激活对象时,您的应用程序将执行 Word 正在执行的操作。我会考虑至少在 VB6 中这样做作为测试。 这正是我想要做的,即将内部对象传递给转换函数。但是就像我提出的问题一样,转换函数似乎没有消耗内部对象! 【参考方案1】:您可以将 mathtype wmf 文件转换为 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”路径中,如果打开Translators路径,可以找到很多类型。
【讨论】:
【参考方案2】:您可以试试 MathMagic 公式编辑器(Windows 版)。 MathMagic 可以从文档(.doc 或 .docx)中提取所有嵌入 Word 的方程,并可以将它们保存/转换为其他格式(例如 JPG、PNG、BMP、PDF、TeX、LaTeX、MathML、.. .) 作为批量转换作业。 不幸的是,他们的试用版不支持这种批量转换。启用转换功能需要有效的许可证(甚至是 1 个月或 2 个月的许可证)。
【讨论】:
以上是关于将嵌入在 OLE 二进制文件中的 MathType 方程转换为 MathML的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Office 嵌入 mathtype出现Mathpage.wll文件未找到