1. 入门参考连接
2. 解决中文不显示
2.1 jasperreports studio 需要的操作
现在C:\Windows\Fonts 中搜索 STSONG.TTF 复制到其他目录中(直接在这个目录找不到字体文件)
在 jasperreports studio中添加字体 windows -> preferences
复制代码
2.2 项目中需要修改的地方
2.2.1 fonts.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="华文宋体">
<normal>jasperreport/fonts/STSONG.TTF</normal>
<bold>jasperreport/fonts/STSONG.TTF</bold>
<italic>jasperreport/fonts/STSONG.TTF</italic>
<boldItalic>jasperreport/fonts/STSONG.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'华文宋体', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'华文宋体', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
复制代码
2.2.3 STSONG.TTF
2.1 中在 windows fonts 中粘贴出来的字体
复制代码
2.2.4 jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=jasperreport/fonts/fonts.xml
复制代码
3.导出代码
Map<String, Object> paramMap = getMapData();
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(getEntities());
ClassPathResource resource = new ClassPathResource(TEMPLATE_PATH + "StudentDetails.jasper");
try {
InputStream inputStream = resource.getInputStream();
// 详情 + 表头
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, paramMap, dataSource);
byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
FileOutputStream outFile = new FileOutputStream(FILE_PATH);
outFile.write(bytes);
outFile.close();
} catch (JRException | IOException e) {
e.printStackTrace();
}
复制代码
3.1 导出效果图
4.实际导出中遇到问题
4.1 列表头重复输出
4.2 行间距问题
5.源码地址
github.com/mingyujiao/… gitee.com/breaksb/exp…
5.1 测试方法
注意:需要修改pdf生成目录