Java中Word轉PDF解決方案

一、實現功能

1、doc、docx都可轉換爲PDF

2、word含有中文的轉換爲PDF後可顯示

二、轉換步驟

word —> html —> pdf

三、使用工具(Jar包)

1、poi、itext(如下maven配置)

作用:poi:用於將word轉換爲html;itext:將html轉換爲pdf

 

poi配置

itext配置

poi、itext版本

 

2、jsoup(maven配置如下)

作用:poi可以將以docx結尾的word完美轉換爲html,但是將以doc結尾的word轉換爲html後meta、img等標籤不閉合,導致使用itext將生成的html轉換爲pdf時報錯,因此需要使用jsoup.parse方法使html規範。

jsoup配置

四、上代碼

1、word轉html

(1)doc結尾word(相對複雜)

 

doc結尾word轉html

(2)docx結尾word

 

docx結尾word轉html

(3)使用jsoup規範html並保存到磁盤

 

jsoup規範html

2、html轉pdf

 

html轉pdf

五、問題

太棒啦,word終於可以轉換成pdf(可以升值加薪啦😁)

 

打臉了吧

別高興太早,打開doc結尾的word轉換的pdf會發現所有的中文都不顯示,只有數字和英文,本來十幾頁的word最後剩下幾頁;打開docx結尾的word轉換的pdf會發現更悲劇,什麼也不顯示,一個空白的文檔。捂着臉繼續研究。。。。。。

表急,聽我慢慢道來

1、中文顯示問題

原因:

中文在pdf中不顯示是因爲XMLWorkHelper的parseXHtml方法在執行過程中使用默認字體,而該字體不包含中文,因此不顯示中文。

解決方案:

parseXHtml方法還有一個重載方法,其中一個參數是FontProvider,FontProvider是一個接口,擴展接口使其擁有中文顯示功能(如下圖)。

 

parseXHtml重載方法

 

擴展類(宋體字)

項目中我的擴展類中使用宋體字(正式word文檔中使用該字體較多,simsun代表宋體),BaseFont.createFont的設置可以參考該文章http://blog.csdn.net/ol_beta/article/details/5926451,這裏不再贅述。

至此,中文不顯示問題已解決。

2、docx結尾word轉pdf空白

原因:

打開docx結尾的word轉化的html文件,發現body中有一個或多個div包裹內層標籤,這些div設置了style的width值,width過大導致轉換的pdf空白。

 

罪魁禍首

解決方案:

我用的方法最簡單粗暴,在jsoup格式化完成後找到style然後替換爲空。

 

如style有width,替換之

注:該處的div指的是body中最直接的子div,而這些div中的又包含的div不影響。


 

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