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;
 2 
 3 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章