碧玉报告多语言-在春季启动中生成pdf时无法显示字体

时间:2019-06-12 10:58:21

标签: java spring-boot jasper-reports multilingual export-to-pdf

我正在使用Java中的JasperReports生成多语言报告。

当我生成pdf时,很少的语言不能正确显示。

enter image description here

因此,当我生成Excel时,将使用正确的语言正确生成报告。

enter image description here

在互联网上搜索我发现不支持pdf字体。

  • 所以我添加了noto sans字体。
  • jaspar studio创建自定义的jar字体文件。
  • 添加到类路径中。

这里我的代码设置为字体:

 Style rowStyle = new Style();
 Font font = new Font(FONT_SIZE_SMALL, "Noto Sans", false, false, false);
 font.setPdfFontName("Noto Sans");
 font.setPdfFontEncoding(Font.PDF_ENCODING_Identity_H_Unicode_with_horizontal_writing);
 font.setPdfFontEmbedded(false);
 rowStyle.setFont(font);

知道如何解决吗?

2 个答案:

答案 0 :(得分:5)

您是否尝试设置DEBUG碧玉报告日志记录来检查呈现PDF时正在使用哪种字体? (下面的示例log4j设置)

<category name="net.sf.jasperreports">
    <priority value="DEBUG" />
</category>

例如,您应该看到jasper正在加载的字体的DEBUG日志:

DEBUG SimpleFontFace:177 - Loading font fonts/ARIALUNI.TTF

如果您使用的是jasper字体扩展名(如下所述),您应该会看到类似以下内容的信息:

 DEBUG FontExtensionsRegistry:88 - Loading font extensions from net/sf/jasperreports/fonts/jasperreports-fonts.xml

您是否将字体包含在类路径中?我已经成功使用了一个自定义的jar,类似于文档中此帖子中所述的内容:https://community.jaspersoft.com/wiki/adding-fonts-embedding-pdf

我还将尝试setPdfFontEmbedded(true)。在生成的PDF中,如果您在Adobe Acrobat Reader中打开PDF,可以确定该字体是否包含在报告中,并查看它是否在File-> Properties ...-> Fonts选项卡下列出(请参见屏幕截图)。字体名称旁边应有(嵌入)或(嵌入子集)。 enter image description here

编辑

以上步骤可以帮助调试此类问题。事实证明,“ Noto Sans”字体不支持印度字符,但是使用“ Arial Unicode MS”仍然可以。

Docs中,您可以看到支持的语言。

答案 1 :(得分:0)

--Use below code 

 `Style rowStyle = new Style();
 Font font = new Font(FONT_SIZE_SMALL, "Arial Unicode MS", false, false, false);
 font.setPdfFontName("Arial Unicode MS");
 font.setPdfFontEncoding(Font.PDF_ENCODING_Identity_H_Unicode_with_horizontal_writing);
 font.setPdfFontEmbedded(false);
 rowStyle.setFont(font);`