专业财税服务推荐

精选优质财税服务,为企业提供专业、可靠的财税解决方案,助力企业健康发展

零报税代理记账
零申报代理记账
报税做账算帐财务报表老会计做账
代理记账
咨询微信:lhy_happyday
工商营业执照年度年报年检公示
全国个体、企业、公司、合作社工商年审年报服务!
个体/10元/次 企业/20元/次
咨询微信:lhy_happyday
财税咨询服务
一对一专业财税咨询,解决企业财税难题,提供定制方案
咨询微信:lhy_happyday
财务分析服务
小规模个体报税0申报税务年报工商年报月报季报报税代理记账
咨询微信:lhy_happyday
立即咨询专业财税顾问
微信号: lhy_happyday
会计从业9年,管理多家个体工商、小规模、一般纳税人等企业的财务、税务等相关工作!。
扫码或搜索添加微信,备注"财税咨询"获取专属优惠
知方号 知方号

Jasper实现报表(Java) java生成报表工具

Jasper实现报表(Java)

目录

1、TIBCO Jaspersoft Studio安装

2、Jaspersoft Studio使用

2.1 创建一个JasperReports Project

2.2 创建报表模板

2.3 设计报表模板

2.4 导出可执行模板

3、Jaspersoft 汉化注意事项

4、引入JasperReports相关依赖

5、Jasper报表模板数据填充及PDF下载

1、TIBCO Jaspersoft Studio安装

下载地址:Jaspersoft® Studio | Jaspersoft Community

需要JDK环境并且尽量6.0以上,6.0以下兼容性和汉化支持麻烦(这句基本上是废话了),我这里是安装的社(白)区(嫖)版,Jaspersoft Studio这个工具其实跟Eclipse长得非常像,可以单独安装,也可以Eclipse插件方式安装,甚至可以当成Eclipse工具使用.....

安装完成后看看靓照,是不是很Eclipse?

2、Jaspersoft Studio使用 2.1 创建一个JasperReports Project

工具会帮我们自动加载报表开发锁需要的依赖包

2.2 创建报表模板

我们的目标效果是设计一个包含主从表的学生成绩统计报表

下面我们开始表演:

1、首先我们先创建一个空白页主模板,操作还是很Eclipse

模板每个部分都解释一下,看下图

同样的方式创建一个子模版,因为一个主模板一般会对应多个子模版,所以我们弄个包包起来,备用:

2.3 设计报表模板

1、main.jrxml 文件Title板块添加标题,标题我使用标签,拖过去对齐成你喜欢的姿势,并且可以对字体“加大加粗”哦:

2、main.jrxml 文件 Page Header 板块加一个日志信息,使用动态标签

创建一个Parameters变量

3、main.jrxml 文件 Column Header增加列头显示,这里使用静态标签就行

4、Detail模块加上需要展示的内容,这个地方是重中之重,唯独只有Detail模块可以有多个,可以右键点击Detail区域增加:

我们这个地方使用对象实体来填充数据,并且还需要嵌入子模板:

先创建main.jrxml对象实体属性列:

说明一下:

stuNo 类型:java.lang.Integer

stuName 类型:java.lang.String

subjectList 类型:java.util.List

上面两个都好理解,最后一个就是嵌入子模板数据的变量

然后切换到sub1.jrxml文件,我们这个文件仅仅只需要作为一个子表,所以只需要显示学生的科目,老师,分数的Detail内容:

同样的对这三个字段设置实体对象属性:

再切回main.jrxml ,在Detail区域填充我们准备了这么久的实体属性和子模版,填充实体属性使用Text Field,嵌入子模版使用Subreport标签

我们现在来看看Detail板块内容:

前面是学号,姓名,后面是嵌入的子模版

我们还可以对每个学生的各科内容进行平均分的统计:

切回到sub1.jrxml面板,我们定义一个函数:

切回main.jrxml模板,显示sub1.jrxml统计的平均分:

在main.jrxml模板也创建一个函数,用来关联sub1.jrxml模板的平均分函数:

选中Detail中的子模版标签,右侧选择Properties编辑:

ok,到这里基本功能已经实现,列脚,页脚,备注模块以后有时间再补充:

2.4 导出可执行模板

对于Jasper来说,.jrxml文件只是设计文件,就类似于我们Java中的.java,我们需要把它编译成".class",右键.jrxml文件进行编译,生成的.jasper文件就是我们后需要用到的:

3、Jaspersoft 汉化注意事项

