首页 > 编程语言 >JasperReport 学习必备手册

JasperReport 学习必备手册

时间:2022-12-08 12:04:23浏览次数:63  
标签:必备 生成 JasperReport imagesMap setParameter IMAGES PDF 手册


这是我学习JasperReport的一点经验,欢迎大家指正、赐教,我只是起个砖块的作用,大家就接着抛玉吧,希望最后真的能累成一个必备手册,呵呵。
假设大家已经对JasperReport有一定的了解(至少知道大概的开发流程),这里就不赘述JasperReport的好处、设计、表达式的定义等JasperReport自带文档里有的东西了。
可能因为我是java新手,所以遇到的问题特别多,下面仅列一些,并附上我的解决方法:l Jsp生成不了PDF的问题
l 生成HTML时JRHtmlExporterParameter.IMAGES_MAP的问题
l 中文显示的问题
l 图片显示的实现方法(JFreeChart)
l 我的通用 .jasper 生成方法
l 我的项目的实现
Jsp生成不了PDF的问题 问题描述:运行自带的web(webapp目录下)例子时(我使用的服务器是TomCat),用Servlet生成PDF完全没问题,而JSP方式却报getOutputStream() has already been called for this response 的错,看JSP源码发现和Servlet差不多。
问题原因:Tomcat首先执行.jsp文件开始的Java代码,然后准备session, out等变量。而输出PDF的代码出现在.jsp文件开始的% ... %段中,这样HttpServerletResponse的getOutputStream()方法已被调用。在JSP规范中定义此方法只能被调用一次,这样当Tomcat准备out变量时必然会出错。
所以基于TomCat的服务器都会出错,如Jboss, Sun ONE AppServer
解决方法:很简单,按照JSP/Servlet规范定义输出非文本内容,如图片、声音等应该使用Servlet而不是JSP。在Servlet中输出流完全由应用程序按需打开/关闭。
虽然仿佛这不叫解决方法,但我查了很多地方,也没有找到更好的说法,所以大家做JasperReport还是用Servlet好了
生成HTML时JRHtmlExporterParameter.IMAGES_MAP的问题 这算不得一个问题,只是当时我有点迷惑,就拿出来说说好了。
不知大家注意过没有,每次生成Html时,都有下面一段:

Map imagesMap = new HashMap();
session.setAttribute("IMAGES_MAP", imagesMap);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image.jsp?image=");
特别是:
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image.jsp?image=");
这几句,感觉莫名其妙的, 
最初猜想是显示图片用的,可到底是不是呢?
而且生成的Html页面的源码中,有很多
tdimg src="image?image=px" width=40 height=1/td
到底px是什么样的图片?
查看javadoc,写的过于简单,根本没有说明。于是,看源码:

his.imagesMap = (Map)this.parameters.get(JRHtmlExporterParameter.IMAGES_MAP);
if(this.imagesMap == null)
{
this.imagesMap = new HashMap();
}

………….

this.loadedImagesMap = new HashMap();
byte[] pxBytes = JRImageLoader.loadImageDataFromLocation("dori/jasper/engine/images/pixel.GIF");
this.loadedImagesMap.put(pxBytes, "px");
this.imagesMap.put("px", pxBytes);
哈哈,原形毕露了,原来px就是dori/jasper/engine/images/pixel.GIF(一个小不点),但它对网页的美观起了很大的作用,不信你写错Image(jsp、servlet)的路径看看(这也是个可能出错的地方)。
中文显示的问题 问题描述:生成的Html或PDF中文显示为乱码或不显示
解决方法(HTML):
如果只要求生成Html(可能不会有这么简单就能打发走的客户),很好办,如果是JSP: %@ page contentType="text/html;charset=GB2312" %
如果是Servlet:response.setContentType("text/html;charset=GB2312");
哈哈,大功告成,预知PDF的中文解决方法,请拨打收费咨询电话110。
解决方法(PDF):
大家把手上的板砖放下吧,我说还不行吗,只是不知道这是不是正确或比较好的解决方法,请多指点。
由于生成PDF时没有什么地方可以设置charset=GB2312(真是个天才的傻想法)。
我们分三步走好了。
1.由于JasperReport使用iText生成PDF,所以我们需要iText亚洲语言包
​​​http://itext.sourceforge.net/downloads/iTextAsian.jar​​​ .
将他放在lib中。
2.在JasperReport的设计xml中,可以定义一个中文Font:
reportFont name="Arial_Normal" isDefault="true" fontName="Arial" size="12" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/
其中pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H"的就是iTextAsian.jar包中定义的字体了。
3.汉字都用UTF-8编码
iReport保存的汉字都是UTF-8编码
还可以使用UltraEdit,只需菜单Advanced – Configuration… - General 勾选 Auto detect UTF-8 files – (On),就可以用它编辑UTF-8编码的汉字了。
图片显示的实现方法(JFreeChart) 所谓Report,图片自然必不可少,特别是所谓的chart,例子里有chart的实现,其实那只是实现的一种方法,将chart定义为variable,然后在ChartScriptlet.java(Scriptlet.)中生成chart,setVariableValue。
其实我们可以看到,由于JasperReport本身不带Chart功能,所以她(请容许我使用”她”,谁让我是光棍程序员呢,嘿嘿)的chart都是依靠别的工具生成,然后作为variable或者parameter传递的。这样我们就可以随心所欲的让她显示任何BufferedImage了,嘿嘿,管他是JfreeChart生成的还是静态image。
我比较倾向于定义为parameter,因为可以在生成JRDataSource的同一个程序中得到Chart的数据,免去Scriptlet里的数据库操作,或者如果是简单报表,直接Scriptlet都省了。
tartdioengnget.javaRITER, out);

