JasperReport 学习必备手册

JasperReport 学习必备手册

            (小弟第一次发帖,好像用小字体才好看些,大家将就一下)

 
       这是我学习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时,都有下面一段:

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       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页面的源码中,有很多

  <td><img 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

时间: 2024-09-20 16:51:23

JasperReport 学习必备手册的相关文章

深度学习必备手册(上)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册--博客整理系列(六) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论文.

深度学习必备手册(下)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册(上)--博客整理系列(五) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论

机器学习必备手册

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册(上)--博客整理系列(五) 深度学习必备手册(下)--博客整理系列(六) 机器学习是计算机科学的一个子领域,在人工智能领域,机器学习逐渐发展成模式识别和计算科学理论的研究.从2016年起,机器学习到达了不合理的火热巅

《Network Warrior中文版(第2版)——思科网络工程师必备手册》一3.2 自动协商的运作方式

3.2 自动协商的运作方式 Network Warrior中文版(第2版)--思科网络工程师必备手册 首先,来看一下自动协商干不了的事儿:在接口上激活自动协商功能时,该机制既不会自动测出以太网链路对端接口的配置,也不会针对测出的配置,随即与之匹配.但很多网管人员都对此不明就里,从而导致了许多问题. 自动协商是一种协议,与所有协议一样,只有链路两端同时运行时,协议机制方可生效.换句话说,若链路一端运行了自动协商,而对端却没有,那么该机制就不能自动测出链路对端的速度和双工配置.要是链路对端也开启了自

站长网联手简书科技《站长必备手册》新版下载

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 电子书名称:<站长必备手册>071203版 电子书格式:exe 制 作 人:一棵胡杨 审 核 人:mackaka 制作日期:2007年12月03日 售 价:0 元 售后服务:无 其它说明:本书长期免费,每周有一次小更新,每月一次大更新,敬请关注 2007-12-2 18:32 本书简介: 经常逛书店,从没看到过介绍站长或者给站长用的书,在成为站长之前,我曾经跑遍了各大实体或者网上书店,都是失望而归,估计很多站长都和我一样,长久以来只能不断

《站长必备手册》071203版

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 电子书名称:<站长必备手册>071203版 电子书格式:exe 制 作 人:一棵胡杨 审 核 人:mackaka 制作日期:2007年12月03日 售 价:0 元 售后服务:无 其它说明:本书长期免费,每周有一次小更新,每月一次大更新,敬请关注 下载地址:点击下载 2007-12-2 18:32 本书简介: 经常逛书店,从没看到过介绍站长或者给站长用的书,在成为站长之前,我曾经跑遍了各大实体或者网上书店,都是失望而归,估计很多站长都和我一

莫湘兆:五一国际劳动节站长宣传推广必备手册

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 眼下四月炎热的天气在这美丽的国度活跃,这中间有一种生物在奋斗,智者把他们的职业称之为站长,简而言之就是利用互联网技术进行网站建设,并且经营的伟大劳动人民,时间匆匆而至,转眼间就到五月天,一年一度的五一国际劳动节为了给劳动在各行各业的人民进行休假,将进行全国性质的放假,但是这一种职业的的劳动者却坚持每天尽心尽责为这个行业创造着价值,不论是平台,

学霸秘诀:高中文科学习必备的4个技巧!

1.会听课听课谁不会呀,你是不是也这样想?同在一个教室听课.同为一个老师讲课,等考试成绩一下来,咋差距就那么大呢?这里就有"会不会听课"的重要因素了.听课中,有些内容是真听懂了:也有些内容是"疑似听懂了",即好像听懂了:还有似懂非懂的和稀里糊涂没听懂的.这些差别在听课中表现的不十分明显,或者是基本上看不出来.但是,一做题,一测验,一考试,就会"原形毕露"了.真听懂了,则题做得出来,还差不多能够做得对.好像听懂的,其实还是不懂或不真懂,做起题来,就

做好应急公关的必备手册:冷静,迅速,高效,洁身自好

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在网络上做产品,难免会遇到一些同行,摩擦也就成了自然而然的事情.就像你开淘宝店,还会有差评师捣乱,所以在经营网站的过程中我们总会遇到几则关于自己的不利消息.大家还别小看这样的负面,一旦传播开来就严重影响我们正常的运营,那么倘若这些事情发生在我们身上,面对负面消息我们该怎么办呢? 手册之一,冷静 说起来也巧,自己前段时间的一个网站出于宣传的目的