Jasperreport6 導(dǎo)出pdf中文不顯示問題終極大法

傳統(tǒng)解決思路

這個問題傳統(tǒng)的解決思路:

  1. Ireport軟件中設(shè)置字體


    Ireport字體設(shè)置
  2. 項(xiàng)目中導(dǎo)入jar包: itext-asian, 因?yàn)閖asper本身不支持中文.

    itext-asian

這樣, 生成模板字體部分類似這樣:

....
<font fontName="宋體"  -pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true" />
...

以上思路, 基本可以解決問題. 但是在筆者這里失效了, 原因未知, 可能是因?yàn)閙aven倉庫中jar有問題, 沒有下載全或是其他. 導(dǎo)致一直報(bào): 加載字體失敗.


1515314352.png

即使不報(bào)錯, 同樣會有個嚴(yán)重的問題: 模板中中文字體
辣么多, 難道要...挨個設(shè)置上文中的那3項(xiàng)?
(請賜我一刀)

終極大法

回想一下, 使用office時, 肯定有過這樣的經(jīng)歷: "系統(tǒng)自帶字體不夠用, 太low..."(尤其是寫PPT的時候).
這時, 是不是下載自己中意的很多漂亮字體, 類似什么華康少女之類的.
同樣, 在使用Jasperreport時也一樣, 何不定制一個自己的字體包, 里面含有豐富的好看的字體?(當(dāng)然作為程序猿, 能顯示中文就OK了!).

步驟[1]

  1. 引入itext 4.2.1(替換掉2.1.7)
<!-- itext -->
 <!--https://mvnrepository.com/artifact/com.lowagie/itext-->
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>4.2.1</version>
</dependency>

<!--itextpdf-->>
<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itextpdf</artifactId>
  <version>5.5.10</version>
 </dependency>
  1. 放棄itext-asian

  2. 引入jasperreport

  • 排除itext是為了用上文中配置的itext(?是否可選?)
  • 是否要排除font, 待測試.
<!-- jasperreport -->
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.3.1</version>
            <exclusions>
                <exclusion>
                    <groupId>com.lowagie</groupId>
                    <artifactId>itext</artifactId>
                </exclusion>
                <!--?可選?-->
                <exclusion>
                    <groupId>net.sf.jasperreports</groupId>
                    <artifactId>jasperreports-fonts</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  1. 定制fontsjar包(關(guān)鍵)
1、官網(wǎng)下載jasperreports-6.1.1-project.zip  
2、解壓縮,查看demo的fonts,D:\jasperreports-6.1.1-project\jasperreports-6.1.1\demo\fonts\net\sf\jasperreports\fonts\dejavu目錄下增加simsun.ttf(不能用windows的ttc文件直接修改后綴名的文件)  
3、修改D:\jasperreports-6.1.1-project\jasperreports-6.1.1\demo\fonts\net\sf\jasperreports\fonts目錄下的fonts.xml 增加如下配置:  
<fontFamily name="宋體">  
        <normal>net/sf/jasperreports/fonts/dejavu/simsun.ttf</normal>  
        <bold>net/sf/jasperreports/fonts/dejavu/simsun.ttf</bold>  
        <italic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</italic>  
        <boldItalic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</boldItalic>  
        <pdfEncoding>Identity-H</pdfEncoding>  
        <pdfEmbedded>true</pdfEmbedded>  
        <exportFonts>  
            <export key="net.sf.jasperreports.html">'宋體', Arial, Helvetica, sans-serif</export>  
            <export key="net.sf.jasperreports.xhtml">'宋體', Arial, Helvetica, sans-serif</export>  
        </exportFonts>       
    </fontFamily>  
4、D:\jasperreports-6.1.1-project\jasperreports-6.1.1\demo\fonts目錄下mvn package打包  
5、把打好的jar包放到工程中即可  

同樣的方法, 可以配置很多自己想要的字體.

實(shí)現(xiàn)代碼

package com.sykd.x02jasperreports;

import net.sf.jasperreports.engine.*;

import java.util.HashMap;
import java.util.Map;


/**
 * @version:
 * @author: Nisus-Liu
 * @email: liuhejunlj@163.com
 * @date: 2018-01-07-19:26
 */
public class JasperCreatePdf {

    public static void main(String[] args) throws JRException {
        // 編譯模板文件
        String jrxml = "D:\\Work\\JAVA\\workspace\\sykd\\sykd-parent\\bos-management\\bos-management-web\\src\\main\\webapp\\template\\report1.jrxml";
        JasperReport report = JasperCompileManager.compileReport(jrxml);
        
        // 準(zhǔn)備需要數(shù)據(jù)
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("company", "xyz");

        // 第三個參數(shù): 必須有, 但可以是空數(shù)據(jù)源
        JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource());
        // 設(shè)置目標(biāo)文件輸出的路徑
        String desFilePath = "C:\\Users\\Nisus\\Desktop\\TMP\\test.pdf";
        // 輸出文檔
        JasperExportManager.exportReportToPdfFile(jasperPrint, desFilePath);

    }

}


附:

  1. 引入坐標(biāo)無法正常下載到j(luò)ar包怎么辦?
    筆者的解決方案是, 手動下載離線jar包, 然后install到本地倉庫.
// 示例:
 mvn install:install-file -Dfile="jar包路徑" -DgroupI d=net.sf.jasperreports -DartifactId=jasperreports-fonts -Dversion=6.3.1 -Dpackaging=jar
  1. 怎么用maven命令打包?(jar命令打包也可以)
    ./fonts目錄下有pom.xml等文件, 所以可以用mvn package命令打成jar包. (注意確認(rèn)打成的jar里的fonts.xml中是否確實(shí)添加了你的配置, 筆者第一次就是由于打好的jar包里沒有我的配置, 浪費(fèi)好久!)
    image.png

    image.png

參考資料:


  1. jasperreport6 導(dǎo)出pdf中文不顯示問題解決方式 ?

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

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