??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色精品aⅴ一区区三区,精品亚洲国产成AV人片传媒,亚洲国产婷婷香蕉久久久久久http://www.tkk7.com/sgsoft/category/27.htmlJAVA?/description>zh-cnTue, 27 Feb 2007 19:12:06 GMTTue, 27 Feb 2007 19:12:06 GMT60使用iReport制作报表模板http://www.tkk7.com/sgsoft/articles/912.html天一?/dc:creator>天一?/author>Wed, 02 Feb 2005 04:27:00 GMThttp://www.tkk7.com/sgsoft/articles/912.htmlhttp://www.tkk7.com/sgsoft/comments/912.htmlhttp://www.tkk7.com/sgsoft/articles/912.html#Feedback0http://www.tkk7.com/sgsoft/comments/commentRss/912.htmlhttp://www.tkk7.com/sgsoft/services/trackbacks/912.html2005 q?1 ?
现在很多公司和个人都在用iReport制作报表模板Q我接触的时间也不长Q在q里Q我我在实践过E中的一些经验以及碰到的一些问题和大家一h探讨?/BLOCKQUOTE>

一、iReport介绍
说到iReport不得不先介绍JasperreportQJasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文gQ然后得到用户需要输出的格式文g。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS{等。而iReport是一个制作Jasperreport的XML文g的可视化开发工兗?/P>

二、模板制?/SPAN>
首先必须下蝲一个iRportQ地址Q?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://ireport.sourceforge.netQ,现在的最高版?.4.0Q我们这里用的?.2.2?/P>

iReport解压~以后编辑目录下的iReport.bat文g卛_Q如?/P>

@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

只要讄相应的一些\l就可以Q这里是采用ant来运行,当然如果你没有安装ant也不惛_装它Q那么也可以Q找到noAnt文g夹下的startup.bat文g卛_q行?/P>

建立新模板时Q便得到如图所C的界面?/P>


选中菜单?Datatsource"Q单d子菜单项"Connection/Datasources"Q便会弹Z个编辑框Q选择"New"按钮Q?/P>


输入数据源名Uͼ选择JDBC DriverQ在输入JDBC URLӞ可以点击"Wizard"按钮Q它会根据你选的JDBC Driver配置好你的URLQ不q得修改IP地址以及DatabaseNameQ输入数据库名、用户名、密码。点?Test"按钮Q确定连接情况,然后保存?/P>

下图是我做好的一个报表模板:


$F{}是用来标明这是数据库字段?F{WINDOWS_NAME}?F{NUMBER}?F{vname}?F{SP_NAME}?F{SP_TYPE}是数据库里的字段Q也是我要在模板里用到的字段。对?F{NUMBER}?F{vname}?F{SP_NAME}?F{SP_TYPE}q四个字D,虽然攑֜其他域也可以昄出结果,比如QpageHeader域、columnHeader域、columnFooter域等{,但是因ؓ会有多列的数据要昄Q所以必L?detail"域中?/P>

模板d了,现在来配|模板的查询语句Q以及字Dc变量和参数?/P>

首先输入查询语句Q如"select * from v_baseinfo_statbanjiereport"Q点?Read fields"按钮Q会查询表的所有字D名


如果您要有条件的查询Q那么就在后面添加Where语句Q如"select * from v_baseinfo_statbanjiereport where DEPT_NAME=$P{orgname} and END_SP_DAY=$P{etime}"Q点?Save query to report"按钮保存?/P>

q里要提醒大家注意的是,您可以直接把参数写入Where语句中,象这?where DEPT_NAME='中国' and END_SP_DAY='2004-11-23'"Q但是从javaE序或者jsp面传过来的参数是中文字W的话,您就必须做编码{换或者用英文字符、数字来代替Q还有像日期参数"2004-11-23"Qjasperreports好象解析不了Q如果你把SQL语句Ҏ" select * from v_baseinfo_statbanjiereport where DEPT_NAME='$P{orgname}' and END_SP_DAY='$P{etime}'"Q那么又会抛出异常,因ؓJasperreport会先把SQL语句讄成预~译语句"select * from v_baseinfo_statbanjiereport where DEPT_NAME=Qand END_SP_DAY=Q?Q所以SQL语句中用到参数的时候,除了其特定的"$P{}"W号外,不能有别的标点符P传进ȝ参数g量不要带标点符P所以日期格式得Ҏ"20041123"?/P>

讄模板字段Q?/P>


讄模板参数Q?/P>


当这些全部做完后Q点?Save"按钮Q就会生成一个XML文gQ再点击"Compile"按钮Q就会生成一个后~名ؓjasper的文件?/P>

现在可以预览一下模板的效果Q先选择菜单?Build"的子菜单?PDF preview"?HTML preview"?JAVA 2D preview"?Excel preview"?CSV preview"?JRViewer preview"中的一(对这些项昄工具的配|在菜单Tools\Options..下的External programsQ, 再点?Execute report"Q如果你惛_数据预览Q还得先ȀzM下刚配置的数据源Q选中菜单?Build"下的子菜单栏"Set active connection"Q会弹出一~辑框,选中一个数据源名称Q点?OK"?/P>

此时我们p引入一个jsp面Q假设是pdf.jspQ那么下面就是pdf.jsp的代码:



<%@ page import="dori.jasper.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
 
<%
	File reportFile = new File(application.getRealPath("/reports/ribanjietongji.jasper"));
 
	Map parameters = new HashMap();
	parameters.put("orgname", "zhongguo");
	parameters.put("etime", "20041123");
	Connection conn=null
	
	//以下忽略得到数据库连接过E?
//…?
		
	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();
%>

E序里面要和大家说明的就是,"/reports/test.jasper"q个路径是相对于你这个jsp面的,比如你的jsp面保存在D:\\..\ROOT\目录下,那么你就必须在这个目录下Z个report目录Q然后把你做好的报表模板文g攑ֈ该目录下来?/P>

		Map parameters = new HashMap();
	parameters.put("orgname", "zhongguo");
	parameters.put("etime", "20041123");
	

"orgname"?etime"必须和模板时定义的参数名UC致?/P>

三、结束语
到此整个模板q完成了,有什么没有说明白或者错误的地方Q希望你能和我一h讨论?/P>
关于作?/SPAN>
舒峰,联系方式:feng.shu@chinacreator.com ,介: 本h目前是湖南省长沙铁道学院U创计算机系l集成有限公司Y件中心Y件工E师Q主要研IJ2EE~程技术?/TD>



]]>iReport ?Jasperreport整合开发web报表向导 http://www.tkk7.com/sgsoft/articles/547.html天一?/dc:creator>天一?/author>Fri, 21 Jan 2005 07:53:00 GMThttp://www.tkk7.com/sgsoft/articles/547.htmlhttp://www.tkk7.com/sgsoft/comments/547.htmlhttp://www.tkk7.com/sgsoft/articles/547.html#Feedback1http://www.tkk7.com/sgsoft/comments/commentRss/547.htmlhttp://www.tkk7.com/sgsoft/services/trackbacks/547.html阅读全文

]]>
使用 JFreeChart来创建基于web的图? http://www.tkk7.com/sgsoft/articles/346.html天一?/dc:creator>天一?/author>Sun, 16 Jan 2005 05:18:00 GMThttp://www.tkk7.com/sgsoft/articles/346.htmlhttp://www.tkk7.com/sgsoft/comments/346.htmlhttp://www.tkk7.com/sgsoft/articles/346.html#Feedback0http://www.tkk7.com/sgsoft/comments/commentRss/346.htmlhttp://www.tkk7.com/sgsoft/services/trackbacks/346.html 使用 JFreeChart来创建基于web的图?/span>
内容Q?/b>
一、JFreeChart目?/a>
二、解读JFreeChart的源码结?/a>
三、用JFreeChart生成各种样式的图?/a>
四、将生成的图表移到浏览器?/a>
高主题
参考资?/a>
关于作?/a>
Java 专区中还?
教学
工具与?/a>
代码与组?/a>
所有文?/a>
实用技?/a>

