解决方案-DynamicReports输出PDF报表的中文显示问题

我用DynamicReports输出PDF报表不能显示中文,在网上找了很多资料,自己反复试验了很多次,最后终于试验成功了.
并得出了两种解决方案.一种是旧方法,另一种是新方法.
刚试验成功赶紧分享经验,避免其它人再走弯路,实在是太浪费时间了.
试验的材料:
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));

如下图所示,因为这些方法都过期了,所以有删除线:
 
解决方案-DynamicReports输出PDF报表的中文显示问题(xjl456852原创) - 救世主 - xjl456852
 然后再运行官方的例子,你在官方例子中的报表中加入中文,再将其输出为pdf格式,就可以看到pdf中的中文已经可以显示出来了.

方法二(推荐方法):
从电脑系统中的C:\Windows\Fonts目录下,复制一些你需要的字体文件(字体需要支持中文的,否则显示效果有问题).复制到项目中(我复制了两个字体),比如我复制的字体SIMHEI.TTF,复制到位置net/sf/dynamicreports/examples/fonts/SIMHEI.TTF
解决方案-DynamicReports输出PDF报表的中文显示问题(xjl456852原创) - 救世主 - xjl456852
 
解决方案-DynamicReports输出PDF报表的中文显示问题(xjl456852原创) - 救世主 - xjl456852
 修改项目中的配置文件:customfonts.xml
<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


[注意]:方法二中选择的字体一定要支持中文,否则也显示不出来中文。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章