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

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

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

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

例如:

jasperreports字体作为maven依赖:

  net.sf.jasperreports jasperreports-fonts  

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

 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());调用此方法addPdfFontsToStyles(jasperReport.getStyles());

当然,先决条件是:

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

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

  1. 在JVM中注册字体

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

        

请享用!

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

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

Jasper Reports PDF不会导出西里尔文值

如何使用iReport在Jasperserver PDF中显示“$£Ω€απ⅔”?