jasperreports导出pdf报表时粗体的显示问题

最近一直在做报表,用的是iReport3.7.3和jasperReport3.7.3,在导出pdf形式的报表时,文字的粗体效果出不来,
弄了大半天,查阅了很多资料,试了很多种方法,效果都不理想。下面总结一下:
1.修改jasperreports-3.7.3.jar包的JRPdfExporter的源码
这种方法网上到处都是,但我没试过,不知道是否可行,因为我反编译出来的源码有大量的错误,下载的一个编译器
也用不了,并且网上说的这种方法的版本和我用的版本不一致,代码也略有不同,感兴趣的可以去试一下。

2.在程序中设置字体
Map fontsMap = new HashMap();
fontsMap.put(new FontKey("黑体", true, false), new PdfFont("simhei.ttf", "Identity-H", true, true, false));
pdfExporter.setParameter(JRExporterParameter.FONT_MAP, fontsMap);
其中,simhei.ttf这个就是粗体的字体,在C:\WINDOWS\Fonts下可以找到,把这个文件copy到项目的classpath下,接着修改jrxml源文件,把pdfFontName="STSong-Light"改为:pdfFontName="simhei.ttf"。我在用iReport设计报表时,把pdfFontName="STSong-Light",pdfEncoding="Identity-H",因为iReport默认的字体中并没有simhei.ttf这种字体,只能在jrxml文件中修改。Pdf Encoding一定要选上Identity-H,否则不会出现粗体,这是
iText.jar这个包的问题。
这样在生成pdf形式的报表时就可以看到粗体效果了。但是,这种方法对于有子报表的报表有点麻烦,因为生成报表时,主报表直接依赖的是子报表的jasper文件而不是jrxml文件,我用的子报表一般都是在iReport中预编译得到jasper文件,如果想让子报表也出现粗体效果,你只能在程序中去单独编译子报表的jrxml文件来得到jasper文件,再把这个jasper文件添加到项目中。

3.为iReport添加simhei.ttf字体(推荐)
2中说到,iReport默认的字体中并没有simhei.ttf这种字体,所以可以为iReport添加这种字体。我个人觉得这个方法是最有效的。为iReport添加这种字体后,你所有的报表都可以用这种字体了,不需要修改jrxml文件也不用在程序中设置。
过程如下:在iReport的主界面,点击“工具”-->“选项”-->“Fonts”-->“Install Font”
然后选择simhei.ttf文件所在的路径,这个文件最好放在classpath下;
然后输入Family Name,也可以用默认的,在Font details框中,有一个“Bold”输入框,再次选择simhei.ttf文件所在的路径,(斜体也是一样的);
在PDF details框中,PDF Encoding选择Identity-H,勾上“Embed this font in the PDF document”,下一步直至完成。
重启iReport,设计报表时,把需要粗体效果的文本选上上面设置的字体就可以了。

强烈推荐第三种方法,只要设置一次,以后用这个iReport设计的报表都可以显示粗体了,斜体也是一样的,不需要改jar包,程序和jrxml文件。

你可能感兴趣的:(windows)