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

将DynamicJasper与亚洲文字元素一起使用时,是否需要考虑其他一些编码设置?

感谢您的任何建议和最诚挚的问候

最佳答案

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

1.)将Arial Unicode MS字体扩展名JAR添加到您的类路径(或任何其他等效的unicode字体)中。可以找到here的“官方”,但是我最终使用了this one。如果使用的是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);
// ...


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

10-08 13:24