JasperReport生成PDF中文不显示处理

JasperReport是一个纯Java写的开源免费报表工具库,很久没有玩JasperReport了,最近有点时间重新找来学习一下。现在报表的设计都换成TIBCO Jaspersoft Studio了,记得以前玩的时候是用IReport进行报表的设计。采用SpringBoot工程搭建了一个Demo,发现生成PDF的时候中文没显示,网上找了些资料,经过一些实验最终实现了中文的显示,下面记录一下处理方案。

JasperReport在用TIBCO Jaspersoft Studio进行报表设计的时候默认采用的字体是SansSerif,中文并不在其处理范围之内,把字体显示设置为华文宋体,如下图:

image

报表jrxml模板文件中可看到已经显示加了华文宋体

<staticText>
    <reportElement x="20" y="7" width="68" height="32" uuid="c0240cf1-84c7-4197-b32e-dc59cbb77c66"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
        <font fontName="华文宋体" size="19"/>
    </textElement>
    <text><![CDATA[姓名]]></text>
</staticText>

报表模板文件中显示设置中文字体,生成PDF文件的时候中文其实还是不会显示,因为JasperRepeat的包中压根就没有华文宋体的字体库STSONG.TTF,需要在工程中放入该字体库,并配置JasperReport的字体模板fonts.xml,添加配置文件jasperreports_extension.properties指明字体处理工厂类和字体模板。

Windows操作系统中的字体文件可以在C:\Windows\Fonts目录下找到,华文宋体的字体文件STSONG.TTF就在该目录下面。

工程结构如下图:

image

fonts.xml

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="华文宋体">
        <normal>fonts/STSONG.TTF</normal>
        <bold>fonts/STSONG.TTF</bold>
        <italic>fonts/STSONG.TTF</italic>
        <boldItalic>fonts/STSONG.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>
</fontFamilies>

jasperreports_extension.properties

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml

经过上述处理后,再生成PDF文件,中文已经可以正常显示了。

最终效果如下图:

image


工程地址:https://github.com/clj198606061111/spring-boot-jasperreports-demo

原文:http://www.itclj.com/blog/5a0b079d81c06e4103ef5129

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值