刘冬 (winter.lau@163.com)
珠v市创我科技发展有限公司软g工程?br />2003 q?9 ?/p>

WWW的发展得基于因特网的应用程序不再局限于静态或者简单的动态内Ҏ供。传l的一些以软g包Ş式发布应用程序例如报表系l等都在逐渐搬到因特|上。但是这两者之间有着天壤之别Q虽然对于数据获取、业务处理等斚w基本cMQ但是最大的差别在于用户界面。ؓ了能在web览器上昄要求用户界面使用HTML以及囄的方式来展现数据Q而传l的一些利用操作系l本w的控g来开发的用户界面无法适应琳琅满目的客LQ因此在q里也变得无能ؓ力。回到本文的题目上来Qؓ了创Z个可以在web览器上查看到图表一般有两种做法Q第一U就是用applet利用java本n对图形的支持来显CZ个图表;W二U就是直接在web服务器端生成好图表图片文件后发送给览器。第一U方式显然对于客L要求太高Q随着现在L览器放弃对JAVA的支持后Q这U方式只适合一些局域网的应用,而对于因特网的环境就昑־不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生ZWEB的图表?/blockquote>

一、JFreeChart目?/span>
JFreeChart是开放源代码站点SourceForge.net上的一个JAVA目Q它主要用来各种各样的图表,q些图表包括Q饼图、柱状图(普通柱状图以及堆栈q?、线图、区域图、分布图、؜合图、甘特图以及一些A表盘{等。这些不同式L图表基本上可以满目前的要求。ؓ了减篇q本文主要介l前面三U类型的图表Q读者可以触cL通去开发其他样式的图表。下面几个是JFreeChart产生的这三种cd图表的结果:

?

?

?

上面的三个图都是表示四个季度的某个品的销量信息。在l箋下面节之前必须先准备好开发环境,因ؓ是基于WEB览器的图表展现Q因此需要一个Servlet引擎或者是J2EE应用服务器(例如WebSphereQTomcat{)。WEB环境的搭建就不篏赘了Q读者根据喜好自行安装。JFreeChart引擎本n需要到SourceForge.net上下载,地址如下Q?

 JFreeChart主页Q?a >http://www.jfree.org/jfreechart/index.html JFreeChart下蝲面Q?a >http://sourceforge.net/projects/jfreechart/ 

下蝲的时候需要注意的是必M载两个文ӞJFreeChart以及Jcommon。目前最新配套版本是QJFreeChart 0.9.11 Jcommon 0.8.6

q里有点W者在开发中遇见的问题需要注意的是:在用Eclipse开发的时候会报一个莫名其妙的错误Q错误可能指向某个类文g的第一行。遇到这L问题一般是因ؓ没有把Jcommon的jar包设|到目的类路径中的~故。具体的原因不祥?

二、解读JFreeChart的源码结?/span>
在开始用JFreeChart之前我们有必要先大概了解一下JFreeChart本n的结构以及它所带一些例子程序,q样有助于我们下一步自行开发。下载JFreeChart包后已经带有非常丰富的例子,因ؓJFreeChartq个目本n的用文档非常少Q因此学习它最好的办法是学习它所带的例子源码。在包org.jfree.chart.demo中有几十个文件用于展CJFreeChart所能支持的所有图表的l果。如果你的JDK是比较新的情况下可能在运行这些例子时会有问题Q现象如下:

 java.lang.UnsatisfiedLinkError: initDDraw at sun.awt.windows.Win32OffScreenSurfaceData.initDDraw(Native Method) at sun.awt.windows.Win32OffScreenSurfaceData.<clinit>(Win32OffScreenSurfaceData.java:141) at sun.awt.Win32GraphicsDevice.<clinit>(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.<init>(Window.java:268) at java.awt.Frame.<init>(Frame.java:398) at javax.swing.JFrame.<init>(JFrame.java:198) at org.jfree.chart.demo.JFreeChartDemo.<init>(JFreeChartDemo.java:148) at org.jfree.chart.demo.JFreeChartDemo.main(JFreeChartDemo.java:285) Exception in thread "main" 

q个错误是由于新版的Swing大量的用了微Y的DirectDraw的技术来提高d的性能Q而可能你的显卡在q时候会跟你闹点情A或者显卡本wƈ不支持这L一个技术。难道就没有办法了嘛Q要解决q个问题也非常简单,我们可以屏蔽掉DirectDrawQ不让Swing使用该技术就可以了。在q行q些代码时给虚拟机指定参?Dsun.java2d.noddraw卛_?

q时可能你又该纳闷了Q不说是ZWeb的图表嘛Q怎么又扯到Swing上了Q这是因Zؓ了开发者容易上手,无需配置Mq行环境Q所以这些例子都是基于GUI方式的用于展现给开发者如果生成一个图表,我们要学习的也就是如何利用这个引擎生成图表而不是怎么来显CZ个图表。当我们把生成的图表对象ExportC个图像文件即可在Web上发布?

下面我们来介lJFreeChart中几个核心的对象c:

cd cȝ作用以及单描q?/td>
JFreeChart 图表对象QQ何类型的图表的最l表现Ş式都是在该对象进行一些属性的定制。JFreeChart引擎本n提供了一个工厂类用于创徏不同cd的图表对?/td>
XXXXXDataset 数据集对象,用于提供昄图表所用的数据。根据不同类型的图表对应着很多cd的数据集对象c?/td>
XXXXXPlot 图表区域对象Q基本上q个对象军_着什么样式的图表Q创对象的时候需要Axis、Renderer以及数据集对象的支持
XXXXXAxis 用于处理图表的两个uQ纵轴和横u
XXXXXRenderer 负责如何昄一个图表对?/td>
XXXXXURLGenerator 用于生成Web图表中每个项目的鼠标点击链接
XXXXXToolTipGenerator 用于生成图象的帮助提C,不同cd图表对应不同cd的工hC类

基本上我认ؓJFreeChart目本n的类l构的设计ƈ不是很好Q首先在创徏图表的时候用C大量的工厂方法,q样做虽然可以简化创建图表对象的代码Q但是对目本n或者开发h员来讲自行扩展一U新的图表都仍然是一件很ȝ的事情;其次除图表对象本w外其余的类q于复杂Q用者必d了解每个cd的图表对象应该对应哪些Axis、Plot、Rendererc,q且必须非常熟悉q些cȝ构造函C每个参数的具体含义。这些问题都大大困扰很多初学者。不q,虽然存在很多问题Q但是JFreeChart本n仍不׃ؓ一个非怼U的图表引擎,况且目本n也在逐渐的发展中?

在非常简略的介绍了JFreeChart本n的代码结构后Q下面我们开始动手试验几个常用的图表q把他们攑ֈweb上?

三、用JFreeChart生成各种样式的图?/span>
限于幅的问题我们在q里只实CU常用的图表Q其他类型图表读者可以触cL通。我们先l出q囄实现Q饼囄实现再来跟柱状图q行比较?

1 q?/span>

 package lius.chart.demo; import java.io.*; import org.jfree.data.*; import org.jfree.chart.*; import org.jfree.chart.plot.*; /** * 该类用于演示最单的q囄?* @author Winter Lau */ public class BarChartDemo { public static void main(String[] args) throws IOException{ CategoryDataset dataset = getDataSet2(); JFreeChart chart = ChartFactory.createBarChart3D( "水果产量?, // 图表标题 "水果", // 目录轴的昄标签 "产量", // 数Du的显C标{?dataset, // 数据?PlotOrientation.VERTICAL, // 图表方向Q水q뀁垂?true, // 是否昄图例(对于单的q囑ֿLfalse) 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) {} } } /** * 获取一个演C用的简单数据集对象 * @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; } /** * 获取一个演C用的组合数据集对象 * @return */ private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "Ҏ"); dataset.addValue(100, "上v", "Ҏ"); dataset.addValue(100, "q州", "Ҏ"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上v", "梨子"); dataset.addValue(200, "q州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上v", "葡萄"); dataset.addValue(300, "q州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上v", "香蕉"); dataset.addValue(400, "q州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上v", "荔枝"); dataset.addValue(500, "q州", "荔枝"); return dataset; } } 

E序q行l束后生成的囄文g效果如下图所C:

?

如果是用简单的数据即用getDataSetҎ获取数据集时产生的图片文件如下:

?

2 饼图

对于饼图而言Q数据集的获取用的不是同一个数据集c,另外饼图不支持同一个类别的目中还有子目q样的数据。我们只l出创徏饼图的代码,至于写图表到一个文件则与柱状图一_无需重复?

 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 ); //写图表对象到文gQ参照柱状图生成源码 } /** * 获取一个演C用的简单数据集对象 * @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; } } 

生成的饼图文件效果如下:

?

四、将生成的图表移到浏览器?/span>
Z生成的图表直接传给客户端浏览器Q只需要将前面两个例子中的文g换成是通过HttpServletResponse对象获取到的输出,详细代码清单如下Q?

 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); } /** * 获取一个演C用的简单数据集对象 * @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; } } 

高主题
很多情况我们不仅仅要求可以在览器上昄一个图表,我们更需要客户可以直接在图表上做一下交互的操作Q例如获取信息提C,点击图表某个部分q行更详l信息的展示{等。例如前面生成的单柱状图Q用户需要在看到q囑֐点击某种水果例如是苹果即可看到各个地果量的情况。ؓ此就要求该图形具有交互操作的功能。在HTML中ؓ了让一个图像具有可交互的功能就必须l该囑փ定义一个Map对象。下表节选一D具有该功能的HTML代码

 <MAP NAME="chartMap"> <AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&category=100" title="100 = 7,048" onclick="javascript:clickChart('100');return false;"> <AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&category=200" title="200 = 6,721" onclick="javascript: clickChart ('200');return false;"> <AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&category=300" title="300 = 5,929" onclick="javascript: clickChart ('300');return false;"> <AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&category=400" title="400 = 5,005" onclick="javascript: clickChart ('400');return false;"> <AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&category=Diet" title="Diet = 7,017" onclick="javascript: clickChart ('Diet');return false;"> </MAP> 

由此׃生了一个问题:如果Ҏ一个图像来生成对应的MAP对象。我们回头看看刚才的代码Q在创徏一个图表对象时候有两个参数Q我们Dq囄例子来讲q两个参数就是ChartFactory. createBarChart3DҎ中的最后两个参敎ͼq两个参数的cd都是布尔倹{这两个参数意思分别是Q是否创建工hC?tooltip)以及是否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性?

可是我想知道的是怎么来生这个MAP啊!哈哈Q不要着急,JFreeChart已经帮我们做好生成MAP对象的功能。ؓ了生成MAP对象p引入另外一个对象:ChartRenderingInfo。因为JFreeChart没有直接的方法利用一个图表对象直接生成MAP数据Q它需要一个中间对象来q渡Q这个对象就是ChartRenderingInfo。下图是生成MAP数据的流E图Q?

?

如上图所C,ChartUtilitiescL整个程的核心,它周围的对象都是一些例如数据对象或者是文g{。这个流E简单描q如下:首先创徏一个ChartRenderingInfo对象q在调用ChartUtilities的writeChartAsJPEG时作为最后一个参C递进厅R调用该Ҏl束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象Q有了这个对象我们还是没有办法获取具体的MAP数据Q我们还必须借助于ChartUtilities的writeImageMapҎ来将ChartRenderingInfo对象d出来Q获取MAP数据的代码片断如下:

 PrintWriter w = null; FileOutputStream fos_jpg = null; FileOutputStream fos_cri = null; try{ //Ҏ不同cd的图表用不同类Q以下是针对饼图的操?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){} } 

打开文gD:\fruit.mapQ文件的内容是要写到页面上的MAP数据。把生成的图像文件以及MAP数据文g写到面上即可完成热点图表的功能。至于怎么l合两者之间的关系例如囑փ的useMap属性值必MMAP对象的名U结合v来,必须Ҏ实际的应用情况进行相应的处理。笔者徏议把二者通过标签库封装v来,囑փ文g的名UC及MAP对象的名U由标签库统一q行控制Q这样可以保证二者的一致性?

参考资?/span>

关于作?/span>
刘冬Q他已经不再叫凤梨罐头了。珠市创我U技发展有限公司软g工程师,主要从事在J2EEq_上实现商业智能(BIQ方面的开发?
联系电话Q?756-3377435-383
电子邮gQ?a href="mailto:winter.lau@163.com">winter.lau@163.com


]]>
Jasper FAQ-1http://www.tkk7.com/sgsoft/articles/190.html天一?/dc:creator>天一?/author>Mon, 10 Jan 2005 05:16:00 GMThttp://www.tkk7.com/sgsoft/articles/190.htmlhttp://www.tkk7.com/sgsoft/comments/190.htmlhttp://www.tkk7.com/sgsoft/articles/190.html#Feedback6http://www.tkk7.com/sgsoft/comments/commentRss/190.htmlhttp://www.tkk7.com/sgsoft/services/trackbacks/190.htmljasper变量的表辑ּ的问?/span>

 

jasper中的field字段的定义:
XML Syntax
<!ELEMENT field (fieldDescription?)>
<!ATTLIST field
name NMTOKEN #REQUIRED
class (java.lang.Object | java.lang.Boolean | java.lang.Byte |
java.util.Date | java.sql.Timestamp | java.lang.Double | java.lang.Float |
java.lang.Integer | java.io.InputStream | java.lang.Long | java.lang.Short |
java.math.BigDecimal | java.lang.String) "java.lang.String"
>
<!ELEMENT fieldDescription (#PCDATA)>

注意他们的实例都是对象,
对象不能用简单的Q的方式Q?/span>
比如你想对两个类型ؓjava.lang.Double?/span>fieldq行相加
那么应该用如下表达?/span>
($F{field1}.doubleValue()+$F{field2}.doubleValue()) 
而不?/span>
($F{field1}+$F{field2}) 
讑֮某个cd?/span>java.lang.Double的初始值是
应该?/span>new java.lang.Double(3)
而不?/span>3
其他cd的数据也一?/span>

 

iReport 0.3.0 不能启动的问?/span>

 

注意 iReport 0.3.0 需?/span>JDK 1.4 的版?/span>
q有?/span>Oracle9的注意了Q由?/span>Oracle9自带的是JDK1.3版本?/span>
所以可能会DiReport在启动时用到Oracle中的JDK而导致无法启?/span>

 

如何让显C的数据自动折行昄

 

可以选择fieldQ-> text filed ->有个框打?/span>
strech with overflow 
关于此功能的具体应用Q?/span>
大家可以参看JasperReport?/span>samples -> stretch

 

jasperreport报表文g输出?/span>pdf的中文问?/span>

 

1?span style="FONT: 7pt 'Times New Roman'">   你确定一下你?/span>classpath下是否有itext?/span>itextasia?/span>

2?span style="FONT: 7pt 'Times New Roman'">   定你的pdf font是否讄汉字字体?/span>STsong_light?/span>pdf encoding是否是汉字的encoding 

q样之后如果q有问题Q就是你的数据传送过来的q问题?/span>

 

初学者实例:?/span>WEB客户端直接打?/span>JasperReport报表

 

当我不希望?/span>JasperReport生成pdf?/span>html{报表显C文件到客户端后再通过相应打印功能打印Q而想直接在客L打印生成的报表时候,我们可以使用JasperPrintManagerc里?/span>printReportҎ来实现打印。这里我l出我的一个测试实例:
首先Q我在服务器端的一?/span>Servlet里调用报表格式文件、填充数据生成一?/span>JasperPrint对象Q然后将q个JasperPrint对象以对象流方式q回l客LQ?/span>
public class JRPrintServlet extends HttpServlet {
public void service(
HttpServletRequest request,
HttpServletResponse response
) throws IOException, ServletException{

String fileName = reports/TestRpt.xml";//
我的试报表格式文g
JasperReport jrt = JasperCompileManager.compileReport(fileName);//
~译报表格式

java.sql.Connection conn = DBBean.getConnection(); //
获取数据库连?/span>
JasperPrint jpt = JasperFillManager.fillReport(jrt,hs,conn));//
填充报表数据生成JasperPrint对象

response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jpt);//
?/span>JasperPrint对象写入对象输出中
oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}

}


}

然后~写一个客LAppletQ通过对上?/span>Servlet的请求获得该JasperPrint对象Qƈ调用JasperPrintManagerҎq行打印Q?/span>
public class JRPrinterApplet extends Applet {
private URL url = null;

public void init(){
String strUrl = getParameter("REPORT_URL");
if(strUrl!=null){
try{
System.out.println(getCodeBase());
url = new URL(getCodeBase(),strUrl);//
从获?/span>html参数中获得报?/span>URL
System.out.println(url);
}catch(Exception e){
e.printStackTrace();
}
}else
JOptionPane.showMessageDialog(this, "Source URL not specified");


}

public void start(){
if(url!=null){
try{
JOptionPane.showMessageDialog(this, url);
Object obj = JRLoader.loadObject(url);//
发送对象请求,获得JasperPrint对象
System.out.println(obj);
JasperPrintManager.printReport((JasperPrint)obj, true);//
调用Ҏ打印所获得?/span>JasperPrint对象
}catch(Exception e){
e.printStackTrace();
}
}
}

}
另外单写一个测?/span>html来调用以?/span>appletQ?/span>
<!--JRPrintTest.html-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>
打印H口</title>
</head>
<script language="javascript">
<!--
function openApp()
{
var url = "/JRPrintServlet";
document.write('<APPLET ID="JrPrt" CODE = "JRPrinterApplet.class" CODEBASE = "/reports" ARCHIVE = "jasper-api.jar" WIDTH = "0" HEIGHT = "0">');
document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">');
document.write('<PARAM NAME = "scriptable" VALUE="false">');
document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">');
document.write('</APPLET>');
}

-->
</script>
<body bgcolor="#FFFFFF">
<input type="button" value="
试打印" onclick="openApp();">

</body>
</html>

q样Q在客户端访?/span>JRPrintTest.html面Q点?/span>"试打印"按钮Q就能够直接在客L打印Z打印出所要的报表?/span> 

 

 

 

 



]]>
JasperReportl验?/title><link>http://www.tkk7.com/sgsoft/articles/192.html</link><dc:creator>天一?/dc:creator><author>天一?/author><pubDate>Fri, 07 Jan 2005 10:26:00 GMT</pubDate><guid>http://www.tkk7.com/sgsoft/articles/192.html</guid><wfw:comment>http://www.tkk7.com/sgsoft/comments/192.html</wfw:comment><comments>http://www.tkk7.com/sgsoft/articles/192.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/sgsoft/comments/commentRss/192.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sgsoft/services/trackbacks/192.html</trackback:ping><description><![CDATA[<font face="arial" color="#000000">JasperReport和iReport是不错的Java报表工具. 在实际项目中, 本h用它们开发了20个Report, 涉及SubReport, Image, Graph, U篏了一些经? 其是关于Export到Excel斚w, 文档上也很少提及, Ua是摸索出来的, 有的问题q是通过L代码才解决的. 此脓q入门教程, 差不多算是笔记吧, 以问{Ş式记?  <br /><br />iReport  <br />安装  <br />下蝲Q解压iReport 0.4.0 (推荐src版本Q?nbsp; <br />认JDK?.4以上  <br />把JDK /lib下的tools.jar拯到{ireport_home}/lib目录?<br />q行  <br />对于下蝲的Binary版本Q只能运?bin/startup.bat  <br />对于下蝲的Src版本Q可以通过ant iReportq行Q先安装ant)  <br />如果q行startup.batQ出现java.lang.NoSuchMethodError错误Q一般是JDK版本太低。如果确认已安装?.4或以上,查pathpȝ变量Q看看有1.3的JRE是不是排在前面(比如安装了Oracle的客LQ往往?.3的JREQ,如果出现Class Not FoundQ检查classpath。对于通过ant的方式运行,一般都没什么问题,所以推荐下载src版本 <br />JasperReport 常见问题  <br />.jrxml vs .jasper  <br />如果在运行时载入.jrxml, 那么每次调用q得~译, 不如预先~译?jasper.不过预先~译的jasper,必须用同L本的JasperReport载入,而且灉|性差? 不过对于大部分报?q是预先~译成jasper方便 <br />如果扚w~译jrxml  <br />用Ant很容易解?<br /><br />  <br /><br />.....  <br /><br />   <br /><br /><br />如何使用囄Q?nbsp; <br />很容?用Image控g可以了. 在Image Express里面可以用String来表C图片的路径, 或者用InputStream, File对象.不过不管用Fileq是String对象, 都不得不用绝对\? q显然很不灵z? 解决办法?I入一?P的参?表示囄所在的目录,然后?P和文件名拼接出完整的l对路径. 更好的方法是用InputStream, 例如this.getClass().getResourceAsStream("logo.jpg") ,q时只要把图片放在当?jasper所在的目录可以了,不必考虑什么参?什么\径了 <br />昄非数据库字段变量  <br />昄如运行日期等,可以直接在Text Field里面输入new java.util.Date(), 然后把Pattern设成如mm/dd/yyyy.  <br />动态控制某些Field是否昄  <br />每个Static Text, Text Field甚至整个Band的属性里面都有Print When Expression, 比如设成new Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")), 那么只有当参数display的gؓyes的时候才昄 <br />使用Sub Report, 如何使用相对路径  <br />?.3, 和用图片类? 用InputStream或者传入参?<br />Query里面如何使用参数  <br />$P!{xxx} 或?nbsp;$P{xxx} 后者只能用于类似PreparedStatement参数l定, 而前者可替换Sql的Q意部? 在需要动态排序的时? 前者特别有? 比如 select a,b,c from t order by $P!{orderClause}   不管?Pq是$P!, SQL最l是以PreparedStatement方式执行? 不必太担心性能问题   注意:参数是不能嵌套的, 比如$P{a} =''$P{b}''   , $P{b}=''value'', 不要指望$P{a}能被替换?'value'' <br />如何使用图表(Graph)  <br />JasperReport本n没有图表功能, 只有昄Image的功??.3). iReport里有个Graph向导, 其实质是通过jFreeChart生成Image. 更另? 更直接的做法是放一个Image控g, Image Express Class讄成java.awt.Image, 在Image Expression里通过自定义的c返回java.awt.Image对象. 例如''GraphProvider.getImage($P{REPORT_DATASOURCE},title, subtitle.....)''.  GraphProvider是自qc? public static Image getImage(JRDataSource, ....) <br />如果昄多个图表  <br />在一张报表上昄一个图表和昄多个图表是不同的. 假设Query是select name,price,qty from xxx, W一张图昄name-price, W二张图昄name-qty, 如果q是?.8的方? W二张图Ҏ昄不出? Z? 因ؓ传入的是JRDataSource, 而JRDataSource仅仅是对ResultSet的简单封? 在第一张图处理完后, 游标已经Ceof位置? 在开始处理第二张囄时?必然抛出游标耗尽的异? 怎么?? 自己写个JRDataSourceAdapter, 把JRDataSource对象里面的值预先保存到一个Collection (相当于一个Offline的数据集), 然后把这个Collection传个getImageҎ. 具体? Z个Variable  mydate, cd是java.util.Map, Calculation Type- System, Initial Value Expression是JRDataSourceAdapter.JRDataSource2Map($P{REPORT_DATA_SOURCE},new String[]{"NAME","PRICE","QTY"},new Class[]{java.lang.String.class,java.lang.Double.class,java.lang.Double.class}), JRDataSource2Map是自己写的一个Adapter. 然后在Image的Expression里面换成?'GraphProvider.getImage(mydata,title, other params...), 当然得修改getImageҎ <br />Export到Excel的问?nbsp; <br />如何L报表头等  <br />直接把不需要的Band删除(把其高度设ؓ0). 如果仅仅是export到Excel的时候不需要报表头, 而输出到PDF{仍焉要保? 那么使用print when expression, ?.4 <br />如果让Excel看v来整?nbsp; <br />不要有空白地? 首先把所有的Field设成一样高, 寚w! 把所在Band的高度也设成和Field一样高, 让Field正好攑օBand. 然后调整Field的宽? 让每个Field都相?没有I隙. 最?记得讄参数: exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, <br />                    Boolean.TRUE); <br /><br />如何保留GridLine  <br />首先, 讄参数exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 然后,把每个Field或者Static Text框的''Transparent''属性都勾上 <br />如何使字D名只显CZ?nbsp; <br />如果把字D名攑֜ColumnHead区域, 那么输出到Excel, 会每个Page都显CZ? 在设计Report时? 一般会讑֮Page大小. 然而对于Excel, q个Page讑֮仍然存在,而且往往很讨? 因ؓ在Excel? 通常希望得到q箋的数? 然而Jasper仍然?'自作多情''q行分页. 比如? 设计JasperReport的时? 讑֮page size为Letter, Portrait, 那么输出到Excel的时候每隔大U?0?具体取决于Field的高?, page header, column header, column foot, page foot 会被重复一? 而且q附带一个高度ؓ0的Excel Row, 表示Page Break的地? 把字D名攑֜title band? 可以解决字段名重复的问题, 当然page header也不要显CZ. 如果需? 可以把title band的print when expression设成只有输出Excel的时候才昄 <br />Z么Excel里面的数据是从第二行,WB列开始显C的?  <br />因ؓW一行和WA列分别是用来表示page top margin ?nbsp;page left margin? 对于Excel来说, Ua多余. 解决Ҏ是把page margin 设成0. 不过如果q个reportq需要以PDF{显C? 那么设成0׃好看? 最好能动态的改变page margin. 当然,q个改变只能在外?调用Report的地? q行, 在设计Report的时候是无能为力? 不幸的是, JasperReportcd然没有setMargin的方?只有getter. 折中的方法只能是reflect? 代码C意如下: //use reflect to set the private field of JRBaseReport <br />                 java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField( <br />                        "leftMargin"); <br />                margin.setAccessible(true); <br />                margin.setInt(myRpt, 0);                 margin = JRBaseReport.class.getDeclaredField("topMargin"); <br />                margin.setAccessible(true); <br />                margin.setInt(myRpt, 0);                 margin = JRBaseReport.class.getDeclaredField("bottomMargin"); <br />                margin.setAccessible(true); <br />                margin.setInt(myRpt, 0);  <br />如何LExcel中隐藏的?  <br />如前说述, ׃page break的关p? Excel中每隔几十行,有一个高度ؓ0的row, 即把page botom margin设ؓ0, 把page footerL都没有办? 唯一的解军_法是把page height设ؓ很大. ?.5一? 不得不用reflect:  <br />java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField( <br />                        "pageHeight"); <br />                pageHeight.setAccessible(true); <br />                pageHeight.setInt(myRpt, Integer.MAX_VALUE); <br /><br />文档  <br />哪里有文?  <br />JasperReport有䆾Ultimate Guide, 不过不是免费? 和jFreeChart一个d? 不过|上有流? 写的q可? 60多页, 不过也没详细到哪里去. 如果下蝲源代码版, 那么看看自带的Demo也不? SF的论坛也是问问题的最好地?<br />源代?nbsp;仅供参?reportProvider--一个Servlet, GraphProider, JRDataAdapter都是普通类) <br />/** <br /> *  <br /><br />Title: ReportProviderServlet <br /><br /><br /> *  <br />Description: Servlet to generate Jasper reports <br /><br /><br /> *  <br />Copyright: Copyright (c) 2004 <br /><br /><br /> *  <br />Company: ***** <br /><br /><br /> * @author zephyr <br /> * @version 1.0 <br /> */ <br />package xyz; <br /><br />import net.sf.jasperreports.engine.*; <br />import net.sf.jasperreports.engine.base.*; <br />import net.sf.jasperreports.engine.export.*; <br />import net.sf.jasperreports.engine.util.*; <br /><br />import org.apache.log4j.*; <br /><br />import java.io.*; <br /><br />import java.sql.*; <br /><br />import java.util.*; <br /><br />import javax.servlet.*; <br />import javax.servlet.http.*; <br /><br /><br />public class ReportProviderServlet extends HttpServlet <br />{ <br />    private static Logger log = LogManager.getLogger(ReportProviderServlet.class); <br /><br />    //Initialize: Setup DataSourceManager <br />    public void init() throws javax.servlet.ServletException <br />    { <br />        String prefix = getServletContext().getRealPath("/"); <br />        String file = getInitParameter("data-source-file"); <br /><br />        DataSourceManager.configure(prefix + file); <br /><br />        log.info("initialized successfully!"); <br />    } <br /><br />    //Process the HTTP request <br />    public void service(HttpServletRequest request, HttpServletResponse response) <br />        throws ServletException, IOException <br />    { <br />        String reportClass = request.getParameter("reportClass"); <br /><br />        log.debug("Running Report:" + reportClass); <br /><br />        boolean isExcelFormat = false; <br /><br />        if (reportClass == null) <br />        { <br />            throw new IllegalArgumentException("Jasper Class Unspecified"); <br />        } <br /><br />        String reportFormat = request.getParameter("reportFormat"); <br /><br />        if (reportFormat == null) <br />        { <br />            reportFormat = "jasperPrint"; <br />        } <br /><br />        try <br />        { <br />            JasperReport myRpt = JasperManager.loadReport(this.getClass() <br />                                                              .getResourceAsStream("/jasperReports/" + <br />                        reportClass + ".jasper")); <br /><br />            //set ReprintHeaderOnEachPage=false for Excel Format <br />            isExcelFormat = reportFormat.equalsIgnoreCase("excel"); <br /><br />            if (isExcelFormat) <br />            { <br />                //use reflect to set the private field of JRBaseReport <br />                //No margin for excel format, max pageHeight <br />                java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField( <br />                        "leftMargin"); <br />                margin.setAccessible(true); <br />                margin.setInt(myRpt, 0); <br /><br />                margin = JRBaseReport.class.getDeclaredField("topMargin"); <br />                margin.setAccessible(true); <br />                margin.setInt(myRpt, 0); <br /><br />                margin = JRBaseReport.class.getDeclaredField("bottomMargin"); <br />                margin.setAccessible(true); <br />                margin.setInt(myRpt, 0); <br /><br />                java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField( <br />                        "pageHeight"); <br />                pageHeight.setAccessible(true); <br />                pageHeight.setInt(myRpt, Integer.MAX_VALUE); <br /><br />                //Don't print group header on each page <br />                if (null != myRpt.getGroups()) <br />                { <br />                    for (int i = 0; i < myRpt.getGroups().length; i++) <br />                    { <br />                        myRpt.getGroups()[i].setReprintHeaderOnEachPage(false); <br />                    } <br />                } <br />            } <br /><br />            Map params = new HashMap(10); <br />            Enumeration enu = request.getParameterNames(); <br /><br />            while (enu.hasMoreElements()) <br />            { <br />                String key = (String) enu.nextElement(); <br />                params.put(key, <br />                    request.getParameter(key).toUpperCase().replaceAll("'", "''")); <br />                log.debug(key + "=" + request.getParameter(key)); <br />            } <br /><br />            log.debug("Before Filling"); <br /><br />            OutputStream httpOut = response.getOutputStream(); <br /><br />            Connection conn = DataSourceManager.getConnection(request.getSession()); <br /><br />            JasperPrint rptPnt = JasperManager.fillReport(myRpt, params, conn); <br /><br />            conn.close(); <br /><br />            if (reportFormat.equalsIgnoreCase("jasperPrint")) <br />            { <br />                response.setContentType("application/octet-stream"); <br />                JRSaver.saveObject(rptPnt, httpOut); <br />            } <br />            else if (reportFormat.equalsIgnoreCase("pdf")) <br />            { <br />                response.setContentType("application/pdf"); <br />                response.setHeader("Content-Disposition", <br />                    "attachment;filename=\"" + reportClass + ".PDF\""); <br />                JasperManager.printReportToPdfStream(rptPnt, httpOut); <br />            } <br />            else if (reportFormat.equalsIgnoreCase("excel")) <br />            { <br />                response.setContentType("application/vnd.ms-excel"); <br />                response.setHeader("Content-Disposition", <br />                    "attachment;filename=\"" + reportClass + ".XLS\""); <br /><br />                JRXlsExporter exporter = new JRXlsExporter(); <br /><br />                exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt); <br />                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, httpOut); <br />                exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, <br />                    Boolean.TRUE); <br />                exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, <br />                    Boolean.FALSE); <br />                exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, <br />                    Boolean.FALSE); <br />                exporter.exportReport(); <br />            } <br />            else if (reportFormat.equalsIgnoreCase("html")) <br />            { <br />                JRHtmlExporter exporter = new JRHtmlExporter(); <br />                response.setContentType("text/html"); <br /><br />                Map imagesMap = new HashMap(); <br /><br />                request.getSession().setAttribute("IMAGES_MAP", imagesMap); <br /><br />                exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, <br />                    imagesMap); <br />                exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, <br />                    "image.jsp?image="); <br />                exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt); <br />                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, httpOut); <br /><br />                exporter.exportReport(); <br />            } <br /><br />            log.debug("Report Exported"); <br />        } <br />        catch (Exception ex) <br />        { <br />            log.error("Error Occured", ex); <br />        } <br />    } <br />} <br /><br /><br /><br /><br /><br /><br />/** <br /> *  <br /><br />Title: JRDataSourceAdapter <br /><br /><br /> *  <br />Description: Converting JRDataSource to Mapped ArrayList <br /><br /><br /> *  <br />Copyright: Copyright (c) 2004 <br /><br /><br /> *  <br />Company: ***** <br /><br /><br /> * @author zephyr <br /> * @version 1.0 <br /> */ <br />package xyz; <br /><br />import net.sf.jasperreports.engine.*; <br />import net.sf.jasperreports.engine.design.*; <br /><br />import java.util.*; <br /><br /><br />public class JRDataSourceAdapter <br />{ <br />    public static Map JRDataSource2Map(JRDataSource dataSource, String[] fieldNames, <br />        Class[] fieldClasses) throws JRException <br />    { <br />        HashMap result; <br /><br />        if (fieldNames.length != fieldClasses.length) <br />        { <br />            throw new JRException("Number of Field Name & Class unmatch"); <br />        } <br /><br />        JRDesignField[] fields = new JRDesignField[fieldNames.length]; <br /><br />        result = new HashMap(4); <br /><br />        for (int i = 0; i < fieldNames.length; i++) <br />        { <br />            fields[i] = new JRDesignField(); <br />            fields[i].setName(fieldNames[i]); <br />            fields[i].setValueClass(fieldClasses[i]); <br />            result.put(fieldNames[i], new ArrayList()); <br />        } <br /><br />        do <br />        { <br />            for (int i = 0; i < fields.length; i++) <br />            { <br />                Object value = dataSource.getFieldValue(fields[i]); <br />                ((ArrayList) result.get(fields[i].getName())).add(value); <br />            } <br />        } <br />        while (dataSource.next()); <br /><br />        return result; <br />    } <br />} <br /><br /><br /><br /><br />/** <br /> *  <br /><br />Title: GraphProvider <br /><br /><br /> *  <br />Description: Generate JFreeChart Image <br /><br /><br /> *  <br />Copyright: Copyright (c) 2004 <br /><br /><br /> *  <br />Company: **** <br /><br /><br /> * @author zephyr  <br /> * @version 1.0 <br /> */ <br />package xyz; <br /><br />import net.sf.jasperreports.engine.*; <br />import net.sf.jasperreports.engine.design.*; <br />import net.sf.jasperreports.engine.export.*; <br /><br />import org.jfree.chart.*; <br />import org.jfree.chart.axis.*; <br />import org.jfree.chart.plot.*; <br /><br />import org.jfree.data.*; <br /><br />import java.awt.*; <br />import java.awt.image.*; <br /><br />import java.io.*; <br /><br />import java.util.*; <br /><br /><br />public class GraphProvider <br />{ <br />    public static Image getImage(Map dataSource, String fieldNameX, String fieldNameY, <br />        String chartName, String titleX, String titleY, boolean isBarChart, int imageWidth, <br />        int imageHeight) throws JRException <br />    { <br />        JRDesignField fieldX = new JRDesignField(); <br />        fieldX.setName(fieldNameX); <br />        fieldX.setValueClass(java.lang.String.class); <br /><br />        JRDesignField fieldY = new JRDesignField(); <br />        fieldY.setName(fieldNameY); <br />        fieldY.setValueClass(java.lang.Double.class); <br /><br />        ArrayList periods = (ArrayList) dataSource.get(fieldNameX); <br />        ArrayList values = (ArrayList) dataSource.get(fieldNameY); <br /><br />        DefaultCategoryDataset categoryDs = new DefaultCategoryDataset(); <br /><br />        for (int i = 0; i < values.size(); i++) <br />        { <br />            Object obj = values.get(i); <br />            double dataValue = 0; <br /><br />            if (obj != null) <br />            { <br />                dataValue = ((Double) obj).doubleValue(); <br />            } <br /><br />            categoryDs.addValue(dataValue, null, (String) periods.get(i)); <br />        } <br /><br />        JFreeChart c = null; <br /><br />        if (isBarChart) <br />        { <br />            c = ChartFactory.createBarChart(chartName, titleX, titleY, categoryDs, <br />                    PlotOrientation.VERTICAL, false, false, false); <br />        } <br />        else <br />        { <br />            c = ChartFactory.createLineChart(chartName, titleX, titleY, categoryDs, <br />                    PlotOrientation.VERTICAL, false, false, false); <br />        } <br /><br />        c.getTitle().setFont(new Font("Arial", Font.BOLD, 16)); <br /><br />        NumberAxis axis = (NumberAxis) c.getCategoryPlot().getRangeAxis(); <br />        axis.setAutoRange(true); <br /><br />        TickUnitSource tickUnits = NumberAxis.createIntegerTickUnits(); <br />        axis.setStandardTickUnits(tickUnits); <br /><br />        return (c.createBufferedImage(imageWidth, imageHeight)); <br /><br />       } <br />} <br /><br /></font><img height="1" src="http://www.cnblogs.com/SGSoft/aggbug/88340.html" width="1" /><img src ="http://www.tkk7.com/sgsoft/aggbug/192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sgsoft/" target="_blank">天一?/a> 2005-01-07 18:26 <a href="http://www.tkk7.com/sgsoft/articles/192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperreport可以用Collection做ؓ数据源,q种方式比用Connection方式更ؓ灉|方便http://www.tkk7.com/sgsoft/articles/193.html天一?/dc:creator>天一?/author>Fri, 07 Jan 2005 10:24:00 GMThttp://www.tkk7.com/sgsoft/articles/193.htmlhttp://www.tkk7.com/sgsoft/comments/193.htmlhttp://www.tkk7.com/sgsoft/articles/193.html#Feedback0http://www.tkk7.com/sgsoft/comments/commentRss/193.htmlhttp://www.tkk7.com/sgsoft/services/trackbacks/193.html
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="dori.jasper.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="com.zx.report.util.CarUse"%>
<%@ page import="dori.jasper.engine.data.*" %>
<%
Connection conn 
= null;
Statement st 
= null;
ResultSet rs 
= null;
byte[] bytes = null;
List carUseList
=new ArrayList();

try{

Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn 
=DriverManager.getConnection("jdbc:microsoft:sqlserver://10.10.10.207:1433;DatabaseName=report;user=sa;password=111111");

//以输入流方式
   InputStream reportFile = getClass().getClassLoader().getResourceAsStream("carUserBd.jasper");

//以reportFile方式
//File reportFile =new File(request.getRealPath("/report/carUserBd.jasper"));

Map parameters 
= new HashMap();


String sqlCarUser
="SELECT car.carNo, dept.Name , people.peopleName,carUse.useDescription ," +
" carUse.beginTime , carUse.planEndTime , carUse.comment , carUse.driver," +
" carUse.peopleNumber ,OneWay= case carUse.isOneWay  when 0 then '双程'  else '单程'  end, " +
"isFirst= case carUse.priority when 0  then '? when  1  then  '?  else  '?  end, carUse.start , " +
"carUse.destination , people.peopleName as ratifier FROM DEPT_CARUSELOG carUse , DEPT_CARINFO car , " +
"ADMIN_ORGANIZATION dept , PUBLIC_PEOPLEINFO people WHERE carUse.id=290 and " +
"caruse.carId=car.carId and carUse.departId=dept.id and carUse.peopleId=people.peopleId";

st 
= conn.createStatement();
rs 
= st.executeQuery(sqlCarUser);

while(rs.next()){
CarUse carUse
=new CarUse();
carUse.setCarNo(rs.getString(
1));
carUse.setName(rs.getString(
2));
carUse.setPeopleName(rs.getString(
3));
carUse.setUseDescription(rs.getString(
4));
carUse.setBeginTime(rs.getDate(
5));
carUse.setPlanEndTime(rs.getDate(
6));
carUse.setComment(rs.getString(
7));
carUse.setDriver(rs.getString(
8));
carUse.setPeopleNumber(rs.getString(
9));
carUse.setOneWay(rs.getString(
10));
carUse.setIsFirst(rs.getString(
11));
carUse.setStart(rs.getString(
12));
carUse.setDestination(rs.getString(
13));
carUse.setRatifier(rs.getString(
14));

carUseList.add(carUse);

}


JRBeanCollectionDataSource ds 
= new JRBeanCollectionDataSource(carUseList);

bytes 
=
JasperRunManager.runReportToPdf(
reportFile,
parameters,
ds);
String fileName 
= "test.pdf";
response.setContentType(
"application/pdf");
response.addHeader(
"Content-Disposition",
"attachment;filename=\"" + fileName);

response.setContentLength(bytes.length);
ServletOutputStream ouputStream 
= response.getOutputStream();

System.
out.println("5");
ouputStream.write(bytes, 
0, bytes.length);
ouputStream.flush();
ouputStream.close();

}
 catch (SQLException sqle) {

System.
out.println("SQLException:" + sqle.getMessage());

}
 catch (JRException e) {
e.printStackTrace();
}
catch(ClassNotFoundException cnfe){


}


%>
jasperreport可以用Collection做ؓ数据源,q种方式比用Connection方式更ؓ灉|方便


]]>
整理的JasperReport资料Q{载) http://www.tkk7.com/sgsoft/articles/194.html天一?/dc:creator>天一?/author>Fri, 07 Jan 2005 10:22:00 GMThttp://www.tkk7.com/sgsoft/articles/194.htmlhttp://www.tkk7.com/sgsoft/comments/194.htmlhttp://www.tkk7.com/sgsoft/articles/194.html#Feedback5http://www.tkk7.com/sgsoft/comments/commentRss/194.htmlhttp://www.tkk7.com/sgsoft/services/trackbacks/194.html整理的JasperReport资料Q{载)

