如何在Jasper Report生成的PDF中正确显示欧元符号€
JasperReport 5.0.4 生成PDF欧元符号€乱码问题解决方案
问题成因
- 编码映射错误:XML中用UTF-8存储的欧元符号占3个字节,JasperReport 5.x版本生成PDF时默认采用ISO-8859-1编码渲染文本,3字节的UTF-8字符被按单字节编码拆分解析,就会出现
€乱码。 - 字体不支持字符:JasperReport默认调用的PDF核心字体(如Helvetica)本身没有收录欧元符号的字形,即使编码配置正确也可能显示为空白或替代符号。
解决方案(XML配置修改)
单字段针对性配置
在对应的textField标签内添加文本和字体配置,指定支持欧元符号的字体、PDF编码和嵌入属性即可,示例如下:
<textField> <reportElement x="0" y="0" width="550" height="30" /> <!-- 新增以下配置项 --> <textElement> <font fontName="DejaVu Sans" pdfEncoding="UTF-8" pdfEmbedded="true" /> </textElement> <!-- 原有表达式逻辑保持不变 --> <textFieldExpression> <![CDATA["Please send the amount of " + $V{total}.setScale(2, BigDecimal.ROUND_HALF_UP) + " € to the bankaccount ..."]]> </textFieldExpression> </textField>
说明:DejaVu Sans是JasperReport内置的开源字体,原生支持欧元符号,pdfEmbedded="true"会将字体嵌入PDF文件,避免终端设备缺字导致显示异常。
全局统一配置
如果要避免每个字段单独配置,可以在JRXML文件的根标签jasperReport下添加全局默认属性,所有文本字段自动生效:
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" ... > <!-- 新增全局字体配置 --> <property name="net.sf.jasperreports.default.font.name" value="DejaVu Sans" /> <property name="net.sf.jasperreports.default.pdf.encoding" value="UTF-8" /> <property name="net.sf.jasperreports.default.pdf.embedded" value="true" /> <!-- 原有其他配置、字段、变量等内容保持不变 --> </jasperReport>
内容的提问来源于stack exchange,提问作者ali akbar shahriari Garaei
相关产品推荐
相关产品推荐

