场景:使用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
很多人看到这个一定很头疼,因为我也翻看了很多的论坛和网站,说的基本都是很麻烦,引入宋体什么的。
以上的方式太繁琐了,请试试我的方法,亲证有效!!!
我使用的jasperreprots版本是6.4.3,iTextAsian版本是3.0;
你在mvnrepository输入iTextAsian会有三个包出现,但是红色框中的包,文字说明就能让人喜出望外。下载它,就是了。
好了,pdf宋体导出的问题解决了。效果如下:
另外最近在尝试做jasperreport的动态报表(sql分组、返回的列名都不确定),弄好之后会提供相关demo的展示。
参考文档: