MathType MTEF 数据分析

首先下载 MathType (http://www.mathtype.cn),国内代理就是著名的思杰马克丁,我用的是 30 天试用版,没有盗版哦,不要抓我。

打开word 新建空白文档 1.doxc,输入著名的求根公式,保存。

MathType MTEF 数据分析_第1张图片

然后用 7zip 解压,可以看到 docx 的庐山真面目了。

MathType MTEF 数据分析_第2张图片

查看一下 word/document.xml 文件。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

可以看到 word/media/image1.wmf 就是我们输入的公式的图片。

MathType MTEF 数据分析_第3张图片

另外一个 oleObject1.bin 就是我们要解析的公式对象,可以看到公式是以一个 OLE 对象嵌入文档中的,除此之外常规的 apache POI,python-docx,OpenXMLSDK 都能解析。

MathType MTEF 数据分析_第4张图片

关于 mathtype 的数据结构,网上公开的不多,目前可以参考的只有:

http://rtf2latex2e.sourceforge.net/MTEF3.html

官方曾经公开过 MTEF v4、v5 的数据结构,好在 web.archive.org 组织备份了网页,我们得以一览。

Part 1. How MTEF is Stored in Files and Objects

Window MetaFile (WMF) 前文提到,docx文件解压后可以看到 wmf 文件,这个是微软御用的格式,实际上就是一张图片,可以用绘图板打开。 wmf 是一种公开的格式,如下是一份详尽的规范(https://www.loc.gov/preservation/digital/formats/digformatspecs/WindowsMetafileFormat(wmf)Specification.pdf),相信有不少开源的库实现了,例如 libwmf(http://wvware.sourceforge.net/libwmf.html)。

我们用 hexedit 打开 wmf 文件,可以看到,从 0x040D 开始,到 0x0549,就是 MTEF 的数据结构了。

MathType MTEF 数据分析_第5张图片

我们从 0x040D 开始看起,第一个字节 0x05 代表这个文件使用的是 MTEF v.5 版本,非常幸运,我们使用的 MathType 6.9b 使用的是 MTEF v.5 版本的格式,当然,后面的 DSMT6 显示软件的版本是 6 系的,已公开的是 MTEF v.5 DSMT4 后续的数据结构可能会有少量调整。

https://docs.wiris.com/en/mathtype/mathtype_desktop/mathtype-sdk/mtef5

MathType MTEF 数据分析_第6张图片

 

 

文章转发来源:https://shuker.io/mathtype-hack/

 

你可能感兴趣的:(技术文章)