﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-海鸥航际-文章分类-报表专题</title><link>http://www.blogjava.net/sgsoft/category/27.html</link><description>JAVA站</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 19:12:06 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 19:12:06 GMT</pubDate><ttl>60</ttl><item><title>使用iReport制作报表模板</title><link>http://www.blogjava.net/sgsoft/articles/912.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Wed, 02 Feb 2005 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/912.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/912.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/912.html</trackback:ping><description><![CDATA[软件工程师, 湖南省长沙铁道学院科创计算机系统集成有限公司<BR>2005 年 1 月 
<BLOCKQUOTE>现在很多公司和个人都在使用iReport制作报表模板，我接触的时间也不长，在这里，我将我在实践过程中的一些经验以及碰到的一些问题和大家一起来探讨。</BLOCKQUOTE>
<P><A name=IDA4BS4><SPAN class=atitle2>一、iReport介绍</SPAN></A><BR>说到iReport不得不先介绍Jasperreport，Jasperreport是一个报表制作程序，用户需要按照它制定的规则编写一个XML文件，然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等等。而iReport就是一个制作Jasperreport的XML文件的可视化开发工具。</P>
<P><A name=IDAECS4><SPAN class=atitle2>二、模板制板</SPAN></A><BR>首先必须下载一个iRport（地址：<A href="http://ireport.sourceforge.net/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://ireport.sourceforge.net</A>），现在的最高版是0.4.0，我们这里使用的是0.2.2。</P>
<P>将iReport解压缩以后编辑目录下的iReport.bat文件即可，如下</P><A name=IDAQCS4><B></B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
@echo off

set JAVA_HOME=C:\j2sdk1.4.0_03
set ANT_HOME=C:\ant
set IREPORT_HOME=C:\Documenti\progetti\iReport\iReport2\

rem %ANT_HOME%\bin\ant javadocs
%ANT_HOME%\bin\ant iReport
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>只要设置相应的一些路经就可以，这里是采用ant来运行，当然如果你没有安装ant也不想安装它，那么也可以，找到noAnt文件夹下的startup.bat文件即可运行。</P>
<P>建立新模板时，便得到如图所示的界面。</P>
<P><A name=IDA0CS4><B></B></A><BR><IMG height=600 alt="" src="http://www-900.ibm.com/developerworks/cn/java/j-ireport/images/image001.png" width=800 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>选中菜单项"Datatsource"，单击其子菜单项"Connection/Datasources"，便会弹出一个编辑框，选择"New"按钮，</P>
<P><A name=IDAIDS4><B></B></A><BR><IMG height=328 alt="" src="http://www-900.ibm.com/developerworks/cn/java/j-ireport/images/image003.png" width=471 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>输入数据源名称，选择JDBC Driver，在输入JDBC URL时，可以点击"Wizard"按钮，它会根据你选的JDBC Driver配置好你的URL，不过得修改IP地址以及DatabaseName，输入数据库名、用户名、密码。点击"Test"按钮，确定连接情况，然后保存。</P>
<P>下图是我做好的一个报表模板：</P>
<P><A name=IDAXDS4><B></B></A><BR><IMG height=600 alt="" src="http://www-900.ibm.com/developerworks/cn/java/j-ireport/images/image005.png" width=800 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>$F{}是用来标明这是数据库字段。$F{WINDOWS_NAME}、$F{NUMBER}、$F{vname}、$F{SP_NAME}和$F{SP_TYPE}是数据库里的字段，也是我要在模板里用到的字段。对于$F{NUMBER}、$F{vname}、$F{SP_NAME}和$F{SP_TYPE}这四个字段，虽然放在其他域也可以显示出结果，比如：pageHeader域、columnHeader域、columnFooter域等等，但是因为会有多列的数据要显示，所以必须放到"detail"域中。</P>
<P>模板画完了，现在来配置模板的查询语句，以及字段、变量和参数。</P>
<P>首先输入查询语句，如"select * from v_baseinfo_statbanjiereport"，点击"Read fields"按钮，会查询出该表的所有字段名</P>
<P><A name=IDAHES4><B></B></A><BR><IMG height=470 alt="" src="http://www-900.ibm.com/developerworks/cn/java/j-ireport/images/image007.png" width=543 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>如果您要有条件的查询，那么就在后面添加Where语句，如"select * from v_baseinfo_statbanjiereport where DEPT_NAME=$P{orgname} and END_SP_DAY=$P{etime}"，点击"Save query to report"按钮保存。</P>
<P>这里要提醒大家注意的是，您可以直接把参数写入Where语句中，象这样"where DEPT_NAME='中国' and END_SP_DAY='2004-11-23'"；但是从java程序或者jsp页面传过来的参数是中文字符的话，您就必须做编码转换或者用英文字符、数字来代替；还有像日期参数"2004-11-23"，jasperreports好象解析不了，如果你把SQL语句改成" select * from v_baseinfo_statbanjiereport where DEPT_NAME='$P{orgname}' and END_SP_DAY='$P{etime}'"，那么又会抛出异常，因为Jasperreport会先把SQL语句设置成预编译语句"select * from v_baseinfo_statbanjiereport where DEPT_NAME=？and END_SP_DAY=？"，所以SQL语句中用到参数的时候，除了其特定的"$P{}"符号外，不能有别的标点符号，传进去的参数值也尽量不要带标点符号，所以日期格式得改成"20041123"。</P>
<P>设置模板字段：</P>
<P><A name=IDAXES4><B></B></A><BR><IMG height=285 alt="" src="http://www-900.ibm.com/developerworks/cn/java/j-ireport/images/image009.png" width=453 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>设置模板参数：</P>
<P><A name=IDAFFS4><B></B></A><BR><IMG height=285 alt="" src="http://www-900.ibm.com/developerworks/cn/java/j-ireport/images/image011.png" width=453 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>当这些全部做完后，点击"Save"按钮，就会生成一个XML文件，再点击"Compile"按钮，就会生成一个后缀名为jasper的文件。</P>
<P>现在可以预览一下模板的效果，先选择菜单项"Build"的子菜单项"PDF preview"、"HTML preview"、"JAVA 2D preview"、"Excel preview"、"CSV preview"和"JRViewer preview"中的一项（对这些项显示工具的配置在菜单项Tools\Options..下的External programs）， 再点击"Execute report"；如果你想带数据预览，还得先激活一下刚配置的数据源，选中菜单栏"Build"下的子菜单栏"Set active connection"，会弹出一编辑框，选中一个数据源名称，点击"OK"。</P>
<P>此时我们就要引入一个jsp页面，假设是pdf.jsp，那么下面就是pdf.jsp的代码：</P><A name=IDAUFS4><B></B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
&lt;%@ page import="dori.jasper.engine.*" %&gt;
&lt;%@ page import="java.util.*" %&gt;
&lt;%@ page import="java.io.*" %&gt;
&lt;%@ page import="java.sql.*" %&gt;
 
&lt;%
	File reportFile = new File(application.getRealPath("/reports/ribanjietongji.jasper"));
 
	Map parameters = new HashMap();
	parameters.put("orgname", "zhongguo");
	parameters.put("etime", "20041123");
	Connection conn=null
	
	//以下忽略得到数据库连接过程
//……
		
	byte[] bytes = 
		JasperRunManager.runReportToPdf(
			reportFile.getPath(), 
			parameters, 
			conn
			);
	
	response.setContentType("application/pdf");
	response.setContentLength(bytes.length);
	ServletOutputStream ouputStream = response.getOutputStream();
	ouputStream.write(bytes, 0, bytes.length);
	ouputStream.flush();
	ouputStream.close();
%&gt;
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>程序里面要和大家说明的就是，"/reports/test.jasper"这个路径是相对于你这个jsp页面的，比如你的jsp页面保存在D:\\..\ROOT\目录下，那么你就必须在这个目录下建一个report目录，然后把你做好的报表模板文件放到该目录下来。</P><A name=IDA2FS4><B></B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
		Map parameters = new HashMap();
	parameters.put("orgname", "zhongguo");
	parameters.put("etime", "20041123");
	</CODE></PRE></TD></TR></TBODY></TABLE>
