jasperreport 使用和问题记录

news/2025/3/15 22:03:00/文章来源:https://www.cnblogs.com/zhu-yuanhao/p/18769000

引言:之前一直没有记录的习惯,所以在这里记录有些是回忆,所以可能有些不连贯.而且本人的问题不一定是你的问题,仅作参考.

(注:本人是使用java生成pdf文件)

1.介绍(只介绍自己用的到)

进入软件 File->new->jasper report->blank A4

我们得到了一张A4纸,如下图所示.(注:该jasperreport被我使用过所以area 4只有title,刚创建时不止这一个但不影响使用. 还有界面布局我拖动过正常project explorer好像是在左上角.)

 area 1:

A4纸,我们想要的功能就在这上面添加

 

area 2:

(常用的一些element,可以通过拖拽的方式添加到area 1和 area 4)

Text Feild: 变量,通过代码传参获得

Static Text: 静态文本,通常是写死的内容

Image: 在pdf上显示一张图片

Line: 加上一条线(个人感觉很麻烦,还不美观,不如使用边框)

Frame:一个框架,可以理解为可有可无的容器

Subreport:子报表.(有两个需要遍历的列表,例:列出一个人的所有房子和车子,具体看需求,不需要杠)

BarCode: 条形码和二维码

 

area 3:

(系统变量element,可以通过拖拽的方式添加到area 1和 area 4. 通俗点就是也是变量但是不需要你传值,他自己回传,比如页码之类的)

Page Number: 页码或总页数,根据area 5的Text Field->Evaluation Time区分(now为当前页,report是总页数)

Page x of y: x为当前页,y为总页数

 

area 4:

parameter:我们传的参数(HashMap传递)

Fields:列表参数,特点是重复遍历的列表数据

variables:变量

 

一张A4纸功能划分区域.

Title:标题只显示一次

Page Header:页头每页都有

Column Header:列头,每页都有

Detail:通常我们列表打印的地方

Column Footer:列脚,应该同列头一样

Page Footer:页脚,每页都有

Last Page Footer:最后一页的页脚(会不会替换页脚我忘了,当时试过,最后没用所以没啥印象)

Summary:总结,最后一页出现

<Notice:如果你的需求特别的简单且一页就可以弄完,你甚至可以忽略上述的区域,只用一个区域完成>

 

area 5:

area 4里面的元素的属性,在这里我们可以尽情的玩弄它们,让它们欲罢不能.

这里常见的一些功能分别是(容易通过界面理解的和我没用到不涉及):

Appearance:外观

 

Transparent:不勾选可以选择自己的颜色

removeLineWhenBlank: 当你的数据为null时不想占空间可以选择二(实际效果自己试下,因为我是回想的的当时没记,详情了解看下文问题记录)

print when expression:满足它就会显示

Edit Properties: 一些自带的逻辑处理功能选择

(这里我用到了markup<用这个标记为html格式来写html代码,因为它传String类型空格是去掉的,用html写就不会,具体看问题记录>,

和printBlankwhennull<null时打印为空,这串英文没错>)

Borders:边框

 

 值得一提的是这里可以点(刚开始我都是去source里改的...)

Text Field:文字的一些属性

略.

Inheritance:可以调一下样式之类的,可以忽略.

 

area 6:

Design:compile report时会输出一些log,有时可以看到一些报错

source:文件源码,可以进去需改一些你想修改的东西,也可以看到一些错误提示(在边框上红色区域就是)

preview:预览你的文件(这个预览跟你生成的可能会有些偏差,不知道时jar版本区别还是啥)

 

使用1

1.java部分(我使用的绝对路径为测试用写的,在项目上使用resource相对路径去读取)

依赖
<dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.17.0</version>
</dependency>

