一、前言
关于上一篇文章,PDF生成确实能完成,但是项目上使用后,觉得代码量太繁琐,编写模板时样式问题事在头大,因此跟换技术,方便开发。
二、参考文献
说事在的,网上关于这些东西事在太少,找了很多资料,都说了写无关紧要的东西;
虽然我写出来了,但也只是暂时够用,后期遇到比较蛮烦的PDF,还是需要继续专研。
参考地址:又两个大佬博主写的很详细,我在这就不过多介绍了,下面附上连接,大家去看看(博主别责怪)
地之一:https://blog.csdn.net/shiyun123zw/article/category/7422282
地址二:https://blog.csdn.net/pigdreams/column/info/15303
这里的地址有软件的一些项目结构,元素介绍和模板显示区域的介绍https://www.cnblogs.com/max-hou/p/11982035.html
三、官网下载
首先需要到官网下载 Jaspersoft Studio 软件,和 JasperReport Library 这个文件
Jaspersoft:这是基于Eclipse软件开发的图形化报表设计工具。
JasperReport Library: JasperReports开源报告引擎,这里后期我们可以用它来打包中文字体使用。
四、下面正式开始 关于Column Footer问题
基本的我就不过多介绍,上面提供的两个博客中都有,记录下我碰到的问题
这里是我一个个拼接出来的模板,当我们点击Preview时就会碰到一个很严重的问题,Column Footer的问题就出现了,它一搬默认回再A4纸最下面生成
这样看起来就和我们本身预想的就不一样,需要将其合并起来,达到这种效果
这时候我们就需要将模板样式打开
搜索半天,最后还是自己摸索出来,原来这么简单!!
JAVA代码
当我们模板生成好的时候,需要讲模板编译下
<这里代码是和前端交互,存放在response流里,如果要存在本地,自行修改下。
public static <T> void runReportToPdf(Map<String, Object> mapParams, List<T> listParams, String jasperPath, HttpServletResponse response, String Name) throws IOException {
ServletOutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType("application/pdf");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "inline;fileName=XXXX.pdf" + Name + ".pdf");
//新建ClassPathResource
ClassPathResource classPathResource = new ClassPathResource(jasperPath);
//获取对象流
InputStream inputStream = classPathResource.getInputStream();
//load流
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
//获取JRDataSource
JRDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(listParams);
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, mapParams, jrBeanCollectionDataSource);
out.write(bytes);
} catch (Exception e) {
e.printStackTrace();
}finally {
out.flush();
}
}
JasperPrinterUtils.runReportToPdf(map,detailList,"/reports/outOrderPdf.jasper",response,"转出单据");
调取方法需要传入的参数,路径根据自己项目配置和目录结构来存放,最后的中文是生成的名字
其中map是对应模板中 Parameters 中的字段
detailList是对应 Fields 的字段
五、总结
模板是一点点拼接出来的,当我们需要的模板中有表头,数据时,我们的数据是循环的,表头只想每页开始时显示时,只需要把模板中Column Header 和 Detail选中就行,我们的表格根据自己的样式来放入就行。上面附上的连接一定要看,很详细!