我正在使用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);
知道如何解决吗?
答案 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选项卡下列出(请参见屏幕截图)。字体名称旁边应有(嵌入)或(嵌入子集)。
以上步骤可以帮助调试此类问题。事实证明,“ 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);`