jar大概的用到的代码

 1 //这个是用到的一些代码
 2 public void test() throws Exception {
 3         try (InputStream HgcSummaryZ = new FileInputStream("D:\\work\\zhu\\testSpring\\src\\main\\resources\\statementListPage.jasper");
 4              InputStream img = new FileInputStream("D:\\work\\zhu\\testSpring\\src\\main\\resources\\myImg.png")
 5         ) {
 6             HashMap<String, Object> parameter = new HashMap<>();
 7             parameter.put("img",img);
 8             parameter.put("name","Handsome Boy  ");
 9             ArrayList<StatementBean> statementBeans = new ArrayList<>();
10 
11             HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
12             parameter.put("dataList",  statementBeans);
13             parameter.put("dataMap", objectObjectHashMap);
14             parameter.put("reportPath", "D:\\work\\zhu\\testSpring\\src\\main\\resources\\statementListSub.jasper");
15 
16 //            new JRBeanCollectionDataSource(statementBeans);
17             JasperPrint jasperPrint = JasperFillManager.fillReport(HgcSummaryZ, parameter, new JREmptyDataSource());
18             JasperExportManager.exportReportToPdfFile(jasperPrint,"myPdf".pdf");
19         }
20     }
21 
22 
23 //这个是多个jasper文件生成的pdf页面合成一个的代码,注意是两个jasper文件合并才用的上
24 JasperPrint jasperPrint = testStatementPage(false);
25         JasperPrint jasperPrint3 = pdfPaymentAdjustment(false);
26         for (JRPrintPage page : jasperPrint3.getPages()) {
27             jasperPrint.addPage(page);
28         }
29         JasperExportManager.exportReportToPdfFile(jasperPrint, "HgcJasperTestFile.pdf");

下面做一下解析(只做test方法里的解析)

这是两个关键的方法
JasperPrint jasperPrint = JasperFillManager.fillReport(HgcSummaryZ, parameter, new JREmptyDataSource());
第一个参数(HgcSummaryZ):文件流;
第二个参数(parameter):对应area 4里的parameters参数
第三个参数(new JREmptyDataSource():这个是没有列表数据传的,new JRBeanCollectionDataSource(statementBeans):这个是参数列表):对应area 4里的fields参数

JasperExportManager.exportReportToPdfFile(jasperPrint,"myPdf.pdf");
第一个参数(jasperPrint):jasperPrint;
第二个参数("myPdf.pdf"):是你的路径加上/path/fileName

至此我们java部分的code已经全部解析完毕.

2.jasper部分

开始我们的demo,ready go~.(只使用其中一部分作为案例)

创建parameters(类型要和hashmap的数据一致)和feild(类型要和实体类一致):

 

拖动刚创建的parameter和field到area 1或area 4中得到.

 

成果(第一张图为之前的成品仅作参考,图二为修改后的文件,java使用的也是它):

图一

 图二

 

java生成得到(颜色修改请忽略,还有就是duration那行其实放了两个Field):

 使用2:该部分为suubreport使用(javaCode一致.).

使用的起源:一个页面想打印两个完整的列表(完整的意思:有自己的列头,自己的summaryd等)

jasper文件图:

 

 

 

效果图:略

 

java解析

HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
//dalist,datamap,reportPath每一个subreport都会有设置,这里我忽略了第二个subreport的parameter parameter.put("dataList", statementBeans);//subreport的list parameter.put("dataMap", objectObjectHashMap);//
subreportd的parameter

parameter.put("reportPath", "D:\\work\\zhu\\testSpring\\src\\main\\resources\\statementListSub.jasper");//jasper文件路径

new JRBeanCollectionDataSource(statementBeans);
 JasperPrint jasperPrint = JasperFillManager.fillReport(HgcSummaryZ, parameter, new JREmptyDataSource());

jasper里长这个样

 其中Data Source Expression完整为:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{serviceDataList})

其中subreport的大小,我一般设为一行列表数据的宽度和高度.

 3.自定义变量(不常用,了解)

 page为当前页数据,report是整个文件的数据

问题记录(*部分属灵异事件)及技巧:

1.页数问题:因为我的pdf文件是由多个jasper拼接而成所以无法单纯的使用自带的page x of y来解决页码问题.

解决:通过页面最大列表容量来得出页数,再后续的页面中通过parameter来写页数

2.*编译问题:在本机的页面中放最大容量数据只会出现一页; dev环境会出现两页,第二页列表数据为空.

解决:通过勾选report 的properties中Ignore Pagination解决(area 5),并填数据时控制数据数量

(注:这个选项超过最大容量数据时会扩张纸张的长度,使纸张不再是a4纸)

3.列脚位置异常问题

解决:通过勾选report 的properties中Float Column Footer解决(area 5)

4.*列头下出现空隙(某个页面,不是全部. 不一定会出现.)

 解决:表头用frame框起来

5.右对齐的情况下想要加点空格,但是空格会被自动去掉(为什么会加空格,因为没加空格的数据后面加了其他所以无法对齐)

解决:在area 5中的edit properties中markup填为html,然后在java传参时添加`<pre>`包裹

"<pre>" +yourParameter+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+"</pre>"

6.null会出现在表格里

解决:在area 5中的edit properties中printBlankwhennull选择true

7.文本有序列表无法对齐问题:markup填为html,写有序列表时,perview是理想效果,java生成不是.

解决:暂时无法解决.

8.列脚,页脚,总结同时出现时页面布局异常.

解决:软件设计缺陷无法解决,通过用其他band尝试.

9.列表数据高度固定问题:目前的页面是列表数据多少决定页面最下面除去页脚空白的高度; 想要的效果是数据少是空白在中间而不是在下面.

解决:用子报表解决subreport放在Frame外面,这里的frame主要是画一个边框. 放里面记得会出现问题,他会看作一个整体啥的.

然后把band的宽度拉满,然后就固定了占用页面大小了.

我这里detail高度,subreport页面大小及在detail里的高度,frame高度都是设为最大的428.

 10.没有明显的异常,就是JAVA写文件的时候出现异常.显示一串英文(类似<忘记记录了所以靠记忆>:ED FG HJ...)

 解决:文件异常可能是你的编辑有写非法但是编译没问题真正去java操作才有问题,请回退到上个版本再编辑.

