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

Vis*_*hal 11 java pdf localization jasper-reports

我试图在jasper报告中显示ukranian字符作为pdf文件.但它不是以pdf格式显示的.

当我将报告导出到所有其他格式(如html)时,显示csv..ukranian char.

Ru5*_*Ru5 9

在iReport上设置一些文本字段属性.使用字体DejaVu Sans.将pdf编码设置为Cp1251,将isPdfEmbedded设置true.

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

jasperreports字体作为maven依赖:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 8

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

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

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

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);
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

当然,先决条件是:

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

应该这样做(我从一个有效的cyrilic应用程序中获取代码)