网上查询了许许多多的博客,说利用 poi、iText、Jsoup、jdoctopdf、使用 jodconverter 来调用 openOffice 的服务来转换等等,我尝试了很多种,但要么显示不完全,要么可是可能有问题,使用这个 jacob 的方法我最开始是最不想用的,因为它要导入 dll 文件,但最后我还是选择了使用该方法,原因是感觉转换后的 pdf 文件简直就是完美。
jacob 缺点:需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe ( word 的一个插件,用来把 word 转化为 pdf ,本次未安装测试通过)
插入正题:
下载 jacob 解压后存放路径:
jacob.jar 放在 E:\jdk1.8.0\jre\lib\ext 目录下
jacob.dll 放在 E:\jdk1.8.0\jre\bin 目录下
实现代码如下:
1 packagecom.jd.poi.test;2
3 importjava.io.File;4
5 importcom.jacob.activeX.ActiveXComponent;6 importcom.jacob.com.ComThread;7 importcom.jacob.com.Dispatch;8 importcom.jacob.com.Variant;9
10 /**
11 * 效果最好的一种方法,但是需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe (12 * word 的一个插件,用来把 word 转化为 pdf,可以不用安装,本次未安装测试通过 )13 *14 * SaveAsPDFandXPS15 * 下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=7
16 * jacob 包下载地址:http://sourceforge.net/projects/jacob-project/
17 *18 * jacob.jar 放在 E:\jdk1.5.0_14\jre\lib\ext19 * jacob.dll 放在 E:\jdk1.5.0_14\jre\bin20 *21 *@authoru Y22 *23 */
24 public classWordToPdf {25
26 private static final int wdFormatPDF = 17; //PDF 格式
27
28 public voidwordToPDF(String sfileName, String toFileName) {29
30 System.out.println("启动 Word...");31 long start =System.currentTimeMillis();32 ActiveXComponent app = null;33 Dispatch doc = null;34 try{35 app = new ActiveXComponent("Word.Application");36 app.setProperty("Visible", new Variant(false));37 Dispatch docs = app.getProperty("Documents").toDispatch();38 doc = Dispatch.call(docs, "Open", sfileName).toDispatch();39 System.out.println("打开文档..." +sfileName);40 System.out.println("转换文档到 PDF..." +toFileName);41 File tofile = newFile(toFileName);42 if(tofile.exists()) {43 tofile.delete();44 }45 Dispatch.call(doc, "SaveAs", toFileName, //FileName
46 wdFormatPDF);47 long end =System.currentTimeMillis();48 System.out.println("转换完成..用时:" + (end - start) + "ms.");49
50 } catch(Exception e) {51 System.out.println("========Error:文档转换失败:" +e.getMessage());52 } finally{53 Dispatch.call(doc, "Close", false);54 System.out.println("关闭文档");55 if (app != null)56 app.invoke("Quit", newVariant[] {});57 }58 //如果没有这句话,winword.exe进程将不会关闭
59 ComThread.Release();60 }61
62 public static voidmain(String[] args) {63 WordToPdf d = newWordToPdf();64 d.wordToPDF("E:\\aaa\\Spring.doc", "E:\\aaa\\Spring.pdf");65 }66
67 }
本次博主的测试并没有安装 SaveAsPDFandXPS.exe 但最后也是完全转换成功,具体原因不明,转换后如图所示,图片和字体均为发现异常:
如果出现如下错误,可以尝试安装 SaveAsPDFandXPS.exe 后在尝试:
最后,感谢两位博主的教程分享,有了你们的铺路,我们才会更加轻易的找到资源,吃水不忘挖井人。