java开发?|友 溪V
多谢了!

最q工作中用到报表Q而我在学习JasperReport的过E中遇到了很多问题(主要是国内的资料太少了)Q网上很找得到Q在此我把我找到的一些资料和大家׃nQ希望能对大家有所帮助?
1、JasperReport和iReport的资源,最新版本可以到下面官方|站得到

iReport官方|站Q?
http://ireport.sourceforge.net
     JasperReport官方|站Q?
http://jasperreports.sourceforge.net

2、安?
   1Q、JDK的安装,q|JAVA_HOME
比如我的JAVA_HOME路径如下Q?
JAVA_HOME  D:\Program Files\j2sdk1.4.2_03

2Q、由于中文的问题Q所以还需要下载:itext-1.02b.jar和iTextAsian.jar?
下蝲地址Qhttp://itext.sourceforge.net/downloads/iTextAsian.jar
q在CLASSPATH中设|?
      例如我的CLASSPATH如下Q?
CLASSPATH
E:\Program Files\Apache Group\Tomcat4.1\webapps\testreport\WEB-INF\lib\itext-1.02b.jar;E:\Program

Files\Apache Group\Tomcat 4.1\webapps\testreport\WEB-INF\lib\iTextAsian.jar;E:\Program Files\Apache

Group\Tomcat 4.1\webapps\testreport\WEB-INF\lib;D:\tools\iReport0.2.3\lib

   3Q、iReport的安装iReport只要解压OKQ如果没有安装AntQ可以直接在iReport下的noAnt目录下,
