【问题标题】:Ukraine (Cyrillic) characters not displaying in Jasper Report PDFJasper 报告 PDF 中未显示乌克兰(西里尔字母)字符
【发布时间】:2011-02-23 16:28:55
【问题描述】:

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

当我将报告导出为 html 等所有其他格式时,会显示 csv..ukranian char。

【问题讨论】:

  • 用于导出的字体是否有必要的字符?我不确定 Jasper Report 使用什么方法,但 PDF 文件通常包含用于生成它的字体 - 这意味着字体必须支持国际字符。

标签: java pdf localization jasper-reports


【解决方案1】:

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

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

jasper 将字体报告为 maven 依赖项:

<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 文件

应该这样做(我从一个工作的西里尔应用程序中获取代码)

【讨论】:

    【解决方案3】:
    1. 在 JVM 中注册字体

      Font myFont = Font.createFont(Font.TRUETYPE_FONT, new File("pathToCyrillicFont"));
      GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(myFont); 
      
    2. 在 Cyrillic 字段中添加:

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

    享受吧!

    【讨论】:

      【解决方案4】:

      自jasper report v5、v6以来,pdf中显示字符的正确方法是使用font-extension

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

      Jasper Reports PDF doesn't export cyrillic values

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

      【讨论】:

        【解决方案5】:

        只是偶然发现了这一点,我的解决方案是在服务器上添加字体资源。转到您的报告 -> 编辑 -> 添加资源

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-07
          • 2013-08-13
          • 1970-01-01
          相关资源
          最近更新 更多