標籤:cat pen commons 系統安裝 opd 簡化 mon group col
用java將簡單的word文檔換成pdf文檔的方式很多,因為很多都沒有實際測試過,所以這裡就先泛泛的說一下
整體上來看分兩種:
1.純java代碼實現,有很多優秀的開源軟體可以用,比如poi,itext,xdocreport,docx4j等等。主要缺點是只能處理簡單的文檔
2.通過在作業系統安裝轉換軟體,在java代碼中調用軟體命令來實現轉換。常用的有OpenOffice,Pandoc,Jacob(限於Windows環境)等軟體,優點是對於複雜的文檔也能很好的處理。缺點是會麻煩一點,有的不能跨平台,速度上可能也會慢一點
這裡主要說一下我用xdocreport將word文檔轉成pdf文檔的代碼,xdocreport其實是對poi和itext的封裝,進一步簡化代碼。下面看我的maven依賴
<!--Maven依賴,只多不少--> <dependency> <groupId>commons-codec</groupId> <artifactId>common-codec</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.itext.extension</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>ooxml-schemas</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>org.apache.poi.xwpf.converter.core</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>javax.xml.stream</groupId> <artifactId>stax-api</artifactId> <version>1.0-2</version> </dependency> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>3.0.0</version> </dependency>
maven依賴的版本很多都比較老了,但這不重要,能實現功能就是好的,要是換成其他更高的版本可能會報錯,另外裡面可能有個別依賴不是必須的,你有興趣可以自己試一試。下面上代碼
import org.apache.poi.xwpf.converter.pdf.PdfConverter;import org.apache.poi.xwpf.converter.pdf.PdfOptions;import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.*;import java.util.HashMap;import java.util.Map;public class WordToPDF { /** * 將word文檔, 轉換成pdf, 中間替換掉變數 * @param source 源為word文檔, 必須為docx文檔 * @param target 目標輸出 * @throws Exception */ public static void wordConverterToPdf(InputStream source, OutputStream target) throws Exception { XWPFDocument doc = new XWPFDocument(source); PdfOptions options = null;//因為是簡單處理,該參數就設定成了null,有需要的可以研究一下 PdfConverter.getInstance().convert(doc, target, options); } //測試 public static void main(String[] args) { String filepath = "F:\\temp\\test.docx"; String outpath = "F:\\temp\\test.pdf"; InputStream source; OutputStream target; try { source = new FileInputStream(filepath); target = new FileOutputStream(outpath); Map<String, String> params = new HashMap<String, String>(); wordConverterToPdf(source, target); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }}
至此就算實現了將簡單word文檔轉成pdf文檔的功能。最後再說一下注意的地方,
1.如果你改變了maven依賴的版本可能會有報錯,
2.注意word文檔中漢字的字型
這裡會顯示你文檔的漢字字型名稱,其中有一些字型在轉換的時候會消失,不能顯示,就我知道有"宋體(本文)",注意它不同於“宋體”。
有錯誤歡迎指出,有好代碼希望能分享一下。
附上參考資料地址:https://github.com/opensagres/xdocreport/wiki/DocxReportingJavaMainConverter
用java將簡單的word文檔換成pdf文檔