1、docx4j 官方文档截图,如何处理 doc docx
2、LibreOffice(部分数学公式无法转换,转换过来是乱码,而且转换之前还必须把Word的数学公式设为 Cambria Math)
3、FMath , 一个将 LaTeX 转为 mathml 的Java框架
寻找 docx 转 doc 的过程
关于转换我已经试过很多方法了,下面是我的经历,首先就是我发我的Word2007打开有数学公式 的Word会出现部分乱码,需要手动把他们全部转为 Cambria Math 字体,才会正常显示,可是别人的 Word 2007 并没有这个问题,我怀疑是不是我的 Word2007 是破解版的。
1)未设置字体时
2)设置了 Cambria Math 字体
因为是字体没有设置 为 Cambria Math,所以我就想在数学公式生成Word的时候设置字体,参考这篇文章:
可是,我就算这样设置了,结果也不尽然。
然后,我就把这个撂倒一边,去看了 docx4j 的官方文档,它说如果想要从 docx to doc ,那么需要使用 openOffice/jodconvert ,此时我非常兴奋,因为有大神在前面指路。
首先我下载的是 JODConvert ,URL:
其API使用也是非常简单,不过他要依赖 OpenOffice 或 LibreOffice,网上说 LibreOffice 功能上已经渐渐超过 OpenOffice 了,当然,我并不知道,我两个都下载了。
首先下载的是 LibreOffice:
然后又下载了 OpenOffice:
因为我使用的使用Windows,于是也都安装了客户端程序,接下来就是使用 JODConver 和以上两个组件开始对接转文件了,代码如下:
以上三个方法,只使用了 transformBinaryWordDocXToDoc,因为我的目的就是转换 docx 到 doc.另外,注意一下参数。DocumentFamily.PRESENTATION,如果是Text,数学公式无法转换过来。
然后看看如何调用 OpenOffice 或 LibreOffice
通过切换代码来分别调用不同的组件,测试了,两个都有效果,但是效果都不理想,我不知道是不是我的数学公式有问题,还是这个组件自身的bug,有些数学公式就是转换不出来,如下
1)正常的数学公式(OMML)
2)LibreOffice 转换过来的公式,因为2003只是图片
3)OpenOffice 转换过来的公式,同样也是图片
结果很明显,LibreOffice 可以转换数学公式,但是不是所有公式都能正常转换,OpenOffice 则公式都没有转换出来。总之,想通过docx 转 doc 这种方式我觉得只要有数学公式那么就是行不通的,但是我又在怀疑是不是我的数学公式生成有问题,于是我找了各个版本的 MML2OMML.XSL , 进行数学公式转换,可是结果也一样,所以最后我决定还是生成 doc 吧,转来转去实在太累了。
如何生成 doc 呢?因为后台只有LaTeX,这个LaTeX如何才能转为Word中的数学公式呢?因为只有 2007以上版本才支持数学公式,2003 只能是图片,所以我得找个框架在后台把 LaTeX 转为 图片,于是网上看到了 FMath:
看看他的转换代码:
还可以参考: http://note.youdao.com/share/?id=8c207c69907332f436ade0ddedfadf4a&type=note#/