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字体。
- 所以我添加了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);
知道如何解决吗?
您是否尝试过设置 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 中,如果您在 Adobe 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);`
我正在 Java 中使用 JasperReports 生成多语言报告。
当我生成 pdf 时,少数语言无法正常显示。
然而,当我生成 Excel 时,报告是用正确的语言正确生成的。
网上搜索了一下,发现不支持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);
知道如何解决吗?
您是否尝试过设置 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 中,如果您在 Adobe 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);`