当前位置:文档之家› JasperReport学习必备手册

JasperReport学习必备手册

JasperReport学习必备手册
JasperReport学习必备手册

JasperReport学习必备手册

(小弟第一次发帖,好像用小字体才好看些,大家将就一下)这是我学习JasperReport的一点经验,欢迎大家指正、赐教,我只是起个砖块的作用,大家就接着抛玉吧,希望最后真的能累成一个必备手册,呵呵。

假设大家已经对JasperReport有一定的了解(至少知道大概的开发流程),

这里就不赘述JasperReport的好处、设计、表达式的定义等JasperReport 自带文档里有的东西了。

可能因为我是java新手,所以遇到的问题特别

多,下面仅列一些,并附上我的解决方法:

Jsp生成不了 PDF的问题

生成 HTML 时 JRHtmlExporterParameter.lMAGES_MAP 的问题

中文显示的问题

图片显示的实现方法(JFreeChart)

我的通用.jasper生成方法

我的项目的实现

Jsp生成不了PDF的问题

问题描述:运行自带的web(webapp目录下)例子时(我使用的服务器是TomCat),用Servlet生成PDF完全没问题,而JSP方式却报getOutputStream () has already been called forthis respons的令昔,看JSP源码发现和Servlet差不多。

问题原因:Tomcat首先执行.jsp文件开始的Java代码,然后准备session, out等变量。而输出PDF的代码出现在.jsp文件开始的<% ... %>段中,这样HttpServerletResponse的getOutputStream()方法已被调用。在JSP规范中定义此方法只能被调用一次,这样当Tomcat准备out变量时必然会出错。

所以基于TomCat的服务器都会出错,如Jboss?un 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?ima ge=");

特别是:exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image .jsp?ima ge=");

这几句,感觉莫名其妙的,最初猜想是显示图片用的,可到底是不是呢?而且生成的Html 页面的源码中,有很多

到底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/im

ages/pixel.GIF");

this.loadedImagesMap.put(pxBytes, "px");

this.imagesMap.put("px", pxBytes);

哈哈,原形毕露了,原来px 就是dori/jasper/engine/images/pixel.GIF一个小不点),但它对网页的美观起了很大的作用,不信你写错lmage(jsp、servlet)的路径看看(这也是个可能出错的地方)。

中文显示的问题

问题描述:生成的Html或PDF中文显示为乱码或不显示

解决方法(HTML):

如果只要求生成Html(可能不会有这么简单就能打发走的客户),很好

办,如果是JSP: <%@ pagecontentType="text/html;charset=GB2312" %>

如果是Servlet:response.setContentType("text/html;charset=GB2312"); 哈哈,大功告成,预知PDF的中文解决方法,请拨打收费咨询电话110。解决方法(PDF):

大家把手上的板砖放下吧,我说还不行吗,只是不知道这是不是正确或比较好的解决方法,请多指点。

由于生成PDF时没有什么地方可以设置charset=GB2312真是个天才的傻想法)。

我们分三步走好了。

1.由于JasperRepor使用iText生成PDF,所以我们需要iText亚洲语言

http://itext.sourceforge. net/dow nloads/iTextAsia n.jar

将他放在lib中。

2.在JasperReport的设计xml中,可以定义一个中文Font:

fon tName="Arial" size="12"

pdfFo ntName="STSo ng-Light"pdfE ncod in g="U niGB-UCS2-H" isPdfEmbedded="true"/>

其中pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H"的就是iTextAsian.jar包中定义的字体了。

3 .汉字都用UTF-8编码

iReport 保存的汉字都是UTF-8编码

还可以使用UltraEdit,只需菜单Advaneed

相关主题
文本预览
相关文档 最新文档