Java中Word转PDF解决方案
一、實(shí)現(xiàn)功能
1、doc、docx都可轉(zhuǎn)換為PDF
2、word含有中文的轉(zhuǎn)換為PDF后可顯示
二、轉(zhuǎn)換步驟
word —> html —> pdf
三、使用工具(Jar包)
1、poi、itext(如下maven配置)
作用:poi:用于將word轉(zhuǎn)換為html;itext:將html轉(zhuǎn)換為pdf
?
poi配置
itext配置
poi、itext版本
?
2、jsoup(maven配置如下)
作用:poi可以將以docx結(jié)尾的word完美轉(zhuǎn)換為html,但是將以doc結(jié)尾的word轉(zhuǎn)換為html后meta、img等標(biāo)簽不閉合,導(dǎo)致使用itext將生成的html轉(zhuǎn)換為pdf時(shí)報(bào)錯(cuò),因此需要使用jsoup.parse方法使html規(guī)范。
jsoup配置
四、上代碼
1、word轉(zhuǎn)html
(1)doc結(jié)尾word(相對(duì)復(fù)雜)
?
doc結(jié)尾word轉(zhuǎn)html
(2)docx結(jié)尾word
?
docx結(jié)尾word轉(zhuǎn)html
(3)使用jsoup規(guī)范html并保存到磁盤(pán)
?
jsoup規(guī)范html
2、html轉(zhuǎn)pdf
?
html轉(zhuǎn)pdf
五、問(wèn)題
太棒啦,word終于可以轉(zhuǎn)換成pdf(可以升值加薪啦😁)
?
打臉了吧
別高興太早,打開(kāi)doc結(jié)尾的word轉(zhuǎn)換的pdf會(huì)發(fā)現(xiàn)所有的中文都不顯示,只有數(shù)字和英文,本來(lái)十幾頁(yè)的word最后剩下幾頁(yè);打開(kāi)docx結(jié)尾的word轉(zhuǎn)換的pdf會(huì)發(fā)現(xiàn)更悲劇,什么也不顯示,一個(gè)空白的文檔。捂著臉繼續(xù)研究。。。。。。
表急,聽(tīng)我慢慢道來(lái)
1、中文顯示問(wèn)題
原因:
中文在pdf中不顯示是因?yàn)閄MLWorkHelper的parseXHtml方法在執(zhí)行過(guò)程中使用默認(rèn)字體,而該字體不包含中文,因此不顯示中文。
解決方案:
parseXHtml方法還有一個(gè)重載方法,其中一個(gè)參數(shù)是FontProvider,FontProvider是一個(gè)接口,擴(kuò)展接口使其擁有中文顯示功能(如下圖)。
?
parseXHtml重載方法
?
擴(kuò)展類(lèi)(宋體字)
項(xiàng)目中我的擴(kuò)展類(lèi)中使用宋體字(正式word文檔中使用該字體較多,simsun代表宋體),BaseFont.createFont的設(shè)置可以參考該文章http://blog.csdn.net/ol_beta/article/details/5926451,這里不再贅述。
至此,中文不顯示問(wèn)題已解決。
2、docx結(jié)尾word轉(zhuǎn)pdf空白
原因:
打開(kāi)docx結(jié)尾的word轉(zhuǎn)化的html文件,發(fā)現(xiàn)body中有一個(gè)或多個(gè)div包裹內(nèi)層標(biāo)簽,這些div設(shè)置了style的width值,width過(guò)大導(dǎo)致轉(zhuǎn)換的pdf空白。
?
罪魁禍?zhǔn)?/p>
解決方案:
我用的方法最簡(jiǎn)單粗暴,在jsoup格式化完成后找到style然后替換為空。
?
如style有width,替換之
注:該處的div指的是body中最直接的子div,而這些div中的又包含的div不影響。
?
總結(jié)
以上是生活随笔為你收集整理的Java中Word转PDF解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 正阅读微信小说分销系统-视频教程-4.数
- 下一篇: java interfaceof,jav