JAVA调用IReport模板生成PDF文件及常见的几个问题解决 您所在的位置:网站首页 ireport打不开 JAVA调用IReport模板生成PDF文件及常见的几个问题解决

JAVA调用IReport模板生成PDF文件及常见的几个问题解决

2024-01-23 14:42| 来源: 网络整理| 查看: 265

转载:http://cache.baiducontent.com/c?m=v14RCBGrkK42yz2FeanXqBoajYiAJ_4DRfR4Nf4hLHBWypeB9bh7NcTa1kmpVXg4BJ3p8xYUEVVoCpe4uaQyv7Bg_Ve0PgPHceNv6yNBw8uuwZ0LI9qiNQSdHZtCFqlfK5ZAweI7EciLEB12Pc6cxKuL3Zab9LlzThf9CQucpzarnXAQLFecPUZlHP7hV1GLz5yzQ2m8Fg-nN_m27I_3ba&p=9c638915d9c040a92ab98c2d02148d&newp=8a6ec54ad5c247b70be2966d5c55cf231610db2151d6d4176b82c825d7331b001c3bbfb423291406d8c57d6c00a94a5eebf63777370923a3dda5c91d9fb4c5747990&s=747d392acfc03cab&user=baidu&fm=sc&query=ireport%C4%A3%B0%E5%C9%FA%B3%C9PDF%CE%C4%BC%FE&qid=c3cbbf4a0009d9ab&p1=2

 

先生成一个空白模板在这里插入图片描述

然后先不要急着拼组件,先来大致了解一下这个工具的使用方法和模板的构造在这里插入图片描述title:只在报表的第一页显示,后面的就不在显示,常用来放置报表名称。page header :相当于页眉,在第一页位于title的下面,而后的页中是位于最上部。page footer :相当于页脚,和page header是想对应的。detail :报表内容显示的部分,这部分内容是重复的,相当于迭代的过程,常用于放置类似表格中列的内容。column header :针对Detail Band 的表头段,一般情况下在这个段中画报表的表头,用于放置表头内容column footer :和column header 相对的。summary :出现在整个报表的最后一页的detail的下面,统计总值结果。

下面下来做个测试,了解一下这个模板的各个位置,首先把各个构件的高度都调到最高,让这个页面放到最大,如果不放大的话,所有的构件都在同一页上了,看不出来效果,现在我把每个构件的中间都放了一个staticText,写上他们的名字,再把背景图也加上,看下效果,在这里插入图片描述在这里插入图片描述

如果你不知道背景图怎么展开,先点一下构件的名字,然后把属性高度调到最高,也就是802,你就可以看到他了,然后再从组件里拖一个image过来,放一个图片就OK了在这里插入图片描述

然后准备就绪,编译一把,看看效果

共有三页,第一页:在这里插入图片描述第二页在这里插入图片描述第三页:在这里插入图片描述

然后可以总结下,这个title是只在第一页会有,summary是只在最后一页会有,背景图是每一页都有,detail除了第一页和最后一页都有,其他的组件都是除了最后一页都有,然后知道了这些以后就可以按照自己的需求去写这个页面了。

主要就是有个list的遍历循环,我等会儿再写。

list的循环,这里要结合java代码给塞数据

先来看一下塞一个变量怎么塞:在这里插入图片描述点击效果预览,会提示让你输入这个参数内容在这里插入图片描述然后就看到了这个参数了在这里插入图片描述

下面我们来看list是怎么搞的。先建一个list属性的参数,记得已定要改为list格式在这里插入图片描述然后在dataset1中添加参数和刚才的名称一致在这里插入图片描述在这里插入图片描述

然后生成jasper文件模板以后我用java代码调用一下看看

稍等会儿再写,,

java调用jasper文件demo

使用到的包:在这里插入图片描述

net.sf.jasperreports jasperreports 6.0.0 com.itextpdf itextpdf 5.5.11 com.itextpdf itext-pdfa 5.5.11 com.itextpdf itext-asian 5.2.0 org.codehaus.groovy groovy-all 2.4.13 package com.lin.study.test; import com.lin.study.utils.JasperHelper; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.util.JRLoader; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JasperTest { public static void main(String[] args) throws Exception { JRDataSource jrDataSource = new JRBeanCollectionDataSource(null);//这个应该是给Jasper转化List的作用 Map testMap=new HashMap(); List list = new ArrayList(); BenzBean bean1 = new BenzBean(); bean1.setBenzListParamName("C100"); BenzBean bean2 = new BenzBean(); bean2.setBenzListParamName("C200"); BenzBean bean3 = new BenzBean(); bean3.setBenzListParamName("C300"); list.add(bean1); list.add(bean2); list.add(bean3); testMap.put("benzListParam",list); testMap.put("benzParam","我是林俊杰"); List jasperPrintList = new ArrayList(); File BenzIReport = new File("D:/iReport/work/jasper/BenzIReport.jasper"); if(BenzIReport.exists()){ JasperReport Benz = (JasperReport) JRLoader.loadObject(BenzIReport); JasperPrint protocolTemplate = JasperFillManager.fillReport(Benz,testMap,jrDataSource); jasperPrintList.add(protocolTemplate); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); exporter.exportReport(); byte[] bytes = baos.toByteArray(); File file = new File("D:/iReport/work/benz.pdf"); try { FileOutputStream fos = new FileOutputStream(file); fos.write(bytes); System.out.println("写入成功"); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

bean对象

package com.lin.study.test; public class BenzBean { private String benzListParamName; public String getBenzListParamName() { return benzListParamName; } public void setBenzListParamName(String benzListParamName) { this.benzListParamName = benzListParamName; } }

效果如下,我给他放在titile里面展示出来了,放在Detail里面没展示出来,后面我再找找原因在这里插入图片描述

还有这个jasper的数据连接,我之前一直用的Empty,因为我觉得这个无所谓的,我在代码里面查出来给他塞进去是一样的效果,我这里还是补充一下吧。

如果你是Orcale数据库的话,先准备好这个jar包链接:https://pan.baidu.com/s/1HJXvEpiuiIQSm_2E747m3g提取码:uhzo在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述然后也是拖拖拽拽,这里也不多讲了

常见的问题主要有1,空白展示为null;在这里插入图片描述2,文字内容太长,溢出了;在这里插入图片描述3,中文乱码;在这里插入图片描述在这里插入图片描述

net.sf.jasperreports.awt.ignore.missing.font=true

4,发布到linux服务器中文文字重叠,吃字;

吃字也是字体的问题,因为linux没有安装中文字符集,所以展示中文乱码或者计算字符长度/宽度有问题,导致文字重叠

5,生成pdf空白页问题;在这里插入图片描述6,commons-digester问题代码生成pdf的时候会报错少个什么digester/Rule这个类,这是因为少了这个jar包这个jar包我忘了从哪里搞了,我放在云盘上吧,直接拿去用得了链接:https://pan.baidu.com/s/1JWboJzpuOu6Ff96xGJ8baA提取码:u7mlpom里我是这么写的

commons-digester commons-digester 2.1

其他的我暂时想不起来了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有