Java 使用 jacob 將 word 文檔轉換為 pdf 文件
網上查詢了許許多多的博客,說利用 poi、iText、Jsoup、jdoctopdf、使用 jodconverter 來調用 openOffice 的服務來轉換等等,我嘗試了很多種,但要麽顯示不完全,要麽可是可能有問題,使用這個 jacob 的方法我最開始是最不想用的,因為它要導入 dll 文件,但最後我還是選擇了使用該方法,原因是感覺轉換後的 pdf 文件簡直就是完美。
jacob 缺點:需要 window 環境,而且速度是最慢的需要安裝 msofficeWord 以及 SaveAsPDFandXPS.exe ( word 的一個插件,用來把 word 轉化為 pdf ,本次未安裝測試通過
插入正題:
SaveAsPDFandXPS 下載地址: http://www.microsoft.com/zh-cn/download/details.aspx?id=7
jacob 包下載地址: http://sourceforge.net/projects/jacob-project/
下載 jacob 解壓後存放路徑:
jacob.jar 放在 E:\jdk1.8.0\jre\lib\ext 目錄下
jacob.dll 放在 E:\jdk1.8.0\jre\bin 目錄下
實現代碼如下:
1 package com.jd.poi.test; 23 import java.io.File; 4 5 import com.jacob.activeX.ActiveXComponent; 6 import com.jacob.com.ComThread; 7 import com.jacob.com.Dispatch; 8 import com.jacob.com.Variant; 9 10 /** 11 * 效果最好的一種方法,但是需要 window 環境,而且速度是最慢的需要安裝 msofficeWord 以及 SaveAsPDFandXPS.exe ( 12 * word 的一個插件,用來把 word 轉化為 pdf,可以不用安裝,本次未安裝測試通過 )13 * 14 * SaveAsPDFandXPS 15 * 下載地址: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\ext 19 * jacob.dll 放在 E:\jdk1.5.0_14\jre\bin 20 * 21 * @author u Y 22 * 23 */ 24 public class WordToPdf { 25 26 private static final int wdFormatPDF = 17; // PDF 格式 27 28 public void wordToPDF(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 = new File(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", new Variant[] {}); 57 } 58 // 如果沒有這句話,winword.exe進程將不會關閉 59 ComThread.Release(); 60 } 61 62 public static void main(String[] args) { 63 WordToPdf d = new WordToPdf(); 64 d.wordToPDF("E:\\aaa\\Spring.doc", "E:\\aaa\\Spring.pdf"); 65 } 66 67 }
本次博主的測試並沒有安裝 SaveAsPDFandXPS.exe 但最後也是完全轉換成功,具體原因不明,轉換後如圖所示,圖片和字體均為發現異常:
如果出現如下錯誤,可以嘗試安裝 SaveAsPDFandXPS.exe 後在嘗試:
最後,感謝兩位博主的教程分享,有了你們的鋪路,我們才會更加輕易的找到資源,吃水不忘挖井人。
博主1:http://zgzdlm.iteye.com/blog/1558877
博主2:http://feifei.im/archives/93
Java 使用 jacob 將 word 文檔轉換為 pdf 文件