小編參與的項目中有生成 pdf,經過一番查找之后,確定要使用 iText PDF
iText PDF maven 配置(springboot)
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>core-renderer</artifactId> <version>R8</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.13</version> </dependency>
iText PDF 生成 pdf 需要借助 html 模板
需要動態生成的部分要用占位符(${aa})
小編在這里遇到了問題,由於 html 模板和動態參數都含中文(在 Windows 系統中測試沒有問題),在 linux 服務器下測試就遇到了問題,所有的中文都消失了!!
百度好久都說要修改 linux 的系統的默認編碼、中文字體等等。。。
偶然間,想起 tomcat 中文亂碼,是在 java 的 jre/lib/fonts/ 下放入 Windows 的字體,然后解決!!(結果還是不行、、、、)
好了,不套路了。直接上解決方案
1.模板,在模板的 body 里寫入 style 定義 font-family(這里需要注意!!要使用字體的對應英文名稱,不要使用:微軟雅黑、華文中宋等等)
<body style="font-size:12.0pt; font-family:SimSun">
小編也不知道什么時候保存了一份 字體對應英文
2.在 linux 系統的字體庫中添加自己用到的字體庫,小編建議,在 fonts 目錄下新建一個自己字體名字的目錄,如下圖:
/usr/share/fonts/
這樣比較方便自己管理,避免與系統字體庫產生沖突
以上兩點做到之后,再導出 pdf 就不會亂碼了!!
以上僅是小編本人在開發中遇到問題的解決方案。如果不合適,可以留言,共同探討!!