天天看点

jasperReport实现动态报表、pdf导出中文异常的问题

场景:使用IDEA进行编码,输出PDF字节流过程中发生异常,代码如下:

JasperPrint jprint = JasperFillManager.fillReport(jreport, param, new JRMapCollectionDataSource(reportBean.getMapList()));
            // 使用viewer进行输出
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline;");
            final OutputStream outputStream = response.getOutputStream();
            JasperExportManager.exportReportToPdfStream(jprint, outputStream);
            outputStream.flush();
            outputStream.close();
           

异常如下:

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font: 
pdfFontName: STSong-Light
pdfEncoding: UniGB-UCS2-H
isPdfEmbedded : true
	at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:2340)
	at net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:2123)
	at net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:2092)
           

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font: 

pdfFontName: STSong-Light

pdfEncoding: UniGB-UCS2-H

isPdfEmbedded : true

很多人看到这个一定很头疼,因为我也翻看了很多的论坛和网站,说的基本都是很麻烦,引入宋体什么的。

以上的方式太繁琐了,请试试我的方法,亲证有效!!!

jasperReport实现动态报表、pdf导出中文异常的问题

我使用的jasperreprots版本是6.4.3,iTextAsian版本是3.0;

你在mvnrepository输入iTextAsian会有三个包出现,但是红色框中的包,文字说明就能让人喜出望外。下载它,就是了。

jasperReport实现动态报表、pdf导出中文异常的问题

好了,pdf宋体导出的问题解决了。效果如下:

jasperReport实现动态报表、pdf导出中文异常的问题

另外最近在尝试做jasperreport的动态报表(sql分组、返回的列名都不确定),弄好之后会提供相关demo的展示。

参考文档:

参考文档-jasperreport 报表开发详解