2

我由 DynamicJasper 生成的 PDF 现在看起来完全符合预期,我只面临一个问题:生成的 PDF 中根本不显示亚洲字符。任何其他字符都可以正常工作。我可以在调试器中验证字符串是否正确放置在 JRDataSource 中,Jasper 实际上确实在报告中为它们生成了行,但文本本身完全丢失了。

将 DynamicJasper 与亚洲文本元素一起使用时,是否需要考虑一些额外的编码设置?

感谢您的任何建议和问候

4

2 回答 2

7

好的,这就是逐步解决问题的方法:

1.) 将 Arial Unicode MS 字体扩展 JAR 添加到您的类路径(或任何其他等效的 unicode 字体)。可以在这里找到一个“官方”的,但是我最终使用了这个。如果您使用的是 maven,则可以使用以下mvn命令行和 POM 条目将文件添加到类路径:

mvn install:install-file -Dfile=DynamicJasper-arial-unicode-fonts-1.0.jar -DgroupId=ar.com.fdvs -DartifactId=DynamicJasper-arial-unicode-fonts -Dversion=1.0 -Dpackaging=jar
<dependency>
    <groupId>ar.com.fdvs</groupId>
    <artifactId>DynamicJasper-arial-unicode-fonts</artifactId>
    <version>1.0</version>
</dependency>

2.) 将 spring-core 和 spring-beans 添加到项目中(如果还没有的话):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>3.2.2.RELEASE</version>
</dependency>

3.) 启用“Identity-H”Jasper PDF 编码:

static {
    JRProperties.setProperty("net.sf.jasperreports.default.pdf.encoding", "Identity-H");
}

4.) 配置Arial Unicode MS为您的 DynamicJasper 字体(例如,用于行):

// ...
final DynamicReportBuilder dynamicReportBuilder = new DynamicReportBuilder();
final Style style = new Style();
style.setFont(new Font(Font.MEDIUM, "Arial Unicode MS", false));
dynamicReportBuilder.setDefaultStyles(null, null, null, style);
// ...

那是一些令人讨厌的废话:-/ ...

于 2013-04-12T11:13:13.070 回答
0

您可能需要配置 jasper 报告导出器以在 pdf 文件中嵌入特殊字体。还要检查 ck pdf 字符编码

于 2013-04-12T04:00:05.887 回答