<P>"orgname"和"etime"必须和模板时定义的参数名称一致。</P>
<P><A name=IDAEGS4><SPAN class=atitle2>三、结束语</SPAN></A><BR>到此整个模板就算完成了，有什么没有说明白或者错误的地方，希望你能和我一起来讨论。</P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>舒峰,联系方式:<A href="mailto:feng.shu@chinacreator.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">feng.shu@chinacreator.com</A> ,简介： 本人目前是湖南省长沙铁道学院科创计算机系统集成有限公司软件中心软件工程师，主要研究J2EE编程技术。</TD></TR></TBODY></TABLE><BR clear=all><img src ="http://www.blogjava.net/sgsoft/aggbug/912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-02-02 12:27 <a href="http://www.blogjava.net/sgsoft/articles/912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iReport 和 Jasperreport整合开发web报表向导 </title><link>http://www.blogjava.net/sgsoft/articles/547.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Fri, 21 Jan 2005 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/547.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/547.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/547.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/547.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我是在一个星期以前接触iReport 和 Jasperreport的，下载最初它们并没有吸引我的兴趣（或信任），主要是他们的版本的问题（我一直不敢用版本都不到1.0的工具软件，目前它们的版本：iReport0.2.2,Jasperreport0.5.0），不过听说有人在用他们，于是就仔细看了一下（因为在java应用程序的web打印方面我一直都是采用浏览器打印，非常痛苦，所以宁可信其有不可信其无，呵...&nbsp;&nbsp;<a href='http://www.blogjava.net/sgsoft/articles/547.html'>阅读全文</a><img src ="http://www.blogjava.net/sgsoft/aggbug/547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-01-21 15:53 <a href="http://www.blogjava.net/sgsoft/articles/547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 JFreeChart来创建基于web的图表  </title><link>http://www.blogjava.net/sgsoft/articles/346.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Sun, 16 Jan 2005 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/346.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/346.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/346.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" width="600" border="0"> <tbody> <tr valign="top"> <td><span class="atitle">使用 JFreeChart来创建基于web的图表</span> </td> <td width="8"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="8" border="0" /></td> <td valign="bottom" align="right" width="180"></td> <td width="6"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="6" border="0" /></td></tr><!-- Black line separator--> <tr valign="top"> <td bgcolor="#000000" colspan="5"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="100" border="0" /></td></tr> <tr valign="top"> <td bgcolor="#ffffff" colspan="5"><img height="8" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="100" border="0" /></td></tr></tbody></table><!-- END HEADER AREA--><!-- START BODY AREA--> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr valign="top"> <td width="10"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="10" border="0" /></td> <td width="100%"> <table cellspacing="0" cellpadding="0" width="168" align="right" border="0"> <tbody> <tr><!-- Sidebar Gutter--> <td width="8"><img height="21" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="5" /></td> <td width="160"><!-- Start TOC--> <table cellspacing="0" cellpadding="0" width="160" border="0"> <tbody> <tr> <td width="160" bgcolor="#000000" height="1"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="160" /></td></tr> <tr> <td align="middle" background="" height="5"><b>内容：</b> </td></tr> <tr> <td width="160" bgcolor="#666666" height="1"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="160" /></td></tr> <tr> <td align="right"> <table cellspacing="0" cellpadding="3" width="98%" border="0"> <tbody> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#1">一、JFreeChart项目简介</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#2">二、解读JFreeChart的源码结构</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#3">三、使用JFreeChart生成各种样式的图表</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#4">四、将生成的图表移到浏览器上</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#5">高级主题</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#resources">参考资料</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#author1">关于作者</a></td></tr></tbody></table></td></tr></tbody></table><!-- End TOC--><!-- Start Related Content Area--> <table cellspacing="0" cellpadding="0" width="160" border="0"> <tbody> <tr> <td width="160" bgcolor="#000000" height="1"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="160" /></td></tr> <tr> <td align="middle" background="" height="5"><a class="nav" href="http://www-900.ibm.com/developerWorks/cn/java/index.shtml"><b>Java 专区中还有:</b></a></td></tr> <tr> <td width="160" bgcolor="#666666" height="1"><img height="1" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="160" /></td></tr> <tr> <td align="right"> <table cellspacing="0" cellpadding="3" width="98%" border="0"> <tbody> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/java-onlinecourse-bytitle?OpenView&amp;Count=500">教学</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/cntools.nsf/dw/java-all-byname?OpenDocument&amp;count=500">工具与产品</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/cntools.nsf/dw/java-beans-bytitle?OpenDocument&amp;count=500">代码与组件</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/cnpapers.nsf/java-papers-bynewest?OpenView&amp;Count=500">所有文章</a></td></tr> <tr> <td><a href="http://www-900.ibm.com/developerWorks/cn/cntips.nsf/java-tips-bydate?OpenView&amp;Count=500">实用技巧</a></td></tr></tbody></table></td></tr></tbody></table><!-- End Related dW Content Area--> <table cellspacing="0" cellpadding="0" width="160" border="0"> <tbody> <tr> <td width="150" bgcolor="#000000" colspan="2" height="2"><img height="2" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="160" /></td></tr> <tr> <td width="150" bgcolor="#ffffff" colspan="2" height="2"><img height="2" alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width="160" /></td></tr></tbody></table><!-- END STANDARD SIDEBAR AREA--></td></tr></tbody></table> <p><a href="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/#author1">刘冬</a> (<a href="mailto:winter.lau@163.com">winter.lau@163.com</a>)<br />珠海市创我科技发展有限公司软件工程师<br />2003 年 9 月</p> <blockquote>WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别，虽然对于数据获取、业务处理等方面基本类似，但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用HTML以及图片的方式来展现数据，而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端，因此在这里也变得无能为力。回到本文的题目上来，为了创建一个可以在web浏览器上查看到图表一般有两种做法：第一种就是使用applet利用java本身对图形的支持来显示一个图表；第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高，随着现在主流浏览器放弃对JAVA的支持后，这种方式只适合一些局域网的应用，而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。</blockquote> <p><a name="1"><span class="atitle2">一、JFreeChart项目简介</span></a><br />JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目，它主要用来各种各样的图表，这些图表包括：饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。为了减少篇幅本文主要介绍前面三种类型的图表，读者可以触类旁通去开发其他样式的图表。下面几个是JFreeChart产生的这三种类型图表的结果： </p> <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image001.gif" /></p> <p align="center"><b>图1</b></p> <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image002.gif" /></p> <p align="center"><b>图2</b></p> <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image003.gif" /></p> <p align="center"><b>图3</b></p> <p>上面的三个图都是表示四个季度的某个产品的销量信息。在继续下面小节之前必须先准备好开发环境，因为是基于WEB浏览器的图表展现，因此需要一个Servlet引擎或者是J2EE应用服务器（例如WebSphere，Tomcat等）。WEB环境的搭建就不累赘了，读者根据喜好自行安装。JFreeChart引擎本身需要到SourceForge.net上下载，地址如下： </p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> JFreeChart主页：<a href="http://www.jfree.org/jfreechart/index.html">http://www.jfree.org/jfreechart/index.html</a> JFreeChart下载页面：<a href="http://sourceforge.net/projects/jfreechart/">http://sourceforge.net/projects/jfreechart/</a> </code></pre></td></tr></tbody></table></p> <p>下载的时候需要注意的是必须下载两个文件：JFreeChart以及Jcommon。目前最新配套版本是：JFreeChart 0.9.11 Jcommon 0.8.6 </p> <p>这里有点笔者在开发中遇见的问题需要注意的是：在使用Eclipse开发的时候会报一个莫名其妙的错误，错误可能指向某个类文件的第一行。遇到这样的问题一般是因为没有把Jcommon的jar包设置到项目的类路径中的缘故。具体的原因不祥。 </p> <p><a name="2"><span class="atitle2">二、解读JFreeChart的源码结构</span></a><br />在开始使用JFreeChart之前我们有必要先大概了解一下JFreeChart本身的结构以及它所带一些例子程序，这样有助于我们下一步自行开发。下载JFreeChart包后已经带有非常丰富的例子，因为JFreeChart这个项目本身的使用文档非常少，因此学习它最好的办法就是学习它所带的例子源码。在包org.jfree.chart.demo中有几十个文件用于展示JFreeChart所能支持的所有图表的结果。如果你的JDK是比较新的情况下可能在运行这些例子时会有问题，现象如下： </p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> java.lang.UnsatisfiedLinkError: initDDraw at sun.awt.windows.Win32OffScreenSurfaceData.initDDraw(Native Method) at sun.awt.windows.Win32OffScreenSurfaceData.&lt;clinit&gt;(Win32OffScreenSurfaceData.java:141) at sun.awt.Win32GraphicsDevice.&lt;clinit&gt;(Win32GraphicsDevice.java:58) at sun.awt.Win32GraphicsEnvironment.makeScreenDevice(Win32GraphicsEnvironment.java:168) at sun.java2d.SunGraphicsEnvironment.getScreenDevices(SunGraphicsEnvironment.java:240) at sun.awt.Win32GraphicsEnvironment.getDefaultScreenDevice(Win32GraphicsEnvironment.java:61) at java.awt.Window.init(Window.java:224) at java.awt.Window.&lt;init&gt;(Window.java:268) at java.awt.Frame.&lt;init&gt;(Frame.java:398) at javax.swing.JFrame.&lt;init&gt;(JFrame.java:198) at org.jfree.chart.demo.JFreeChartDemo.&lt;init&gt;(JFreeChartDemo.java:148) at org.jfree.chart.demo.JFreeChartDemo.main(JFreeChartDemo.java:285) Exception in thread "main" </code></pre></td></tr></tbody></table></p> <p>这个错误是由于新版的Swing大量的使用了微软的DirectDraw的技术来提高画图的性能，而可能你的显卡在这时候会跟你闹点情绪或者显卡本身并不支持这样的一个技术。难道就没有办法了嘛？要解决这个问题也非常简单，我们可以屏蔽掉DirectDraw，不让Swing使用该技术就可以了。在运行这些代码时给虚拟机指定参数-Dsun.java2d.noddraw即可。 </p> <p>这时可能你又该纳闷了，不说是基于Web的图表嘛，怎么又扯到Swing上了？这是因为为了使开发者容易上手，无需配置任何运行环境，所以这些例子都是基于GUI方式的用于展现给开发者如果生成一个图表，我们要学习的也就是如何利用这个引擎生成图表而不是怎么来显示一个图表。当我们把生成的图表对象Export到一个图像文件即可在Web上发布。 </p> <p>下面我们来介绍JFreeChart中几个核心的对象类：</p> <table cellspacing="0" cellpadding="5" width="100%" border="1"> <tbody> <tr bgcolor="#99ccff"> <td width="30%">类名</td> <td width="70%">类的作用以及简单描述</td></tr> <tr> <td>JFreeChart</td> <td>图表对象，任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象</td></tr> <tr> <td>XXXXXDataset</td> <td>数据集对象，用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类</td></tr> <tr> <td>XXXXXPlot</td> <td>图表区域对象，基本上这个对象决定着什么样式的图表，创建该对象的时候需要Axis、Renderer以及数据集对象的支持</td></tr> <tr> <td>XXXXXAxis</td> <td>用于处理图表的两个轴：纵轴和横轴</td></tr> <tr> <td>XXXXXRenderer</td> <td>负责如何显示一个图表对象</td></tr> <tr> <td>XXXXXURLGenerator</td> <td>用于生成Web图表中每个项目的鼠标点击链接</td></tr> <tr> <td>XXXXXToolTipGenerator</td> <td>用于生成图象的帮助提示，不同类型图表对应不同类型的工具提示类</td></tr></tbody></table> <p>基本上我认为JFreeChart项目本身的类结构的设计并不是很好，首先在创建图表的时候用到了大量的工厂方法，这样做虽然可以简化创建图表对象的代码，但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情；其次除图表对象本身外其余的类过于复杂，使用者必须去了解每个类型的图表对象应该对应哪些Axis、Plot、Renderer类，并且必须非常熟悉这些类的构造函数中每个参数的具体含义。这些问题都大大困扰很多初学者。不过，虽然存在很多问题，但是JFreeChart本身仍不失为一个非常优秀的图表引擎，况且项目本身也在逐渐的发展中。 </p> <p>在非常简略的介绍了JFreeChart本身的代码结构后，下面我们开始动手试验几个常用的图表并把他们放到web上。 </p> <p><a name="3"><span class="atitle2">三、使用JFreeChart生成各种样式的图表</span></a><br />限于篇幅的问题我们在这里只实现两种常用的图表，其他类型图表读者可以触类旁通。我们先给出柱状图的实现，饼图的实现再来跟柱状图进行比较。 </p> <p><span class="atitle3">1 柱状图</span></p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> package lius.chart.demo; import java.io.*; import org.jfree.data.*; import org.jfree.chart.*; import org.jfree.chart.plot.*; /** * 该类用于演示最简单的柱状图生成 * @author Winter Lau */ public class BarChartDemo { public static void main(String[] args) throws IOException{ CategoryDataset dataset = getDataSet2(); JFreeChart chart = ChartFactory.createBarChart3D( "水果产量图", // 图表标题 "水果", // 目录轴的显示标签 "产量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向：水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D:\\fruit.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } /** * 获取一个演示用的简单数据集对象 * @return */ private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, null, "苹果"); dataset.addValue(200, null, "梨子"); dataset.addValue(300, null, "葡萄"); dataset.addValue(400, null, "香蕉"); dataset.addValue(500, null, "荔枝"); return dataset; } /** * 获取一个演示用的组合数据集对象 * @return */ private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "广州", "荔枝"); return dataset; } } </code></pre></td></tr></tbody></table></p> <p>程序运行结束后生成的图片文件效果如下图所示：</p> <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image004.gif" /></p> <p align="center"><b>图4</b></p>如果是使用简单的数据即使用getDataSet方法获取数据集时产生的图片文件如下： <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image005.gif" /></p> <p align="center"><b>图5</b></p> <p><span class="atitle3">2 饼图</span></p> <p>对于饼图而言，数据集的获取用的不是同一个数据集类，另外饼图不支持同一个类别的项目中还有子项目这样的数据。我们只给出创建饼图的代码，至于写图表到一个文件则与柱状图一致，无需重复。 </p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> package lius.chart.demo; import java.io.*; import org.jfree.data.*; import org.jfree.chart.*; /** * 用于演示饼图的生成 * @author Winter Lau */ public class PieChartDemo { public static void main(String[] args) throws IOException{ DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", // 图表标题 data, true, // 是否显示图例 false, false ); //写图表对象到文件，参照柱状图生成源码 } /** * 获取一个演示用的简单数据集对象 * @return */ private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果",100); dataset.setValue("梨子",200); dataset.setValue("葡萄",300); dataset.setValue("香蕉",400); dataset.setValue("荔枝",500); return dataset; } } </code></pre></td></tr></tbody></table></p> <p>生成的饼图文件效果如下： </p> <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image006.gif" /></p> <p align="center"><b>图6</b></p> <p><a name="4"><span class="atitle2">四、将生成的图表移到浏览器上</span></a><br />为了将生成的图表直接传给客户端浏览器，只需要将前面两个例子中的文件流换成是通过HttpServletResponse对象获取到的输出流，详细代码清单如下： </p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> package lius.chart.demo; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServlet; import org.jfree.data.*; import org.jfree.chart.*; /** * 演示通过servlet直接输出图表 * @author Winter Lau */ public class ChartDemoServlet extends HttpServlet { public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.setContentType("image/jpeg"); DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", data, true, false, false ); ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 100,chart,400,300,null); } /** * 获取一个演示用的简单数据集对象 * @return */ private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果",100); dataset.setValue("梨子",200); dataset.setValue("葡萄",300); dataset.setValue("香蕉",400); dataset.setValue("荔枝",500); return dataset; } } </code></pre></td></tr></tbody></table></p> <p><a name="5"><span class="atitle2">高级主题</span></a><br />很多情况我们不仅仅要求可以在浏览器上显示一个图表，我们更需要客户可以直接在图表上做一下交互的操作，例如获取信息提示，点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图，用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互操作的功能。在HTML中为了让一个图像具有可交互的功能就必须给该图像定义一个Map对象。下表节选一段具有该功能的HTML代码 </p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> &lt;MAP NAME="chartMap"&gt; &lt;AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&amp;category=100" title="100 = 7,048" onclick="javascript:clickChart('100');return false;"&gt; &lt;AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&amp;category=200" title="200 = 6,721" onclick="javascript: clickChart ('200');return false;"&gt; &lt;AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&amp;category=300" title="300 = 5,929" onclick="javascript: clickChart ('300');return false;"&gt; &lt;AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&amp;category=400" title="400 = 5,005" onclick="javascript: clickChart ('400');return false;"&gt; &lt;AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&amp;category=Diet" title="Diet = 7,017" onclick="javascript: clickChart ('Diet');return false;"&gt; &lt;/MAP&gt; </code></pre></td></tr></tbody></table></p> <p>由此就产生了一个问题：如果根据一个图像来生成对应的MAP对象。我们回头看看刚才的代码，在创建一个图表对象时候有两个参数，我们举柱状图的例子来讲这两个参数就是ChartFactory. createBarChart3D方法中的最后两个参数，这两个参数的类型都是布尔值。这两个参数意思分别是：是否创建工具提示(tooltip)以及是否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性。 </p> <p>可是我想知道的是怎么来产生这个MAP啊！哈哈，不要着急，JFreeChart已经帮我们做好生成MAP对象的功能。为了生成MAP对象就要引入另外一个对象：ChartRenderingInfo。因为JFreeChart没有直接的方法利用一个图表对象直接生成MAP数据，它需要一个中间对象来过渡，这个对象就是ChartRenderingInfo。下图是生成MAP数据的流程图： </p> <p align="center"><img src="http://www-900.ibm.com/developerWorks/cn/java/l-jfreechart/images/image007.gif" /></p> <p align="center">图7</p> <p>如上图所示，ChartUtilities类是整个流程的核心，它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下：首先创建一个ChartRenderingInfo对象并在调用ChartUtilities的writeChartAsJPEG时作为最后一个参数传递进去。调用该方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象，有了这个对象我们还是没有办法获取具体的MAP数据，我们还必须借助于ChartUtilities的writeImageMap方法来将ChartRenderingInfo对象读取出来，获取MAP数据的代码片断如下： </p> <p> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td><pre><code> PrintWriter w = null; FileOutputStream fos_jpg = null; FileOutputStream fos_cri = null; try{ //根据不同类型的图表使用不同类，以下是针对饼图的操作 PiePlot plot = (PiePlot) chart.getPlot(); plot.setURLGenerator(new StandardPieURLGenerator(url)); //设置工具提示 plot.setToolTipGenerator(new StandardPieToolTipGenerator()); fos_jpg = new FileOutputStream(“d:\\fruit.jpg”); ChartUtilities.writeChartAsJPEG( fos_jpg, 100, chart, 400, 300, info); fos_cri = new FileOutputStream(__d:\\fruit.map__); w = new PrintWriter(fos_cri); ChartUtilities.writeImageMap(w, __mapname__, info); w.flush(); }finally{ try{ w.close(); }catch(Exception e){} try{ fos_cri.close(); }catch(Exception e){} try{ fos_jpg.close(); }catch(Exception e){} } </code></pre></td></tr></tbody></table></p> <p>打开文件D:\fruit.map，文件的内容就是要写到页面上的MAP数据。把生成的图像文件以及MAP数据文件写到页面上即可完成热点图表的功能。至于怎么结合两者之间的关系例如图像的useMap属性值必须与MAP对象的名称结合起来，必须根据实际的应用情况进行相应的处理。笔者建议把二者通过标签库封装起来，图像文件的名称以及MAP对象的名称由标签库统一进行控制，这样可以保证二者的一致性。 </p><!-- RESOURCES--> <p><a name="resources"><span class="atitle2">参考资料</span></a> <ul><!-- Comment out list item below if there is no forum for this article--> <li><a href="http://www.jfree.org/jfreechart/index.html">JFreeChart图表引擎首页</a> <li><a href="http://cewolf.sourceforge.net/">Cewolf自定义图表标签库</a> </li></ul> <p></p><!-- AUTHOR BIOS--><!-- Make author heading singular or plural as needed--> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td><a name="author1"><span class="atitle2">关于作者</span></a> <br />刘冬，他已经不再叫凤梨罐头了。珠海市创我科技发展有限公司软件工程师，主要从事在J2EE平台上实现商业智能（BI）方面的开发。 <br />联系电话：0756-3377435-383 <br />电子邮件：<a href="mailto:winter.lau@163.com">winter.lau@163.com</a> </td></tr></tbody></table></td></tr></tbody></table><img src ="http://www.blogjava.net/sgsoft/aggbug/346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-01-16 13:18 <a href="http://www.blogjava.net/sgsoft/articles/346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jasper FAQ-1</title><link>http://www.blogjava.net/sgsoft/articles/190.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Mon, 10 Jan 2005 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/190.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/190.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/190.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/190.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/190.html</trackback:ping><description><![CDATA[&nbsp; <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">jasper</span></b><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">变量的表达式的问题</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><?xml:namespace prefix = o /><o:p></o:p></span></b> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></b> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">jasper</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">中的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">field</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">字段的定义：</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />XML&nbsp;Syntax <br />&lt;!ELEMENT&nbsp;field&nbsp;(fieldDescription?)&gt; <br />&lt;!ATTLIST&nbsp;field <br />name&nbsp;NMTOKEN&nbsp;#REQUIRED <br />class&nbsp;(java.lang.Object&nbsp;|&nbsp;java.lang.Boolean&nbsp;|&nbsp;java.lang.Byte&nbsp;| <br />java.util.Date&nbsp;|&nbsp;java.sql.Timestamp&nbsp;|&nbsp;java.lang.Double&nbsp;|&nbsp;java.lang.Float&nbsp;| <br />java.lang.Integer&nbsp;|&nbsp;java.io.InputStream&nbsp;|&nbsp;java.lang.Long&nbsp;|&nbsp;java.lang.Short&nbsp;| <br />java.math.BigDecimal&nbsp;|&nbsp;java.lang.String)&nbsp;"java.lang.String" <br />&gt; <br />&lt;!ELEMENT&nbsp;fieldDescription&nbsp;(#PCDATA)&gt; <br /><br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">注意他们的实例都是对象，</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象不能用简单的＋的方式，</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">比如你想对两个类型为</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">java.lang.Double</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">field</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">进行相加</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">那么就应该用如下表达式</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />($F{field1}.doubleValue()+$F{field2}.doubleValue())&nbsp; <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">而不是</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />($F{field1}+$F{field2})&nbsp; <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">设定某个类型为</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">java.lang.Double</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的初始值是</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">应该用</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">new&nbsp;java.lang.Double(3) <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">而不是</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">3 <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">其他类型的数据也一样</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">iReport&nbsp;<?xml:namespace prefix = st1 /><st1:chsdate IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899" w:st="on">0.3.0</st1:chsdate>&nbsp;</span></b><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">不能启动的问题</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span></b> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></b> </p> <p class="MsoNormal"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">注意</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">&nbsp;iReport&nbsp;<st1:chsdate IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899" w:st="on">0.3.0</st1:chsdate>&nbsp;</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">需要</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JDK&nbsp;1.4&nbsp;</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的版本</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">还有用</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Oracle9</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的注意了，由于</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Oracle9</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">自带的是</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JDK1.3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">版本的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">所以可能会导致</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">iReport</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">在启动时用到</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Oracle</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">中的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JDK</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">而导致无法启动</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">如何让显示的数据自动折行显示</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span></b> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></b> </p> <p class="MsoNormal"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">可以选择</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">field</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，－</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">&gt;&nbsp;text&nbsp;filed&nbsp;-&gt;</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">有个框打勾</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />strech&nbsp;with&nbsp;overflow&nbsp; <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">关于此功能的具体应用，</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">大家可以参看</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperReport</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">samples&nbsp;-&gt;&nbsp;stretch<o:p></o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">jasperreport</span></b><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">报表文件输出到</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">pdf</span></b><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的中文问题</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span></b> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></b> </p> <p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"><span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">你确定一下你的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">classpath</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">下是否有</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">itext</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">和</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">itextasia</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">。</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"><span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">确定你的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">pdf&nbsp;font</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">是否设置汉字字体如</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">STsong_light</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">和</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">pdf&nbsp;encoding</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">是否是汉字的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">encoding&nbsp; <br /><br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">这样之后如果还有问题，就是你的数据传送过来的乱码问题。</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">初学者实例：在</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">WEB</span></b><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">客户端直接打印</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">JasperReport</span></b><b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">报表</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p></o:p></span></b> </p> <p class="MsoNormal"><b><span lang="EN" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span></b> </p> <p class="MsoNormal"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">当我不希望使用</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperReport</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">生成</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">pdf</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">或</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">html</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">等报表显示文件到客户端后再通过相应打印功能打印，而想直接在客户端打印生成的报表时候，我们可以使用</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrintManager</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">类里的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">printReport</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方法来实现打印。这里我给出我的一个测试实例：</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">首先，我在服务器端的一个</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">里调用报表格式文件、填充数据生成一个</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象；然后将这个</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象以对象流方式返回给客户端：</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />public&nbsp;class&nbsp;JRPrintServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{ <br />public&nbsp;void&nbsp;service( <br />HttpServletRequest&nbsp;request, <br />HttpServletResponse&nbsp;response <br />)&nbsp;throws&nbsp;IOException,&nbsp;ServletException{ <br /><br />String&nbsp;fileName&nbsp;=&nbsp;reports/TestRpt.xml";//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">我的测试报表格式文件</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />JasperReport&nbsp;jrt&nbsp;=&nbsp;JasperCompileManager.compileReport(fileName);//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">编译报表格式</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /><br />java.sql.Connection&nbsp;conn&nbsp;=&nbsp;DBBean.getConnection();&nbsp;//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">获取数据库连接</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />JasperPrint&nbsp;jpt&nbsp;=&nbsp;JasperFillManager.fillReport(jrt,hs,conn));//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">填充报表数据生成</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br /><br />response.setContentType("application/octet-stream"); <br />ServletOutputStream&nbsp;ouputStream&nbsp;=&nbsp;response.getOutputStream(); <br /><br />ObjectOutputStream&nbsp;oos&nbsp;=&nbsp;new&nbsp;ObjectOutputStream(ouputStream); <br />oos.writeObject(jpt);//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">将</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象写入对象输出流中</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />oos.flush(); <br />oos.close(); <br />}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ <br />e.printStackTrace(); <br />} <br />}&nbsp; <br />} <br /><br /><br />} <br /><br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">然后编写一个客户端</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Applet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，通过对上面</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的请求获得该</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象，并调用</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrintManager</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方法进行打印：</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />public&nbsp;class&nbsp;JRPrinterApplet&nbsp;extends&nbsp;Applet&nbsp;{ <br />private&nbsp;URL&nbsp;url&nbsp;=&nbsp;null; <br /><br />public&nbsp;void&nbsp;init(){ <br />String&nbsp;strUrl&nbsp;=&nbsp;getParameter("REPORT_URL"); <br />if(strUrl!=null){ <br />try{ <br />System.out.println(getCodeBase()); <br />url&nbsp;=&nbsp;new&nbsp;URL(getCodeBase(),strUrl);//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">从获得</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">html</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">参数中获得报表</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">URL <br />System.out.println(url); <br />}catch(Exception&nbsp;e){ <br />e.printStackTrace(); <br />} <br />}else <br />JOptionPane.showMessageDialog(this,&nbsp;"Source&nbsp;URL&nbsp;not&nbsp;specified"); <br /><br /><br />} <br /><br />public&nbsp;void&nbsp;start(){ <br />if(url!=null){ <br />try{ <br />JOptionPane.showMessageDialog(this,&nbsp;url); <br />Object&nbsp;obj&nbsp;=&nbsp;JRLoader.loadObject(url);//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">发送对象请求，获得</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />System.out.println(obj); <br />JasperPrintManager.printReport((JasperPrint)obj,&nbsp;true);//</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">调用方法打印所获得的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JasperPrint</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对象</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />}catch(Exception&nbsp;e){ <br />e.printStackTrace(); <br />} <br />} <br />} <br /><br />} <br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">另外简单写一个测试</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">html</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">来调用以上</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">applet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">：</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"> <br />&lt;!--JRPrintTest.html--&gt; <br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=GB2312"&gt; <br />&lt;title&gt;</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">打印窗口</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;script&nbsp;language="javascript"&gt; <br />&lt;!-- <br />function&nbsp;openApp() <br />{ <br />var&nbsp;url&nbsp;=&nbsp;"/JRPrintServlet"; <br />document.write('&lt;APPLET&nbsp;ID="JrPrt"&nbsp;CODE&nbsp;=&nbsp;"JRPrinterApplet.class"&nbsp;CODEBASE&nbsp;=&nbsp;"/reports"&nbsp;ARCHIVE&nbsp;=&nbsp;"jasper-api.jar"&nbsp;WIDTH&nbsp;=&nbsp;"0"&nbsp;HEIGHT&nbsp;=&nbsp;"0"&gt;'); <br />document.write('&lt;PARAM&nbsp;NAME&nbsp;=&nbsp;"type"&nbsp;VALUE="application/x-java-applet;version=<st1:chsdate IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899" w:st="on">1.2.2</st1:chsdate>"&gt;'); <br />document.write('&lt;PARAM&nbsp;NAME&nbsp;=&nbsp;"scriptable"&nbsp;VALUE="false"&gt;'); <br />document.write('&lt;PARAM&nbsp;NAME&nbsp;=&nbsp;"REPORT_URL"&nbsp;VALUE&nbsp;="'+url+'"&gt;'); <br />document.write('&lt;/APPLET&gt;'); <br />} <br /><br />--&gt; <br />&lt;/script&gt; <br />&lt;body&nbsp;bgcolor="#FFFFFF"&gt; <br />&lt;input&nbsp;type="button"&nbsp;value="</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">测试打印</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">"&nbsp;onclick="openApp();"&gt; <br /><br />&lt;/body&gt; <br />&lt;/html&gt; <br /><br /></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">这样，在客户端访问</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">JRPrintTest.html</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">页面，点击</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">"</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">测试打印</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">"</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">按钮，就能够直接在客户端打印机上打印出所要的报表。</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">&nbsp;<o:p></o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></span> </p> <p class="MsoNormal"><span lang="EN"><o:p>&nbsp;</o:p></span> </p><img height="1" src="http://www.cnblogs.com/SGSoft/aggbug/89402.html" width="1" /><img src ="http://www.blogjava.net/sgsoft/aggbug/190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-01-10 13:16 <a href="http://www.blogjava.net/sgsoft/articles/190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JasperReport经验谈</title><link>http://www.blogjava.net/sgsoft/articles/192.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Fri, 07 Jan 2005 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/192.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/192.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/192.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/192.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/192.html</trackback:ping><description><![CDATA[<font face="arial" color="#000000">JasperReport和iReport是不错的Java报表工具.&nbsp;在实际项目中,&nbsp;本人用它们开发了20个Report,&nbsp;涉及SubReport,&nbsp;Image,&nbsp;Graph,&nbsp;积累了一些经验.&nbsp;尤其是关于Export到Excel方面,&nbsp;文档上也很少提及,&nbsp;纯粹是摸索出来的,&nbsp;有的问题还是通过读源代码才解决的.&nbsp;此贴并非入门教程,&nbsp;差不多算是笔记吧,&nbsp;以问答形式记录.&nbsp; <br /><br />iReport&nbsp; <br />安装&nbsp; <br />下载，解压iReport&nbsp;0.4.0&nbsp;(推荐src版本）&nbsp; <br />确认JDK是1.4以上&nbsp; <br />把JDK&nbsp;/lib下的tools.jar拷贝到{ireport_home}/lib目录中 <br />运行&nbsp; <br />对于下载的Binary版本，只能运行/bin/startup.bat&nbsp; <br />对于下载的Src版本，可以通过ant&nbsp;iReport运行（先安装ant)&nbsp; <br />如果运行startup.bat，出现java.lang.NoSuchMethodError错误，一般是JDK版本太低。如果确认已安装了1.4或以上，检查path系统变量，看看有1.3的JRE是不是排在前面（比如安装了Oracle的客户端，往往有1.3的JRE），如果出现Class&nbsp;Not&nbsp;Found，检查classpath。对于通过ant的方式运行，一般都没什么问题，所以推荐下载src版本 <br />JasperReport&nbsp;常见问题&nbsp; <br />.jrxml&nbsp;vs&nbsp;.jasper&nbsp; <br />如果在运行时载入.jrxml,&nbsp;那么每次调用还得编译,&nbsp;不如预先编译成.jasper.不过预先编译的jasper,必须用同样版本的JasperReport载入,而且灵活性差些.&nbsp;不过对于大部分报表,还是预先编译成jasper方便 <br />如果批量编译jrxml&nbsp; <br />用Ant很容易解决 <br /><br />&nbsp; <br /><br />.....&nbsp; <br /><br />&nbsp;&nbsp; <br /><br /><br />如何使用图片？&nbsp; <br />很容易,用Image控件就可以了.&nbsp;在Image&nbsp;Express里面可以用String来表示图片的路径,&nbsp;或者用InputStream,&nbsp;File对象.不过不管用File还是String对象,&nbsp;都不得不用绝对路径,&nbsp;这显然很不灵活.&nbsp;解决办法是,穿入一个$P的参数,表示图片所在的目录,然后用$P和文件名拼接出完整的绝对路径.&nbsp;更好的方法是用InputStream,&nbsp;例如this.getClass().getResourceAsStream("logo.jpg")&nbsp;,这时只要把图片放在当前.jasper所在的目录就可以了,不必考虑什么参数,什么路径了 <br />显示非数据库字段变量&nbsp; <br />显示如运行日期等,可以直接在Text&nbsp;Field里面输入new&nbsp;java.util.Date(),&nbsp;然后把Pattern设成如mm/dd/yyyy.&nbsp; <br />动态控制某些Field是否显示&nbsp; <br />每个Static&nbsp;Text,&nbsp;Text&nbsp;Field甚至整个Band的属性里面都有Print&nbsp;When&nbsp;Expression,&nbsp;比如设成new&nbsp;Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")),&nbsp;那么只有当参数display的值为yes的时候才显示 <br />使用Sub&nbsp;Report,&nbsp;如何使用相对路径&nbsp; <br />见1.3,&nbsp;和使用图片类似,&nbsp;用InputStream或者传入参数 <br />Query里面如何使用参数&nbsp; <br />$P!{xxx}&nbsp;或者&nbsp;$P{xxx}&nbsp;后者只能用于类似PreparedStatement参数绑定,&nbsp;而前者可替换Sql的任意部分.&nbsp;在需要动态排序的时候,&nbsp;前者特别有用.&nbsp;比如&nbsp;select&nbsp;a,b,c&nbsp;from&nbsp;t&nbsp;order&nbsp;by&nbsp;$P!{orderClause}&nbsp;&nbsp;&nbsp;不管用$P还是$P!,&nbsp;SQL最终是以PreparedStatement方式执行的,&nbsp;不必太担心性能问题&nbsp;&nbsp;&nbsp;注意:参数是不能嵌套的,&nbsp;比如$P{a}&nbsp;=''$P{b}''&nbsp;&nbsp;&nbsp;,&nbsp;$P{b}=''value'',&nbsp;不要指望$P{a}能被替换成''value'' <br />如何使用图表(Graph)&nbsp; <br />JasperReport本身没有图表功能,&nbsp;只有显示Image的功能(见4.3).&nbsp;iReport里有个Graph向导,&nbsp;其实质是通过jFreeChart生成Image.&nbsp;更另外,&nbsp;更直接的做法是放一个Image控件,&nbsp;Image&nbsp;Express&nbsp;Class设置成java.awt.Image,&nbsp;在Image&nbsp;Expression里通过自定义的类返回java.awt.Image对象.&nbsp;例如''GraphProvider.getImage($P{REPORT_DATASOURCE},title,&nbsp;subtitle.....)''.&nbsp;&nbsp;GraphProvider是自己的类,&nbsp;public&nbsp;static&nbsp;Image&nbsp;getImage(JRDataSource,&nbsp;....) <br />如果显示多个图表&nbsp; <br />在一张报表上显示一个图表和显示多个图表是不同的.&nbsp;假设Query是select&nbsp;name,price,qty&nbsp;from&nbsp;xxx,&nbsp;第一张图显示name-price,&nbsp;第二张图显示name-qty,&nbsp;如果还是按3.8的方法,&nbsp;第二张图根本显示不出来!&nbsp;为什么?&nbsp;因为传入的是JRDataSource,&nbsp;而JRDataSource仅仅是对ResultSet的简单封装,&nbsp;在第一张图处理完后,&nbsp;游标已经到了eof位置了,&nbsp;在开始处理第二张图的时候,就必然抛出游标耗尽的异常!&nbsp;怎么办??&nbsp;自己写个JRDataSourceAdapter,&nbsp;把JRDataSource对象里面的值预先保存到一个Collection&nbsp;(相当于一个Offline的数据集),&nbsp;然后把这个Collection传个getImage方法.&nbsp;具体是,&nbsp;建一个Variable&nbsp;&nbsp;mydate,&nbsp;类型是java.util.Map,&nbsp;Calculation&nbsp;Type-&nbsp;System,&nbsp;Initial&nbsp;Value&nbsp;Expression是JRDataSourceAdapter.JRDataSource2Map($P{REPORT_DATA_SOURCE},new&nbsp;String[]{"NAME","PRICE","QTY"},new&nbsp;Class[]{java.lang.String.class,java.lang.Double.class,java.lang.Double.class}),&nbsp;JRDataSource2Map是自己写的一个Adapter.&nbsp;然后在Image的Expression里面换成如''GraphProvider.getImage(mydata,title,&nbsp;other&nbsp;params...),&nbsp;当然得修改getImage方法 <br />Export到Excel的问题&nbsp; <br />如何去掉报表头等&nbsp; <br />直接把不需要的Band删除(把其高度设为0).&nbsp;如果仅仅是export到Excel的时候不需要报表头,&nbsp;而输出到PDF等仍然需要保留,&nbsp;那么使用print&nbsp;when&nbsp;expression,&nbsp;见4.4 <br />如果让Excel看起来整齐&nbsp; <br />不要有空白地方!&nbsp;首先把所有的Field设成一样高,&nbsp;对齐!&nbsp;把所在Band的高度也设成和Field一样高,&nbsp;让Field正好放入Band.&nbsp;然后调整Field的宽度,&nbsp;让每个Field都相邻,没有空隙.&nbsp;最后,记得设置参数:&nbsp;exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean.TRUE); <br /><br />如何保留GridLine&nbsp; <br />首先,&nbsp;设置参数exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,&nbsp;Boolean.FALSE);&nbsp;然后,把每个Field或者Static&nbsp;Text框的''Transparent''属性都勾上 <br />如何使字段名只显示一次&nbsp; <br />如果把字段名放在ColumnHead区域,&nbsp;那么输出到Excel,&nbsp;会每个Page都显示一遍.&nbsp;在设计Report时候,&nbsp;一般会设定Page大小.&nbsp;然而对于Excel,&nbsp;这个Page设定仍然存在,而且往往很讨厌,&nbsp;因为在Excel里,&nbsp;通常希望得到连续的数据,&nbsp;然而Jasper仍然会''自作多情''进行分页.&nbsp;比如说,&nbsp;设计JasperReport的时候,&nbsp;设定page&nbsp;size为Letter,&nbsp;Portrait,&nbsp;那么输出到Excel的时候每隔大约30行(具体取决于Field的高度),&nbsp;page&nbsp;header,&nbsp;column&nbsp;header,&nbsp;column&nbsp;foot,&nbsp;page&nbsp;foot&nbsp;会被重复一次,&nbsp;而且还附带一个高度为0的Excel&nbsp;Row,&nbsp;表示Page&nbsp;Break的地方.&nbsp;把字段名放在title&nbsp;band里,&nbsp;可以解决字段名重复的问题,&nbsp;当然page&nbsp;header也不要显示了.&nbsp;如果需要,&nbsp;可以把title&nbsp;band的print&nbsp;when&nbsp;expression设成只有输出Excel的时候才显示 <br />为什么Excel里面的数据是从第二行,第B列开始显示的?&nbsp; <br />因为第一行和第A列分别是用来表示page&nbsp;top&nbsp;margin&nbsp;和&nbsp;page&nbsp;left&nbsp;margin的.&nbsp;对于Excel来说,&nbsp;纯粹多余.&nbsp;解决方法是把page&nbsp;margin&nbsp;设成0.&nbsp;不过如果这个report还需要以PDF等显示,&nbsp;那么设成0就不好看了.&nbsp;最好能动态的改变page&nbsp;margin.&nbsp;当然,这个改变只能在外部(调用Report的地方)&nbsp;进行,&nbsp;在设计Report的时候是无能为力的.&nbsp;不幸的是,&nbsp;JasperReport类居然没有setMargin的方法,只有getter.&nbsp;折中的方法只能是reflect了.&nbsp;代码示意如下:&nbsp;//use&nbsp;reflect&nbsp;to&nbsp;set&nbsp;the&nbsp;private&nbsp;field&nbsp;of&nbsp;JRBaseReport <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.lang.reflect.Field&nbsp;margin&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"leftMargin"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setInt(myRpt,&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField("topMargin"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setInt(myRpt,&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField("bottomMargin"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setInt(myRpt,&nbsp;0);&nbsp; <br />如何去掉Excel中隐藏的行?&nbsp; <br />如前说述,&nbsp;由于page&nbsp;break的关系,&nbsp;Excel中每隔几十行,就有一个高度为0的row,&nbsp;即使把page&nbsp;botom&nbsp;margin设为0,&nbsp;把page&nbsp;footer去掉都没有办法.&nbsp;唯一的解决办法是把page&nbsp;height设为很大.&nbsp;同5.5一样,&nbsp;不得不使用reflect:&nbsp; <br />java.lang.reflect.Field&nbsp;pageHeight&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"pageHeight"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageHeight.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageHeight.setInt(myRpt,&nbsp;Integer.MAX_VALUE); <br /><br />文档&nbsp; <br />哪里有文档?&nbsp; <br />JasperReport有份Ultimate&nbsp;Guide,&nbsp;不过不是免费的,&nbsp;和jFreeChart一个德行.&nbsp;不过网上有流传,&nbsp;写的还可以,&nbsp;60多页,&nbsp;不过也没详细到哪里去.&nbsp;如果下载源代码版,&nbsp;那么看看自带的Demo也不错.&nbsp;SF的论坛也是问问题的最好地方 <br />源代码&nbsp;仅供参考(reportProvider--一个Servlet,&nbsp;GraphProider,&nbsp;JRDataAdapter都是普通类) <br />/** <br />&nbsp;*&nbsp; <br /><br />Title:&nbsp;ReportProviderServlet <br /><br /><br />&nbsp;*&nbsp; <br />Description:&nbsp;Servlet&nbsp;to&nbsp;generate&nbsp;Jasper&nbsp;reports <br /><br /><br />&nbsp;*&nbsp; <br />Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2004 <br /><br /><br />&nbsp;*&nbsp; <br />Company:&nbsp;***** <br /><br /><br />&nbsp;*&nbsp;@author&nbsp;zephyr <br />&nbsp;*&nbsp;@version&nbsp;1.0 <br />&nbsp;*/ <br />package&nbsp;xyz; <br /><br />import&nbsp;net.sf.jasperreports.engine.*; <br />import&nbsp;net.sf.jasperreports.engine.base.*; <br />import&nbsp;net.sf.jasperreports.engine.export.*; <br />import&nbsp;net.sf.jasperreports.engine.util.*; <br /><br />import&nbsp;org.apache.log4j.*; <br /><br />import&nbsp;java.io.*; <br /><br />import&nbsp;java.sql.*; <br /><br />import&nbsp;java.util.*; <br /><br />import&nbsp;javax.servlet.*; <br />import&nbsp;javax.servlet.http.*; <br /><br /><br />public&nbsp;class&nbsp;ReportProviderServlet&nbsp;extends&nbsp;HttpServlet <br />{ <br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Logger&nbsp;log&nbsp;=&nbsp;LogManager.getLogger(ReportProviderServlet.class); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//Initialize:&nbsp;Setup&nbsp;DataSourceManager <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init()&nbsp;throws&nbsp;javax.servlet.ServletException <br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;prefix&nbsp;=&nbsp;getServletContext().getRealPath("/"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;file&nbsp;=&nbsp;getInitParameter("data-source-file"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSourceManager.configure(prefix&nbsp;+&nbsp;file); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info("initialized&nbsp;successfully!"); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//Process&nbsp;the&nbsp;HTTP&nbsp;request <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;service(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException <br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;reportClass&nbsp;=&nbsp;request.getParameter("reportClass"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug("Running&nbsp;Report:"&nbsp;+&nbsp;reportClass); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;isExcelFormat&nbsp;=&nbsp;false; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(reportClass&nbsp;==&nbsp;null) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;IllegalArgumentException("Jasper&nbsp;Class&nbsp;Unspecified"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;reportFormat&nbsp;=&nbsp;request.getParameter("reportFormat"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(reportFormat&nbsp;==&nbsp;null) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reportFormat&nbsp;=&nbsp;"jasperPrint"; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JasperReport&nbsp;myRpt&nbsp;=&nbsp;JasperManager.loadReport(this.getClass() <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getResourceAsStream("/jasperReports/"&nbsp;+ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reportClass&nbsp;+&nbsp;".jasper")); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set&nbsp;ReprintHeaderOnEachPage=false&nbsp;for&nbsp;Excel&nbsp;Format <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isExcelFormat&nbsp;=&nbsp;reportFormat.equalsIgnoreCase("excel"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isExcelFormat) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//use&nbsp;reflect&nbsp;to&nbsp;set&nbsp;the&nbsp;private&nbsp;field&nbsp;of&nbsp;JRBaseReport <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//No&nbsp;margin&nbsp;for&nbsp;excel&nbsp;format,&nbsp;max&nbsp;pageHeight <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.lang.reflect.Field&nbsp;margin&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"leftMargin"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setInt(myRpt,&nbsp;0); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField("topMargin"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setInt(myRpt,&nbsp;0); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField("bottomMargin"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin.setInt(myRpt,&nbsp;0); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.lang.reflect.Field&nbsp;pageHeight&nbsp;=&nbsp;JRBaseReport.class.getDeclaredField( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"pageHeight"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageHeight.setAccessible(true); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageHeight.setInt(myRpt,&nbsp;Integer.MAX_VALUE); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Don't&nbsp;print&nbsp;group&nbsp;header&nbsp;on&nbsp;each&nbsp;page <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(null&nbsp;!=&nbsp;myRpt.getGroups()) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;myRpt.getGroups().length;&nbsp;i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRpt.getGroups()[i].setReprintHeaderOnEachPage(false); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;params&nbsp;=&nbsp;new&nbsp;HashMap(10); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;enu&nbsp;=&nbsp;request.getParameterNames(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(enu.hasMoreElements()) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;(String)&nbsp;enu.nextElement(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params.put(key, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.getParameter(key).toUpperCase().replaceAll("'",&nbsp;"''")); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug(key&nbsp;+&nbsp;"="&nbsp;+&nbsp;request.getParameter(key)); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug("Before&nbsp;Filling"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;httpOut&nbsp;=&nbsp;response.getOutputStream(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;DataSourceManager.getConnection(request.getSession()); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JasperPrint&nbsp;rptPnt&nbsp;=&nbsp;JasperManager.fillReport(myRpt,&nbsp;params,&nbsp;conn); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(reportFormat.equalsIgnoreCase("jasperPrint")) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType("application/octet-stream"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRSaver.saveObject(rptPnt,&nbsp;httpOut); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(reportFormat.equalsIgnoreCase("pdf")) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType("application/pdf"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Content-Disposition", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"attachment;filename=\""&nbsp;+&nbsp;reportClass&nbsp;+&nbsp;".PDF\""); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JasperManager.printReportToPdfStream(rptPnt,&nbsp;httpOut); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(reportFormat.equalsIgnoreCase("excel")) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType("application/vnd.ms-excel"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Content-Disposition", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"attachment;filename=\""&nbsp;+&nbsp;reportClass&nbsp;+&nbsp;".XLS\""); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRXlsExporter&nbsp;exporter&nbsp;=&nbsp;new&nbsp;JRXlsExporter(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRExporterParameter.JASPER_PRINT,&nbsp;rptPnt); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,&nbsp;httpOut); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean.TRUE); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean.FALSE); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean.FALSE); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.exportReport(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(reportFormat.equalsIgnoreCase("html")) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRHtmlExporter&nbsp;exporter&nbsp;=&nbsp;new&nbsp;JRHtmlExporter(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType("text/html"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;imagesMap&nbsp;=&nbsp;new&nbsp;HashMap(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.getSession().setAttribute("IMAGES_MAP",&nbsp;imagesMap); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imagesMap); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"image.jsp?image="); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRExporterParameter.JASPER_PRINT,&nbsp;rptPnt); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,&nbsp;httpOut); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exporter.exportReport(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug("Report&nbsp;Exported"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;ex) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error("Error&nbsp;Occured",&nbsp;ex); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />} <br /><br /><br /><br /><br /><br /><br />/** <br />&nbsp;*&nbsp; <br /><br />Title:&nbsp;JRDataSourceAdapter <br /><br /><br />&nbsp;*&nbsp; <br />Description:&nbsp;Converting&nbsp;JRDataSource&nbsp;to&nbsp;Mapped&nbsp;ArrayList <br /><br /><br />&nbsp;*&nbsp; <br />Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2004 <br /><br /><br />&nbsp;*&nbsp; <br />Company:&nbsp;***** <br /><br /><br />&nbsp;*&nbsp;@author&nbsp;zephyr <br />&nbsp;*&nbsp;@version&nbsp;1.0 <br />&nbsp;*/ <br />package&nbsp;xyz; <br /><br />import&nbsp;net.sf.jasperreports.engine.*; <br />import&nbsp;net.sf.jasperreports.engine.design.*; <br /><br />import&nbsp;java.util.*; <br /><br /><br />public&nbsp;class&nbsp;JRDataSourceAdapter <br />{ <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Map&nbsp;JRDataSource2Map(JRDataSource&nbsp;dataSource,&nbsp;String[]&nbsp;fieldNames, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;fieldClasses)&nbsp;throws&nbsp;JRException <br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashMap&nbsp;result; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fieldNames.length&nbsp;!=&nbsp;fieldClasses.length) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;JRException("Number&nbsp;of&nbsp;Field&nbsp;Name&nbsp;&amp;&nbsp;Class&nbsp;unmatch"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRDesignField[]&nbsp;fields&nbsp;=&nbsp;new&nbsp;JRDesignField[fieldNames.length]; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;new&nbsp;HashMap(4); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;fieldNames.length;&nbsp;i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[i]&nbsp;=&nbsp;new&nbsp;JRDesignField(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[i].setName(fieldNames[i]); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[i].setValueClass(fieldClasses[i]); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.put(fieldNames[i],&nbsp;new&nbsp;ArrayList()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;fields.length;&nbsp;i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;value&nbsp;=&nbsp;dataSource.getFieldValue(fields[i]); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((ArrayList)&nbsp;result.get(fields[i].getName())).add(value); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(dataSource.next()); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />} <br /><br /><br /><br /><br />/** <br />&nbsp;*&nbsp; <br /><br />Title:&nbsp;GraphProvider <br /><br /><br />&nbsp;*&nbsp; <br />Description:&nbsp;Generate&nbsp;JFreeChart&nbsp;Image <br /><br /><br />&nbsp;*&nbsp; <br />Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2004 <br /><br /><br />&nbsp;*&nbsp; <br />Company:&nbsp;**** <br /><br /><br />&nbsp;*&nbsp;@author&nbsp;zephyr&nbsp; <br />&nbsp;*&nbsp;@version&nbsp;1.0 <br />&nbsp;*/ <br />package&nbsp;xyz; <br /><br />import&nbsp;net.sf.jasperreports.engine.*; <br />import&nbsp;net.sf.jasperreports.engine.design.*; <br />import&nbsp;net.sf.jasperreports.engine.export.*; <br /><br />import&nbsp;org.jfree.chart.*; <br />import&nbsp;org.jfree.chart.axis.*; <br />import&nbsp;org.jfree.chart.plot.*; <br /><br />import&nbsp;org.jfree.data.*; <br /><br />import&nbsp;java.awt.*; <br />import&nbsp;java.awt.image.*; <br /><br />import&nbsp;java.io.*; <br /><br />import&nbsp;java.util.*; <br /><br /><br />public&nbsp;class&nbsp;GraphProvider <br />{ <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Image&nbsp;getImage(Map&nbsp;dataSource,&nbsp;String&nbsp;fieldNameX,&nbsp;String&nbsp;fieldNameY, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;chartName,&nbsp;String&nbsp;titleX,&nbsp;String&nbsp;titleY,&nbsp;boolean&nbsp;isBarChart,&nbsp;int&nbsp;imageWidth, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;imageHeight)&nbsp;throws&nbsp;JRException <br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRDesignField&nbsp;fieldX&nbsp;=&nbsp;new&nbsp;JRDesignField(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldX.setName(fieldNameX); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldX.setValueClass(java.lang.String.class); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRDesignField&nbsp;fieldY&nbsp;=&nbsp;new&nbsp;JRDesignField(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldY.setName(fieldNameY); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldY.setValueClass(java.lang.Double.class); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;periods&nbsp;=&nbsp;(ArrayList)&nbsp;dataSource.get(fieldNameX); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;values&nbsp;=&nbsp;(ArrayList)&nbsp;dataSource.get(fieldNameY); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultCategoryDataset&nbsp;categoryDs&nbsp;=&nbsp;new&nbsp;DefaultCategoryDataset(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;values.size();&nbsp;i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;=&nbsp;values.get(i); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;dataValue&nbsp;=&nbsp;0; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(obj&nbsp;!=&nbsp;null) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataValue&nbsp;=&nbsp;((Double)&nbsp;obj).doubleValue(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;categoryDs.addValue(dataValue,&nbsp;null,&nbsp;(String)&nbsp;periods.get(i)); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFreeChart&nbsp;c&nbsp;=&nbsp;null; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isBarChart) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;ChartFactory.createBarChart(chartName,&nbsp;titleX,&nbsp;titleY,&nbsp;categoryDs, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlotOrientation.VERTICAL,&nbsp;false,&nbsp;false,&nbsp;false); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;ChartFactory.createLineChart(chartName,&nbsp;titleX,&nbsp;titleY,&nbsp;categoryDs, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlotOrientation.VERTICAL,&nbsp;false,&nbsp;false,&nbsp;false); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.getTitle().setFont(new&nbsp;Font("Arial",&nbsp;Font.BOLD,&nbsp;16)); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NumberAxis&nbsp;axis&nbsp;=&nbsp;(NumberAxis)&nbsp;c.getCategoryPlot().getRangeAxis(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axis.setAutoRange(true); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TickUnitSource&nbsp;tickUnits&nbsp;=&nbsp;NumberAxis.createIntegerTickUnits(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axis.setStandardTickUnits(tickUnits); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(c.createBufferedImage(imageWidth,&nbsp;imageHeight)); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />} <br /><br /></font><img height="1" src="http://www.cnblogs.com/SGSoft/aggbug/88340.html" width="1" /><img src ="http://www.blogjava.net/sgsoft/aggbug/192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-01-07 18:26 <a href="http://www.blogjava.net/sgsoft/articles/192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperreport可以用Collection做为数据源，这种方式比用Connection方式更为灵活方便</title><link>http://www.blogjava.net/sgsoft/articles/193.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Fri, 07 Jan 2005 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/193.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/193.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/193.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <div><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;contentType</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/html;charset=GBK</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;import</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dori.jasper.engine.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;import</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.util.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;import</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.io.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;import</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.sql.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;import</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.zx.report.util.CarUse</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@&nbsp;page&nbsp;import</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dori.jasper.engine.data.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" />Connection&nbsp;conn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" />Statement&nbsp;st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" />ResultSet&nbsp;rs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;bytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" />List&nbsp;carUseList</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ArrayList(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /> <br /><img id="Codehighlighter1_406_2656_Open_Image" onclick="this.style.display='none'; Codehighlighter1_406_2656_Open_Text.style.display='none'; Codehighlighter1_406_2656_Closed_Image.style.display='inline'; Codehighlighter1_406_2656_Closed_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><img id="Codehighlighter1_406_2656_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_406_2656_Closed_Text.style.display='none'; Codehighlighter1_406_2656_Open_Image.style.display='inline'; Codehighlighter1_406_2656_Open_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">try</span><span id="Codehighlighter1_406_2656_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img height="20" src="http://www.blogjava.net/images/dot.gif" width="15" /></span><span id="Codehighlighter1_406_2656_Open_Text"><span style="COLOR: #000000">{ <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />Class.forName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.microsoft.jdbc.sqlserver.SQLServerDriver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />conn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">DriverManager.getConnection(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:microsoft:sqlserver://10.10.10.207:1433;DatabaseName=report;user=sa;password=111111</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以输入流方式</span><span style="COLOR: #008000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;InputStream&nbsp;reportFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getClass().getClassLoader().getResourceAsStream(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">carUserBd.jasper</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以reportFile方式 <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">File&nbsp;reportFile&nbsp;=new&nbsp;File(request.getRealPath("/report/carUserBd.jasper"));</span><span style="COLOR: #008000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />Map&nbsp;parameters&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashMap(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />String&nbsp;sqlCarUser</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SELECT&nbsp;car.carNo,&nbsp;dept.Name&nbsp;,&nbsp;people.peopleName,carUse.useDescription&nbsp;,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;carUse.beginTime&nbsp;,&nbsp;carUse.planEndTime&nbsp;,&nbsp;carUse.comment&nbsp;,&nbsp;carUse.driver,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;carUse.peopleNumber&nbsp;,OneWay=&nbsp;case&nbsp;carUse.isOneWay&nbsp;&nbsp;when&nbsp;0&nbsp;then&nbsp;'双程'&nbsp;&nbsp;else&nbsp;'单程'&nbsp;&nbsp;end,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">isFirst=&nbsp;case&nbsp;carUse.priority&nbsp;when&nbsp;0&nbsp;&nbsp;then&nbsp;'低'&nbsp;when&nbsp;&nbsp;1&nbsp;&nbsp;then&nbsp;&nbsp;'中'&nbsp;&nbsp;else&nbsp;&nbsp;'高'&nbsp;&nbsp;end,&nbsp;carUse.start&nbsp;,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">carUse.destination&nbsp;,&nbsp;people.peopleName&nbsp;as&nbsp;ratifier&nbsp;FROM&nbsp;DEPT_CARUSELOG&nbsp;carUse&nbsp;,&nbsp;DEPT_CARINFO&nbsp;car&nbsp;,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ADMIN_ORGANIZATION&nbsp;dept&nbsp;,&nbsp;PUBLIC_PEOPLEINFO&nbsp;people&nbsp;WHERE&nbsp;carUse.id=290&nbsp;and&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">caruse.carId=car.carId&nbsp;and&nbsp;carUse.departId=dept.id&nbsp;and&nbsp;carUse.peopleId=people.peopleId</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;conn.createStatement(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />rs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;st.executeQuery(sqlCarUser); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img id="Codehighlighter1_1556_2134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1556_2134_Open_Text.style.display='none'; Codehighlighter1_1556_2134_Closed_Image.style.display='inline'; Codehighlighter1_1556_2134_Closed_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" width="11" align="top" /><img id="Codehighlighter1_1556_2134_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1556_2134_Closed_Text.style.display='none'; Codehighlighter1_1556_2134_Open_Image.style.display='inline'; Codehighlighter1_1556_2134_Open_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(rs.next())</span><span id="Codehighlighter1_1556_2134_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img height="20" src="http://www.blogjava.net/images/dot.gif" width="15" /></span><span id="Codehighlighter1_1556_2134_Open_Text"><span style="COLOR: #000000">{ <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />CarUse&nbsp;carUse</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CarUse(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setCarNo(rs.getString(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setName(rs.getString(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setPeopleName(rs.getString(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setUseDescription(rs.getString(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setBeginTime(rs.getDate(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setPlanEndTime(rs.getDate(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setComment(rs.getString(</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setDriver(rs.getString(</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setPeopleNumber(rs.getString(</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setOneWay(rs.getString(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setIsFirst(rs.getString(</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setStart(rs.getString(</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setDestination(rs.getString(</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUse.setRatifier(rs.getString(</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">)); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />carUseList.add(carUse); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" width="11" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />JRBeanCollectionDataSource&nbsp;ds&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;JRBeanCollectionDataSource(carUseList); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />bytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />JasperRunManager.runReportToPdf( <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />reportFile, <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />parameters, <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />ds); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />String&nbsp;fileName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test.pdf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />response.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">application/pdf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />response.addHeader( <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Disposition</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">attachment;filename=\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">&nbsp;+&nbsp;fileName);</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /></span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />response.setContentLength(bytes.length); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />ServletOutputStream&nbsp;ouputStream&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;response.getOutputStream(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />System.</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />ouputStream.write(bytes,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;bytes.length); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />ouputStream.flush(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />ouputStream.close(); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img id="Codehighlighter1_2684_2745_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2684_2745_Open_Text.style.display='none'; Codehighlighter1_2684_2745_Closed_Image.style.display='inline'; Codehighlighter1_2684_2745_Closed_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><img id="Codehighlighter1_2684_2745_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2684_2745_Closed_Text.style.display='none'; Codehighlighter1_2684_2745_Open_Image.style.display='inline'; Codehighlighter1_2684_2745_Open_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" />}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(SQLException&nbsp;sqle)&nbsp;</span><span id="Codehighlighter1_2684_2745_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img height="20" src="http://www.blogjava.net/images/dot.gif" width="15" /></span><span id="Codehighlighter1_2684_2745_Open_Text"><span style="COLOR: #000000">{ <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />System.</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SQLException:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;sqle.getMessage()); <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img id="Codehighlighter1_2769_2792_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2769_2792_Open_Text.style.display='none'; Codehighlighter1_2769_2792_Closed_Image.style.display='inline'; Codehighlighter1_2769_2792_Closed_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><img id="Codehighlighter1_2769_2792_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2769_2792_Closed_Text.style.display='none'; Codehighlighter1_2769_2792_Open_Image.style.display='inline'; Codehighlighter1_2769_2792_Open_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" />}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(JRException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_2769_2792_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img height="20" src="http://www.blogjava.net/images/dot.gif" width="15" /></span><span id="Codehighlighter1_2769_2792_Open_Text"><span style="COLOR: #000000">{ <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" />e.printStackTrace(); <br /><img id="Codehighlighter1_2827_2831_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2827_2831_Open_Text.style.display='none'; Codehighlighter1_2827_2831_Closed_Image.style.display='inline'; Codehighlighter1_2827_2831_Closed_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><img id="Codehighlighter1_2827_2831_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2827_2831_Closed_Text.style.display='none'; Codehighlighter1_2827_2831_Open_Image.style.display='inline'; Codehighlighter1_2827_2831_Open_Text.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" />}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(ClassNotFoundException&nbsp;cnfe)</span><span id="Codehighlighter1_2827_2831_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img height="20" src="http://www.blogjava.net/images/dot.gif" width="15" /></span><span id="Codehighlighter1_2827_2831_Open_Text"><span style="COLOR: #000000">{ <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" width="11" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"> <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" />jasperreport可以用Collection做为数据源，这种方式比用Connection方式更为灵活方便 <br /><img height="16" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" /></span> </div></div><img height="1" src="http://www.cnblogs.com/SGSoft/aggbug/88339.html" width="1" /><img src ="http://www.blogjava.net/sgsoft/aggbug/193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-01-07 18:24 <a href="http://www.blogjava.net/sgsoft/articles/193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理的JasperReport资料（转载） </title><link>http://www.blogjava.net/sgsoft/articles/194.html</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Fri, 07 Jan 2005 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/sgsoft/articles/194.html</guid><wfw:comment>http://www.blogjava.net/sgsoft/comments/194.html</wfw:comment><comments>http://www.blogjava.net/sgsoft/articles/194.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/sgsoft/comments/commentRss/194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgsoft/services/trackbacks/194.html</trackback:ping><description><![CDATA[<h3 class="post">整理的JasperReport资料（转载） </h3> <div class="post"> <p>java开发者 网友 溪涧 <br />多谢了！ <br /><br />最近工作中用到报表，而我在学习JasperReport的过程中遇到了很多问题（主要是国内的资料太少了），网上很少找得到，在此我就把我找到的一些资料和大家共享，希望能对大家有所帮助。 <br />1、JasperReport和iReport的资源，最新版本可以到下面官方网站得到 <br /><br />iReport官方网站： <br />http://ireport.sourceforge.net <br />　　　　　JasperReport官方网站： <br />http://jasperreports.sourceforge.net <br /><br />2、安装 <br />　　　1）、JDK的安装，并配置JAVA_HOME <br />比如我的JAVA_HOME路径如下： <br />JAVA_HOME　　D:\Program Files\j2sdk1.4.2_03 <br /><br />2）、由于中文的问题，所以还需要下载：itext-1.02b.jar和iTextAsian.jar包 <br />下载地址：http://itext.sourceforge.net/downloads/iTextAsian.jar <br />并在CLASSPATH中设置 <br />　　　　　 例如我的CLASSPATH如下： <br />CLASSPATH <br />E:\Program Files\Apache Group\Tomcat4.1\webapps\testreport\WEB-INF\lib\itext-1.02b.jar;E:\Program <br /><br />Files\Apache Group\Tomcat 4.1\webapps\testreport\WEB-INF\lib\iTextAsian.jar;E:\Program Files\Apache <br /><br />Group\Tomcat 4.1\webapps\testreport\WEB-INF\lib;D:\tools\iReport0.2.3\lib <br /><br />　　　3）、iReport的安装iReport只要解压就OK，如果没有安装Ant，可以直接在iReport下的noAnt目录下， <br />运行startup.bat就可以了，这样iReport就可以启动了 <br /><br />4）、JasperReport <br />Jasperreport不需要任何配置，你只需将下载以后的jar包放到classpath下即可 <br />5）、数据库的JDBC驱动包 <br />加入到CLASSPATH中 <br /><br />3、详细资源 <br />iReport官方提供了一些关于iReport视频，对于初学者很有帮助： <br />　　　地址：http://ireport.sourceforge.net/docs.html <br /><br />JasperReport官方提供的使用指南 <br />地址：http://jasperreports.sourceforge.net/tutorial/index.html <br /><br />JasperReport提供的一些例子： <br />地址：http://jasperreports.sourceforge.net/samples/index.html <br /><br />4、常见问题 <br />1）、iReport中提示框输入中文是不能正常显示，请将iReport下lib中的这个包删除tinylaf.jar <br />　　 2）、在iReport中运行报表时如果出现乱码问题，请检查itext-1.02b.jar和iTextAsian.jar这两个包是否加到CLASSPATH <br />3）、在jsp或servlet高度报表时出现乱码或不显示，请检查你在报表设计过程中所设置的字体及其编码 <br />比如：pdfname、pdfencoding <br />5、下面是两个调试例子 <br />　　Servlet: <br />import javax.servlet.*; <br />import javax.servlet.http.*; <br />import dori.jasper.engine.*; <br />import java.io.*; <br />import java.util.*; <br />import java.sql.*; <br /><br />/** <br />* @author Administrator <br />* <br />* To change the template for this generated type comment go to <br />* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments <br />*/ <br />public class TestReport extends HttpServlet { <br /><br />public void doGet(HttpServletRequest request, HttpServletResponse response) <br />throws ServletException, IOException { <br />Connection conn = null; <br /><br />try { <br /><br />Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); <br />conn = <br />DriverManager.getConnection( <br /><br /><br />"jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=sa"); <br /><br />ServletContext servletContext =this.getServletContext(); <br />File reportFile = new File(servletContext.getRealPath("test/iteminfo.jasper")); <br />Map parameters = new HashMap(); <br />Integer i=new Integer(8); <br />parameters.put("pjId", i); <br />byte[] bytes = <br />JasperRunManager.runReportToPdf( <br />reportFile.getPath(), <br />parameters, <br />conn); <br />response.setContentType("application/pdf"); <br />response.setContentLength(bytes.length); <br />ServletOutputStream ouputStream = response.getOutputStream(); <br />ouputStream.write(bytes, 0, bytes.length); <br />ouputStream.flush(); <br />ouputStream.close(); <br />} catch (JRException jre) { <br />System.out.println("JRException:" + jre.getMessage()); <br />} catch (Exception e) { <br />System.out.println("Exception:" + e.getMessage()); <br />} <br /><br />} <br /><br />public void doPost( <br />HttpServletRequest request, <br />HttpServletResponse response) <br />throws ServletException, IOException { <br /><br />doGet(request, response); <br /><br />} <br /><br />} <br /><br />JSP: <br /><%@ page contentType="text/html;charset=GBK" %></p></div><img height="1" src="http://www.cnblogs.com/SGSoft/aggbug/88337.html" width="1" /><img src ="http://www.blogjava.net/sgsoft/aggbug/194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgsoft/" target="_blank">海天一鸥</a> 2005-01-07 18:22 <a href="http://www.blogjava.net/sgsoft/articles/194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>