日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Java中Word转PDF解决方案

發(fā)布時(shí)間:2023/12/10 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中Word转PDF解决方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、實(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。