q行startup.bat可以了Q这样iReport可以启动了

4Q、JasperReport
Jasperreport不需要Q何配|,你只需下载以后的jar包放到classpath下即?
5Q、数据库的JDBC驱动?
加入到CLASSPATH?

3、详l资?
iReport官方提供了一些关于iReport视频Q对于初学者很有帮助:
   地址Qhttp://ireport.sourceforge.net/docs.html

JasperReport官方提供的用指?
地址Qhttp://jasperreports.sourceforge.net/tutorial/index.html

JasperReport提供的一些例子:
地址Qhttp://jasperreports.sourceforge.net/samples/index.html

4、常见问?
1Q、iReport中提C框输入中文是不能正常显C,请将iReport下lib中的q个包删除tinylaf.jar
   2Q、在iReport中运行报表时如果出现q问题Q请查itext-1.02b.jar和iTextAsian.jarq两个包是否加到CLASSPATH
3Q、在jsp或servlet高度报表时出Cؕ码或不显C,h查你在报表设计过E中所讄的字体及其编?
比如Qpdfname、pdfencoding
5、下面是两个调试例子
  Servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import dori.jasper.engine.*;
import java.io.*;
import java.util.*;
import java.sql.*;

/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class TestReport extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;

try {

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn =
DriverManager.getConnection(


"jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=sa");

ServletContext servletContext =this.getServletContext();
File reportFile = new File(servletContext.getRealPath("test/iteminfo.jasper"));
Map parameters = new HashMap();
Integer i=new Integer(8);
parameters.put("pjId", i);
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();
} catch (JRException jre) {
System.out.println("JRException:" + jre.getMessage());
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}

}

public void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);

}

}

JSP:
<%@ page contentType="text/html;charset=GBK" %>



]]>
վ֩ģ壺 ƷŮٸaѾþ| ޹ۺ˳ۺվ| ޾ƷۺӰԺ| ձĻ߿| jizzѹۿ| ëƬ߹ۿ| һVR| | ޸һƷ| Ļ߲Ƶ | ?VþþƷ| ѿƵijAPP| ޾Ʒҹ| AVþþƷ| AVĻɫ| aëƬƵ| 91Ƶѹۿ| ר˿| ޹Ʒ˾þ| ִִӲˬƵ | avŷǮ| aëƬƵ| Av뾫Ʒ| þ޾Ʒavվ| ˳߹ۿƵ| ɫͷվ| պƷרҹ| ŷպɫ| 㽶Ƶ| ŷ޹Ʒ㽶| պavѹۿ| 5| պƷƵ| ˳Ƶ߲Ų| ޾Ʒɫһ| ˳7777Ӱ߹ۿ| AVҹӰԺʦӰԺ | 2020ˬ| þĻƷѩ| þþþ޾Ʒַ| պƬӰѹۿ|