分享
 
 
 

jasperreport常遇到的问题及解决办法

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

可能因为我是java新手,所以遇到的问题特别多,下面仅列一些,并附上我的解决方法:

l Jsp生成不了PDF的问题

l 生成HTML时JRHtmlExporterParameter.IMAGES_MAP的问题

l 中文显示的问题

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

l 我的通用 .jasper 生成方法

[/url]

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

<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亚洲语言包

[url=http://itext.sourceforge.net/downloads/iTextAsian.jar]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"

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有