乌克兰(西里尔文)字符未显示在贾斯珀报告 PDF 中

2022-09-04 08:38:27

我正在尝试将jasper报告中的乌克兰字符显示为pdf文件。但它没有以pdf格式播放。

当我将报告导出为所有其他格式时,如html,csv.。乌克兰字符正在显示。


答案 1

在 iReport 中设置一些文本字段属性。使用字体 DejaVu Sans。将 pdf 编码设置为 Cp1251,并且 ispdf 嵌入true

前任。:<font fontName="DejaVu Sans" isStrikeThrough="false" pdfEncoding="Cp1251" isPdfEmbedded="true" />

jasperreports fonts as maven dependency:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
</dependency>

答案 2

首先,请确保您具有正确的编码:

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");

然后,您应该将字体更改为支持西里尔字母的字体。这是通过样式完成的:

public void addPdfFontsToStyles(JRStyle[] styles) {
    if (styles != null) {
        for (JRStyle style : styles) {
            if (style.getName().equals("reportStyle")) {
                style.setPdfFontName("/com/yourcompany/fonts/times.ttf");
                style.setBlankWhenNull(true);
            }

            if (style.getName().equals("reportBoldStyle")) {
                style.setPdfFontName("/com/yourcompany/fonts/timesbd.ttf");
                style.setBlankWhenNull(true);
            }

        }
    }
}

并调用此方法addPdfFontsToStyles(jasperReport.getStyles());

当然,先决条件是:

  • 您的文本正在使用上述样式名称之一
  • 您在类路径上有 ttf 文件

这应该可以做到(我从一个工作的cyrilic应用程序中获取代码)


推荐