我的通用 .jasper 生成方法 JasperReport自带的范例都是用ant构建的,但每个范例有不同的build.xml和.class,那么能不能有一个统一的构件程序呢?iReport可以,但他每次都会写所有的属性,显得页面很不整洁、明了,所以我修改了一个范例的build.xm.和.class,来构建我的JasperReport。有兴趣的同道可以看看。
1.在build.xml中定义 
property name="filename" value="" /
用于动态传递文件名
2.替换所有的 arg value="-F*******.xml"/为arg value="-F${filename}.xml"/ 
3.修改程序,每次FILL时都传JREmptyDataSource进去。
每次build时,只需在以前的基础上加上参数:
-Dfilename=******
如:ant compile -Dfilename="myDemo"
我的项目的实现只是进行了简单的封装,可能并不适用于其他系统

标签:必备,生成,JasperReport,imagesMap,setParameter,IMAGES,PDF,手册
From: https://blog.51cto.com/u_5488952/5920861

相关文章

  • 全网最详细elasticsearch7.10.2安装手册
    前言网上关于elasticsearch的安全教程很多,但是只是局限在最基础的启动就成功就完了。今天给大家分享elasticsearch7.10.2最全安装手册,记录自己踩过的一些坑。一、环境说明服......
  • PowerScript语法参考手册之数据类型
    前言:本文用于PowerBuilder12.6程序员,PowerBuilder最初由Sybase发布,能很快捷开发C/S程序或者多层应用系统。SAP以58亿美元现金收购Sybase以抗衡甲骨文,PowerBuilder12.6是SAP......
  • 5702开发板用户手册
    一、底板简介1.1产品简介在这里,对这款MP5702开发板底板进行简单的功能介绍。本公司相关核心板都可与其对接,型号如MP5652(请详见用户手册)。底板+核心板的模式来设计组成......
  • 吵架必备的99句英语口语
    1.Youmakemesick!你真让我恶心!2.What’swrongwithyou?你怎么回事?3.I’mverydisappointed.真让我失望。4.Gotohell.去死吧。5.You’......
  • 电子工程师芯片手册Datasheet获取途径
    1.最直接的方法就是去原厂官网上下载。这方面各大芯片厂商为用户考虑的都比较周到,一般常用器件在各个公司的官网上都能够按照器件型号查找并方便的下载到。如​​ti​​​,NX......
  • 精选、前端开发N个必备的 VSCode 插件
    目录​​一、汉化vscode​​​​二、vue2代码提示​​​​三、格式化高亮vue代码​​​​四、实时预览网页效果​​​​五、html标签​​​​六、格式化代码​​​​七、规......
  • 最好的HTML 5编码教程和参考手册分享
    有志于在泰泽上大展拳脚的同学们一点要收藏一下关于HTML5的一些好教材好文章了,这里为大家转载了一篇,方便大家记录今天我们介绍相关HTML5的参考手册,演讲稿,电子书和教程。......
  • 【React自学笔记07】一些必备知识点
    一、样式设置1.内联样式...2.外部样式表...3.模块化css使用步骤:创建一个xxx.module.css在组件中引入cssimportclassesfrom'./App.module.css';通过cl......
  • RHEL8关于创建Service服务的帮助手册
    Systemd手册主页Systemd服务关于搜索路径顺序和部分配置项手册Systemd服务配置语法如果想通过man查看手册的话,那么使用mansystemd.<unit|syntax|...>格式进行查看帮......
  • Kubernetes监控手册04-监控Kube-Proxy
    简介首先,请阅读文章《​​Kubernetes监控手册01-体系介绍​​》,回顾一下Kubernetes架构,Kube-Proxy是在所有工作负载节点上的。Kube-Proxy默认暴露两个端口,10249用于暴露......