11.如果使用jasperreport出现运行慢,及编译失败和保存失败等;

解决:save all不行就一个个保存,然后重启软件.

 

万道归一,触类旁通,如是而已.

个人感悟:20毕业这些年一直划水,不爱学习,导致23年脑残辞职后没找到工作,兜兜转转从23年的14.5k掉到5.5k.应了那句话"书到用时方恨少",也算是百因必有果吧.望以后努力学习,找份好工作,诸君共勉.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899403.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习四大名著:《Java核心技术 卷II:高级特性(原书第12版)》 | PDF免费下载

《Java核心技术 卷II:高级特性(原书第12版)》是Java学习的经典书籍,该书深入探讨了 Java 语言的高级功能,涵盖流与文件处理、并发编程、网络、数据库、JVM 调优等关键主题。适合有一定基础的开发者,帮助他们掌握高效编程技巧,优化性能,并深入理解 Java 生态系统,是进阶…

STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例)

STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例) 软件介绍 STM32CubeIDE 是 STMicroelectronics 提供的官方集成开发环境(IDE),专为 STM32 微控制器系列设计。它融合了 STM32CubeMX 和 Eclipse 的强大功能,提供了一个完整的开发环境,适用于嵌入式软件开发和调试。STM3…

【作业3】结对项目:实现一个自动生成小学四则运算题目的命令行程序

⭐成员:3223004473詹艺珏 and 3223004301吴梦琪 📎Github链接:https://github.com/Jue610/Jue610/tree/main/ArithProbelm这个作业属于哪个课程 23软件工程这个作业要求在哪里 【作业3】结对项目这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序,培养团…

用ESP32做一个遥控机械臂

RC汽车机械臂只是一个有轮子的RC汽车。该机械臂是一个四自由度机械臂,这意味着它有四个运动部件。我使用mg90伺服电机,因为它们是金属的,但塑料sg90也应该工作。如下图所示。我使用了两个独立的电源,每个都由2S锂离子(Li-on)电池组成,一个用于MCU,另一个用于电机。这是为…

最小化安装Ubuntu

最小化安装 前言: 有时候需要搭建虚拟机,每一次都需要去找文章,搞小半天才能完成环境搭建 这一次写一篇文章记录一下,目的是以后能比较快速简单的搭建好环境 概要 最小化安装需要手动启用网卡 安装防火墙 ⇒ 打开某些端口确保ssh连接等 安装openssh-server openssh-client ⇒ …

愤怒的小鸟

Day 2025/2/20愤怒的小鸟剪切精灵图-改sprite mode为mutiple在sprite editor中slice设置弹弓与鸟的层级关系layer-player 鸟加springjoint组件-distance-0.3-autodistance关闭弹弓组件的一些基本属性:Distance:两点之间的固定距离(设定完有剩余的距离就是可拉伸的长度)Freq…

通过振动传感器,触发水的运动并将其转换为声音

“微挑战”是在巴塞罗那IAAC的“紧急未来设计硕士”课程中为期一周的工作坊。在这一周,我们有时间、空间和专业人士的支持来创建一个功能原型,它也可以是一个投机性的人工制品,有助于我们的个人研究和实践。这个原型应该基于迭代和使用:数字制造工具、生物制造、人工智能、…

单链表练习与重下AS

1.练习题:我的代码答案: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {struct ListNode dummpy;struct ListNode* tmp;dummpy.next=NULL;//引入临时…

pycharm连接autodl服务器

昨天听舍友说,他们第一个实验都跑完了,瞬间焦虑起来,原来落后这么多,完事昨天晚上7点开始看教程,配环境,看了好几个教程,每个教程都不一样竟然!然后问舍友,舍友说:你先知道你要跑什么项目,我说:我知道啊,我要做什么项目,想要什么结果,我都知道,项目和代码都有,…

shell脚本报错:test.sh: line 2: $\r: command not found

问题 在win上写好shell脚本,传到linux服务器运行调试的时候报错:test.sh: line 2: $\r: command not found 原因 这个错误是由于脚本文件的换行符问题引起的。Windows和Linux系统的换行符不同:Windows使用\r\n(回车+换行)。 Linux使用\n(换行)。脚本是在Windows上编辑的…

Power Apps 技术分享:制作响应式布局

前言Power Apps的一大优势就是可以不用多长时间,就能够配置出响应式布局。正文1.我们先新建一个屏幕,用来演示,如下图:2.添加一个横向容器,修改一下宽和高,根据屏幕尺寸自适应,如下图:逻辑应该蛮好理解的,就是用app的宽,减去当前控件距离顶部的距离的两倍,也就是上下…

day:22 python函数(5)——常用函数

一.len函数 print(len(列表名)) 定义:返回一个内容长度 案例: list=[1,2,3,4,5,6] print(len(list))二.abs 绝对值 print(abs(数值))输出绝对值 案例: a=-9 print(abs(a))三.id() print(id(表名)) 返回一个对象地址,返回对象唯一地址,标示一个整数 list=[1,2,3…