You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jasper Report中正确打印🔵这类HTML特殊字符?

Jasper Report导出PDF显示特殊字符(Emoji/HTML实体)解决方案

问题根源

出现🔵这类HTML实体未解析、或Emoji无法显示的问题,核心原因有两个:

  1. Jasper默认不解析文本字段中的HTML实体,直接输出原始字符串
  2. 导出PDF使用的默认字体(如Arial、Times New Roman)不支持Emoji字符集

解决步骤

1. 解析HTML实体(若字段存储的是实体编码)

如果字段内容是🔵这类HTML实体编码,需让Jasper解析为实际字符:

  • 方法一:通过字段属性快速设置
    选中目标文本字段,在属性面板找到Markup选项,设置为html。Jasper会自动解析HTML实体为对应字符。
  • 方法二:手动转义表达式(灵活控制)
    若需要自定义转义逻辑,可在字段表达式中使用工具类处理:
    org.apache.commons.text.StringEscapeUtils.unescapeHtml4($F{your_field_name})
    
    注意:需确保项目引入commons-text依赖。

2. 配置支持Emoji的字体

即使解析了实体,PDF默认字体不支持Emoji仍会显示异常,需配置支持的字体并嵌入PDF:

  • 步骤1:准备字体文件
    下载支持Emoji的字体(如Noto Color Emoji、Segoe UI Emoji),放到项目资源目录(如src/main/resources/fonts)。
  • 步骤2:定义字体配置
    在项目资源根目录创建fonts.xml,添加字体定义:
    <?xml version="1.0" encoding="UTF-8"?>
    <fontFamilies>
        <fontFamily name="Noto Color Emoji">
            <normal>fonts/NotoColorEmoji.ttf</normal>
            <pdfEmbedded>true</pdfEmbedded>
            <pdfEncoding>Identity-H</pdfEncoding>
        </fontFamily>
    </fontFamilies>
    
  • 步骤3:报表中应用字体
    选中目标文本字段,在属性面板的Font设置中,选择Noto Color Emoji作为字体。若字段同时包含普通文本和Emoji,可创建样式统一应用字体规则。
  • 步骤4:导出时启用字体嵌入
    在Java导出代码中,强制开启字体嵌入,避免其他设备打开PDF时缺失字体:
    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    SimplePdfExporterConfiguration pdfConfig = new SimplePdfExporterConfiguration();
    pdfConfig.setEmbedFonts(true);
    exporter.setConfiguration(pdfConfig);
    exporter.exportReport();
    

额外注意事项

  • 若使用JasperReports Server,需将字体文件上传至服务器WEB-INF/fonts目录,并同步配置fonts.xml。
  • Noto Color Emoji支持彩色Emoji显示,部分字体仅提供黑白样式,可根据需求选择。

内容的提问来源于stack exchange,提问作者Thomas Carlton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:47:27