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

时间:2011-02-23 16:28:56

标签: java pdf localization jasper-reports

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

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

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:8)

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

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应用程序中获取代码)

答案 2 :(得分:2)

  1. 在JVM中注册字体

    Font myFont = Font.createFont(Font.TRUETYPE_FONT, new File("pathToCyrillicFont"));
    GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(myFont); 
    
  2. 加入西里尔字母:

    <textElement>
       <font
                      fontName="fontName"
                      pdfFontName="pathToCyrillicFont"
                      size="13"
                      isBold="false"
                      isItalic="false"
                      isUnderline="false"
                      isPdfEmbedded ="true"
                      pdfEncoding ="Cp1251"
                      isStrikeThrough="false"
       /> 
     </textElement>
    
  3. 享受!

答案 3 :(得分:2)

由于jasper报告v5,v6在pdf中显示字符的正确方法是使用font-extension

有关更多信息,请参阅stackoverflow上的以下问题:

Jasper Reports PDF doesn't export cyrillic values

How can I display "$£Ω€απ⅔" in Jasperserver PDF using iReport?