大家可能看到上面的标签有警告标志,这可能是这个工具的一个汉化bug,但是不影响使用;

汉化操作:选中所有需要显示中文的标签,在右侧Properties属性编辑中处理如下:

这样我们点击预览,可以正常显示汉字了:

4、引入JasperReports相关依赖

进入JaseprReports开发之前,我们还要处理一个汉化缺陷,官方提供的依赖坐标汉化有问题,但官方也提供了一个补充jar包,需要我们自己打包到maven仓库:

iTextAsian.jar

mvn install:install-file -DgroupId=com.itextasian -DartifactId=itextasian -Dversion=1.0 -Dpackaging=jar -Dfile=iTextAsian.jar

然后pom.xml添加相关依赖:

                    net.sf.jasperreports            jasperreports            6.17.0                                                com.lowagie                    itext                                                    commons-logging                    commons-logging                                                    org.apache.commons                    commons-lang3                                                    commons-collections                    commons-collections                                                    com.fasterxml.jackson.core                    jackson-databind                                                    com.fasterxml.jackson.core                    jackson-annotations                                                    org.apache.commons                    commons-collections4                                                    commons-beanutils                    commons-beanutils                                                        com.lowagie            itext            2.1.7                            net.sf.jasperreports            jasperreports-fonts            6.0.0                            com.itextpdf            itext-pdfa            5.5.0                            org.codehaus.groovy            groovy-all            2.4.11                            com.itextasian            itextasian            1.0                            org.apache.commons            commons-collections4            4.4                            commons-beanutils            commons-beanutils            1.9.4       

5、Jasper报表模板数据填充及PDF下载

业务代码填充非常简单,大家自己看就行,当然不要跟我抬杠为什么不从数据库查询出来,你自己不会吗?

@GetMapping("/exportPdf")    public void exportPdf(HttpServletRequest request, HttpServletResponse response)            throws IOException, BizException {        Resource resource = new ClassPathResource("templates/main.jasper");        /**         * parameters集合中传递的key需要和设计模板中使用的name一致         */        HashMap parameters = new HashMap();        parameters.put("date","2023-12-01");        List lst = new LinkedList();        HashMap map1 = new HashMap();        map1.put("stuNo",1);        map1.put("stuName","张三");        List subjectList1 = new LinkedList();        HashMap s1 = new HashMap();        s1.put("subjectName","语文");        s1.put("teacherName","赵老师");        s1.put("score",100d);        HashMap s11 = new HashMap();        s11.put("subjectName","数学");        s11.put("teacherName","钱老师");        s11.put("score",90d);        subjectList1.add(s1);        subjectList1.add(s11);        map1.put("subjectList",subjectList1);        HashMap map2 = new HashMap();        map2.put("stuNo",2);        map2.put("stuName","李四");        List subjectList2 = new LinkedList();        HashMap s2 = new HashMap();        s2.put("subjectName","语文");        s2.put("teacherName","赵老师");        s2.put("score",90d);        HashMap s22 = new HashMap();        s22.put("subjectName","数学");        s22.put("teacherName","钱老师");        s22.put("score",90d);        subjectList2.add(s2);        subjectList2.add(s22);        map2.put("subjectList",subjectList2);        HashMap map3 = new HashMap();        map3.put("stuNo",3);        map3.put("stuName","王五");        List subjectList3 = new LinkedList();        HashMap s3 = new HashMap();        s3.put("subjectName","语文");        s3.put("teacherName","赵老师");        s3.put("score",80d);        subjectList3.add(s3);        map3.put("subjectList",subjectList3);        lst.add(map1);        lst.add(map2);        lst.add(map3);        extracted(request, response, resource, parameters, lst);    }    private void extracted(HttpServletRequest request, HttpServletResponse response, Resource resource, HashMap parameters, List lst) {        JRDataSource dataSource = new JRBeanCollectionDataSource(lst);        try {            File reportFile = resource.getFile();            response.setContentType("application/pdf");            String defaultname = "export.pdf";            String fileName = new String(defaultname.getBytes("GBK"), "ISO8859_1");            response.setHeader("Content-disposition", "attachment; filename="                    + fileName);            ServletOutputStream ouputStream = response.getOutputStream();            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile);            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,dataSource);            JasperHelper.exportPdf(jasperPrint,"demo", request, response);            ouputStream.flush();            ouputStream.close();        } catch (Exception e) {            e.printStackTrace();        }    }

最后看一眼折腾半天的效果:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了