结论:处理文件的页数约多,单页处理效率约高。相比wps,不论是大文件还是小文件,都明显要慢很多。处理文字编码为UTF-8的文件时速度较快。(查看WPS测试结果)
0. 运行环境
既然是利用Microsoft Office word,所以理所当然需要运行在Windows下。测试用的Office版本:2010。
1.需要的辅助工具:
由于java环境无法直接调用ActiveX,所以借助于开源的jacob。版本: 1.17。
2.代码准备:
这里只列举几个关键步骤吧,完整代码就不列举了,可以自行组合。
2.1 创建Word的ActiveX对象
ActiveXComponent app = new ActiveXComponent("Word.Application");
app.setProperty("Visible", false);
2.2 打开txt文档
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.call(docs,
"Open",
in, // FileName
false, // ConfirmConversions
true // ReadOnly
).toDispatch();
2.3 输出为PDF文档
Dispatch.call(doc,
"SaveAs",
out, // FileName
17);
2.4 关闭文档
Dispatch.call(doc, "Close", false);
doc.safeRelease();
2.5 关闭ActiveX
if (docs != null) {
docs.safeRelease();
}
if (app != null) {
app.invoke("Quit", 0);
app.safeRelease();
}
3. 转换效率
场景1:txt文件大小:5.02k,GBK编码。生成pdf后123k~124k,4页。生成的文件不都是相同大小,这个问题还有待研究。处理1024个文件,用时:898889ms,14分58秒。平均每个文件用时:877.8ms。比WPS文字603.5ms慢了45%。
场景2:txt文件大小:6.04k,UTF-8编码。生成pdf是122k,4页。pdf文件还是大小不一。处理1024个文件,用时:876222ms,14分36秒。平均每个文件用时:855.7ms。时间略低于场景1。原因有可能是word需要把GBK编码的文件转换成UTF-8编码后才能再执行操作,这一点有待证实。
场景3:txt文件大小:2.42m,GBK编码。生成pdf后13.4m,1430页。处理2个文件,用时:464491ms,7分44秒。平均每个文件用时:232245.5ms。比WPS文字慢3.6倍。
分析结果得出:处理文件的页数约多,单页处理效率约高。相比wps,不论是大文件还是小文件,都明显要慢很多。