jasper report Multi language- 在 spring boot 中生成 pdf 时无法显示字体

jasper report Multi language- cannot display font while generating pdf in spring boot

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

当我生成 pdf 时,少数语言无法正常显示。

然而,当我生成 Excel 时,报告是用正确的语言正确生成的。

网上搜索了一下,发现不支持pdf字体。

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

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

知道如何解决吗?

您是否尝试过设置 DEBUG jasper 报告日志记录以检查呈现 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,类似于文档中 post 中描述的内容:https://community.jaspersoft.com/wiki/adding-fonts-embedding-pdf

我也会尝试 setPdfFontEmbedded(true)。在生成的 PDF 中,如果您在 Adob​​e Acrobat Reader 中打开 PDF,您可以确定该字体是否包含在报告中,并查看它是否列在文件 -> 属性... -> 字体选项卡下(参见屏幕截图).字体名称旁边应该有 (Embedded) 或 (Embedded subset)。

编辑

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

Docs中可以看到支持多少种语言。

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