并得出了两种解决方案.一种是旧方法,另一种是新方法.
刚试验成功赶紧分享经验,避免其它人再走弯路,实在是太浪费时间了.
试验的材料:
dynamicreports-3.2.1-.zip (官网下载的报表jar及官方例子) 官网:http://www.dynamicreports.org/
iTextAsian.jar 注意:pdf的字体iTextAsian的jar不是itextpdf包 (在方法一中需要使用.)下载地址:http://yunpan.cn/cf6q7vSU5bqjM 提取码 9ba6 或者csdn下载:http://download.csdn.net/detail/ssxueyi/4659874
试验准备:
将dynamicreports-3.2.1-.zip解压,在目录中examples/eclipse/dynamicreports-examples有eclipse项目官方例子(几十个).将它加载到eclipse中.
方法一:
将iTextAsian.jar包,放入到eclipse的lib中,在例子中的Templates.java中给样式中加入字体设置.可以给其中的rootStyle加入字体设置,这样对全局的字体都是有效的.
rootStyle = stl.style().setPadding(2)
.setFont(stl.font()
.setPdfFontName("STSong-Light")
.setPdfEncoding("UniGB-UCS2-H")
.setPdfEmbedded(BaseFont.NOT_EMBEDDED));
如下图所示,因为这些方法都过期了,所以有删除线:
方法二(推荐方法):
从电脑系统中的C:\Windows\Fonts目录下,复制一些你需要的字体文件(字体需要支持中文的,否则显示效果有问题).复制到项目中(我复制了两个字体),比如我复制的字体SIMHEI.TTF,复制到位置net/sf/dynamicreports/examples/fonts/SIMHEI.TTF
<fontFamilies>
<fontFamily name="FreeUniversal">
<normal>net/sf/dynamicreports/examples/fonts/SIMFANG.TTF</normal>
<bold>net/sf/dynamicreports/examples/fonts/SIMFANG.TTF</bold>
<italic>net/sf/dynamicreports/examples/fonts/SIMFANG.TTF</italic>
<boldItalic>net/sf/dynamicreports/examples/fonts/SIMFANG.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
<fontFamily name="FreeUniversalHei">
<normal>net/sf/dynamicreports/examples/fonts/SIMHEI.TTF</normal>
<bold>net/sf/dynamicreports/examples/fonts/SIMHEI.TTF</bold>
<italic>net/sf/dynamicreports/examples/fonts/SIMHEI.TTF</italic>
<boldItalic>net/sf/dynamicreports/examples/fonts/SIMHEI.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
<fontFamily name="FreeUniversalTest">
<normal>net/sf/dynamicreports/examples/fonts/FreeUniversal-Regular.ttf</normal>
<bold>net/sf/dynamicreports/examples/fonts/FreeUniversal-Regular.ttf</bold>
<italic>net/sf/dynamicreports/examples/fonts/FreeUniversal-Regular.ttf</italic>
<boldItalic>net/sf/dynamicreports/examples/fonts/FreeUniversal-Regular.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
</fontFamilies>
这个配置文件jasperreports_extension.properties不用修改.使用默认的就可以.
修改Templates.java文件中的样式.FreeUniversalHei这个与配置文件中的customfonts.xml的fontFamily name="FreeUniversalHei"对应
rootStyle = stl.style().setPadding(2).setFontName("FreeUniversalHei");
再运行官方的例子,输出pdf格式,可以输出中文.参考资料:
http://www.oschina.net/question/552008_51866
http://www.dynamicreports.org/forum/viewtopic.php?f=1&t=195
https://github.com/BriteNSW/msttcorefonts/blob/master/src/main/resources/com/britensw/msttcorefonts/fonts.xml
http://www.dynamicreports.org/documentation/fonts
[注意]:方法二中选择的字体一定要支持中文,否则也显示不出来中文。