Jasper Reports PDF无法导出西里尔字母数值

6
我试图将Jasper导出为PDF,但它不显示西里尔字母的值。当我将其导出为Excel时,它确实显示,输出也正常,但当我尝试将其导出为PDF时,它不会导出西里尔字母的值。西里尔字母的值不是用西里尔字体编写的,而是用西里尔键盘编写的。

enter image description here

我用于导出的代码是:

JRExporter e = new JRPdfExporter();
                e.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
                e.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, outStream);
                e.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, NAME);

我甚至尝试指定以下参数:

e.setParameter(JRPdfExporterParameter.CHARACTER_ENCODING, "UTF-8");

但是没有成功。有什么建议吗?

输出结果在这里:http://snag.gy/ip5F7.jpg - Nick Gun
您需要添加字体扩展,类似于此问题:https://dev59.com/cZHea4cB1Zd3GeqPpnzP%C2%A3%E2%84%A6%E2%82%AC%CE%B1%CF%80%E2%85%94-in-jasperserver-pdf-using-ireport。如果在添加字体扩展(Idenity-H,嵌入式)后仍然存在问题,请告知我们。 - Petter Friberg
IReport或JasperSoft仅被指定为生成字体扩展的jar工具(请查看答案的第3和第4个检查点),这些字体扩展需要包含在您的Java代码中。但是,如果您确信已将正确的字体扩展(包括支持您字符的.ttf字体)包含在项目中,则我猜测这不是问题,但我仍然会押注于字体扩展问题... - Petter Friberg
我使用JasperSoft创建报告。我在JasperSoft中设计并设置了字体。然后在我的项目中,我包含了jasper依赖项并进行了业务逻辑。我将数据源作为bean提供,因此只能通过提供jrdatabeansource来通过我的项目运行报告。我没有进行任何自定义字体。当从Tahoma更改为DejaVu时,它起作用了。 - Nick Gun
“DejaVu Sans” 是唯一可用的字体吗?我使用了默认字体(SansSerif),但在切换到“DejaVu Sans”后,相同的行看起来更长,无法适应其容器。 - Sasha Shpota
显示剩余7条评论
1个回答

9
Jasper报告使用iText,当字符未在pdf中呈现时,应进行以下检查:
  1. 我的实际.tff是否受支持OpenType),并且字体是否能够呈现该字符。并非所有字体都可以呈现UTF-8中的所有字符,请参见如何测试我的字体是否在pdf中正确呈现?
  2. 我是否向iText传递了正确的编码。如有疑问(或一般情况下),请使用编码Identity-H,这是较新PDF标准的推荐编码,并使您能够混合使用不同的编码。
  3. 我的字体是否嵌入,以便如果我共享pdf,则没有此字体的计算机也可以显示内容?

如何确保这是JasperReport?

这个已弃用的方法是在textElement上设置属性。

<textElement>
  <font pdfFontName="Helvetica" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
  <paragraph lineSpacing="Single"/>
</textElement>

目前非废弃的方法v3-6,是通过添加字体扩展来实现的,可以使用iReportJasperSoft Studio等工具轻松生成.jar文件,以便直接将其包含在classpath中。

如何使用iReport或JasperSoft Studio生成字体扩展的.jar文件

编辑: OP的问题是清单上的第一项(.ttf字体无法呈现),但他应该考虑使用非废弃的方法同时解决第二和第三项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接