java实现pdf转word
調研
可供選擇的方案并不多,解決思路可以分成兩類。一類是直接使用工具將pdf轉成word,另一類是先用工具將pdf中的內容提取出來,再使用其他工具將內容創建到新的word中。目前,著重嘗試了第一類方案。
第一類方案中最流行的方法是使用pdfbox工具包,另一種方法是使用COM技術,利用java調用windows平臺的COM組件完成轉換。第一種方法完全使用java庫,沒有平臺限制,第二種方法則依賴于windows平臺,Adobe的Acrobat軟件在pdf轉word中功能良好,Jacob可以實現java代碼和COM組件之間的互操作。
分別嘗試了上述兩種方法,發現第二種方法轉換效果更好一些。
從圖中可以看出使用pdfbox轉換的結果原來的格式已經沒有了,并且表格也沒有解析出來。但是使用Acrobat轉換的結果能較完整的保留原來的格式。下面的解決方案主要介紹使用Acrobat實現的方法。
代碼
import java.io.File;import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant;public class Pdf2Word {public static void main(String[] args) {File inPath = new File("./test.pdf");File outPath = new File("./test.docx");//pdfActiveX PDDoc對象 主要建立PDF對象ActiveXComponent app = new ActiveXComponent("AcroExch.PDDoc");//PDF控制對象Dispatch pdfObject = app.getObject();long start = System.currentTimeMillis();//打開PDF文件,建立PDF操作的開始Dispatch.call(pdfObject, "Open", new Variant(inPath.getAbsolutePath())); Variant jsObj = Dispatch.call(pdfObject, "GetJSObject");Dispatch.call(jsObj.getDispatch(), "SaveAs", outPath.getPath(), "com.adobe.acrobat.docx");app.invoke("Close");long end = System.currentTimeMillis();System.out.println((end-start)/1000);System.out.println("Wao-haha");} }代碼比較簡短,第14行中“AcroExch.PDDoc”是Acrobat安裝后注冊的COM組件;組件方法參考:https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/#t=Acro12_MasterBook%2FIAC_API_OLE_Objects%2FOLE_Automation2.htm。
使用方法
環境配置
Jacob
從https://sourceforge.net網站查找并下載Jacob。下載的ZIP包的結構如圖所示。 Jacob.jar引入到項目中;dll文件有兩個根據自己電腦的平臺選擇合適的文件放在 %JAVA_HOME%\jre\bin 或 %JAVA_HOME%\bin 目錄下。
Acrobat
下載后直接安裝
首先要確保在windows平臺上。調用時可以對代碼進行再組織,封裝成一個方法。需要注意的是轉換過程比較耗時,如果轉換一個大文件或者短時間內轉換多個文件可以考慮多線程。
性能
電腦配置:Intel i5-7300HQ,8G內存,64位Win10系統
? 轉換一個3頁的pdf論文,用時4s。
? 轉換一個554頁的pdf格式的電子書,用時80s。
總結
以上是生活随笔為你收集整理的java实现pdf转word的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于GCD的证明
- 下一篇: 常用的做网站软件、网站制作软件分享