Java生成PDF

Java生成PDF有兩種辦法:1.利用PDF模板,讀入模板,填充數(shù)據(jù),生成帶數(shù)據(jù)的PDF。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.利用HTML模板,讀取HTML模板,填充數(shù)據(jù),由HTML轉(zhuǎn)PDF。

第一種缺點是,表單域的變量只能是name,age這樣的簡單變量,而不能是user.name,user.age這樣的復(fù)雜變量;而且這種生成PDF的方式要自己制作表單的時候就設(shè)計好那一塊應(yīng)該放什么,沒有這個變量的時候就會空出來一塊,樣式擴展性很差。

第二種基本是可以解決第一種的,只是要自己把需要的樣式用css樣式寫出來,可以配合freemaker,這種變量賦值的方式就是變量如果不存在,就會報錯,整個PDF都無法完成打印,要每一個變量都判空,可以參考:http://www.jb51.net/article/112366.html

其中第二種又有很多可以實現(xiàn)的jar包,網(wǎng)上有幾種,我也試過了其中的兩種,一種就是itext,網(wǎng)上說的這種目前淶水還是挺多的,這種的好處就是,中文不用特地下載一個字符集,只要在HTML頁面中注明?body {font-family:SimSun;},總體來說中文的支持度還可以,只是對css樣式支持性能很差,有網(wǎng)友總結(jié)的幾點:

itext實現(xiàn)的css樣式限制

而這只是其中的幾種限制,要想寫出一個好看得PDF,itext問題還是很大的,故不建議使用,如果是簡單的PDF,沒有過多的樣式,這種方法倒是還可以。

還有一種是使用flying-saucer,這種對css樣式的支持非常好,而麻煩的地方就是中文的支持,主要有兩個問題:一、不支持中文。解決辦法:在項目中放入一個simsun.ttc,即新宋體,如果想要其他的,可以放其他的,直接放進去是為了解決不同操作系統(tǒng)的系統(tǒng)字體可能找不到的原因,然后在代碼中引入這個字符集,注意路徑,運行時路徑和在磁盤的路徑是不一樣的,這樣可以解決中文不支持的問題。二、支持中文,但是中文不換行,寫到外面,直接截斷。解決辦法:在需要中文換行的地方加上css樣式:


需要的地方加上這兩個修飾

這樣就可以解決中文不換行的問題。另外圖片的顯示效果并不是很好,這個問題暫時還沒有研究。

另外網(wǎng)上說的需要重寫jar包,自己下載jar包,然后每個下載都是要登錄、積分,真是坑爹啊,一聽到要自己導(dǎo)入jar就憂傷,自己的項目還好說,整個公司人手一份你導(dǎo)出的jar包,各種問題,我用的jar包就是普通的maven倉庫中下載的,我的pom文件依賴如下:


maven依賴

最后,效果圖,每次搜別人的博客或者主頁,看了半天,并沒有效果圖,又是憂傷,我怎么知道你說了這么多,這些到底有沒有用,而且沒有效果圖總是讓人沒有動力:


效果圖

tips:每次改這種類似的程序,總是搞不懂要怎么修改FileOutputStream,這個是寫到一個真實存在的文件夾中的,要怎么上傳到阿里云或者別的什么服務(wù)器上呢?其實只要修改輸出流類型,不要輸出到一個具體的文件就行了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,811評論 18 399
  • 作者:GABRIEL THEODOROPOULOS,原文鏈接,原文日期:2016-7-10譯者:X140Yu;校對...
    梁杰_numbbbbb閱讀 2,115評論 1 8
  • 非常感恩格西老師的咖啡冥想,我要通過咖啡冥想的助力實現(xiàn)我的目標(biāo),成立中心校。是時候為今天的好種子澆水施肥曬太陽了[...
    張蓉萍閱讀 306評論 0 0
  • 用了兩天的時間,方方家的麥顆已經(jīng)全部拉完了,說是兩天,其實是兩個早上,這不第二天當(dāng)方方和媽媽也跟著拉麥顆的車子回來...
    梔子之手閱讀 591評論 3 6

友情鏈接更多精彩內(nèi)容