??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色精品aⅴ一区区三区,精品亚洲国产成AV人片传媒,亚洲国产婷婷香蕉久久久久久 http://www.tkk7.com/sgsoft/category/27.htmlJAVA?/description>zh-cn Tue, 27 Feb 2007 19:12:06 GMT Tue, 27 Feb 2007 19:12:06 GMT 60 使用iReport制作报表模板 http://www.tkk7.com/sgsoft/articles/912.html天一?/dc:creator>天一?/author>Wed, 02 Feb 2005 04:27:00 GMT http://www.tkk7.com/sgsoft/articles/912.html http://www.tkk7.com/sgsoft/comments/912.html http://www.tkk7.com/sgsoft/articles/912.html#Feedback 0 http://www.tkk7.com/sgsoft/comments/commentRss/912.html http://www.tkk7.com/sgsoft/services/trackbacks/912.html 2005 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>
]]> iReport ?Jasperreport整合开发web报表向导 http://www.tkk7.com/sgsoft/articles/547.html天一?/dc:creator>天一?/author>Fri, 21 Jan 2005 07:53:00 GMT http://www.tkk7.com/sgsoft/articles/547.html http://www.tkk7.com/sgsoft/comments/547.html http://www.tkk7.com/sgsoft/articles/547.html#Feedback 1 http://www.tkk7.com/sgsoft/comments/commentRss/547.html http://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 GMT http://www.tkk7.com/sgsoft/articles/346.html http://www.tkk7.com/sgsoft/comments/346.html http://www.tkk7.com/sgsoft/articles/346.html#Feedback 0 http://www.tkk7.com/sgsoft/comments/commentRss/346.html http://www.tkk7.com/sgsoft/services/trackbacks/346.html 使用 JFreeChart来创建基于web的图?/span> 刘冬 (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-1 http://www.tkk7.com/sgsoft/articles/190.html天一?/dc:creator>天一?/author>Mon, 10 Jan 2005 05:16:00 GMT http://www.tkk7.com/sgsoft/articles/190.html http://www.tkk7.com/sgsoft/comments/190.html http://www.tkk7.com/sgsoft/articles/190.html#Feedback 6 http://www.tkk7.com/sgsoft/comments/commentRss/190.html http://www.tkk7.com/sgsoft/services/trackbacks/190.html jasper 变量的表辑ּ的问?/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>field q行相加 那么应该用如下表达?/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> 所以可能会D iReport 在启动时用到 Oracle 中的 JDK 而导致无法启?/span>
如何让显C的数据自动折行昄
可以选择 field Q- > 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打印生成的报表时候,我们可以使用 JasperPrintManager c里?/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(); } } } } 然后~写一个客L Applet Q通过对上?/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>applet Q?/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> http://www.tkk7.com/sgsoft/articles/192.html天一?/dc:creator>天一?/author>Fri, 07 Jan 2005 10:26:00 GMT http://www.tkk7.com/sgsoft/articles/192.html http://www.tkk7.com/sgsoft/comments/192.html http://www.tkk7.com/sgsoft/articles/192.html#Feedback 4 http://www.tkk7.com/sgsoft/comments/commentRss/192.html http://www.tkk7.com/sgsoft/services/trackbacks/192.html JasperReport和iReport是不错的Java报表工具. 在实际项目中, 本h用它们开发了20个Report, 涉及SubReport, Image, Graph, U篏了一些经? 其是关于Export到Excel斚w, 文档上也很少提及, Ua是摸索出来的, 有的问题q是通过L代码才解决的. 此脓q入门教程, 差不多算是笔记吧, 以问{Ş式记? iReport 安装 下蝲Q解压iReport 0.4.0 (推荐src版本Q?nbsp; 认JDK?.4以上 把JDK /lib下的tools.jar拯到{ireport_home}/lib目录? q行 对于下蝲的Binary版本Q只能运?bin/startup.bat 对于下蝲的Src版本Q可以通过ant iReportq行Q先安装ant) 如果q行startup.batQ出现java.lang.NoSuchMethodError错误Q一般是JDK版本太低。如果确认已安装?.4或以上,查pathpȝ变量Q看看有1.3的JRE是不是排在前面(比如安装了Oracle的客LQ往往?.3的JREQ,如果出现Class Not FoundQ检查classpath。对于通过ant的方式运行,一般都没什么问题,所以推荐下载src版本 JasperReport 常见问题 .jrxml vs .jasper 如果在运行时载入.jrxml, 那么每次调用q得~译, 不如预先~译?jasper.不过预先~译的jasper,必须用同L本的JasperReport载入,而且灉|性差? 不过对于大部分报?q是预先~译成jasper方便 如果扚w~译jrxml 用Ant很容易解? ..... 如何使用囄Q?nbsp; 很容?用Image控g可以了. 在Image Express里面可以用String来表C图片的路径, 或者用InputStream, File对象.不过不管用Fileq是String对象, 都不得不用绝对\? q显然很不灵z? 解决办法?I入一?P的参?表示囄所在的目录,然后?P和文件名拼接出完整的l对路径. 更好的方法是用InputStream, 例如this.getClass().getResourceAsStream("logo.jpg") ,q时只要把图片放在当?jasper所在的目录可以了,不必考虑什么参?什么\径了 昄非数据库字段变量 昄如运行日期等,可以直接在Text Field里面输入new java.util.Date(), 然后把Pattern设成如mm/dd/yyyy. 动态控制某些Field是否昄 每个Static Text, Text Field甚至整个Band的属性里面都有Print When Expression, 比如设成new Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")), 那么只有当参数display的gؓyes的时候才昄 使用Sub Report, 如何使用相对路径 ?.3, 和用图片类? 用InputStream或者传入参? Query里面如何使用参数 $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'' 如何使用图表(Graph) 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, ....) 如果昄多个图表 在一张报表上昄一个图表和昄多个图表是不同的. 假设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Ҏ Export到Excel的问?nbsp; 如何L报表头等 直接把不需要的Band删除(把其高度设ؓ0). 如果仅仅是export到Excel的时候不需要报表头, 而输出到PDF{仍焉要保? 那么使用print when expression, ?.4 如果让Excel看v来整?nbsp; 不要有空白地? 首先把所有的Field设成一样高, 寚w! 把所在Band的高度也设成和Field一样高, 让Field正好攑օBand. 然后调整Field的宽? 让每个Field都相?没有I隙. 最?记得讄参数: exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); 如何保留GridLine 首先, 讄参数exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 然后,把每个Field或者Static Text框的''Transparent''属性都勾上 如何使字D名只显CZ?nbsp; 如果把字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的时候才昄 Z么Excel里面的数据是从第二行,WB列开始显C的? 因ؓ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 java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField( "leftMargin"); margin.setAccessible(true); margin.setInt(myRpt, 0); margin = JRBaseReport.class.getDeclaredField("topMargin"); margin.setAccessible(true); margin.setInt(myRpt, 0); margin = JRBaseReport.class.getDeclaredField("bottomMargin"); margin.setAccessible(true); margin.setInt(myRpt, 0); 如何LExcel中隐藏的? 如前说述, ׃page break的关p? Excel中每隔几十行,有一个高度ؓ0的row, 即把page botom margin设ؓ0, 把page footerL都没有办? 唯一的解军_法是把page height设ؓ很大. ?.5一? 不得不用reflect: java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField( "pageHeight"); pageHeight.setAccessible(true); pageHeight.setInt(myRpt, Integer.MAX_VALUE); 文档 哪里有文? JasperReport有䆾Ultimate Guide, 不过不是免费? 和jFreeChart一个d? 不过|上有流? 写的q可? 60多页, 不过也没详细到哪里去. 如果下蝲源代码版, 那么看看自带的Demo也不? SF的论坛也是问问题的最好地? 源代?nbsp;仅供参?reportProvider--一个Servlet, GraphProider, JRDataAdapter都是普通类) /** * Title: ReportProviderServlet * Description: Servlet to generate Jasper reports * Copyright: Copyright (c) 2004 * Company: ***** * @author zephyr * @version 1.0 */ package xyz; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.base.*; import net.sf.jasperreports.engine.export.*; import net.sf.jasperreports.engine.util.*; import org.apache.log4j.*; import java.io.*; import java.sql.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class ReportProviderServlet extends HttpServlet { private static Logger log = LogManager.getLogger(ReportProviderServlet.class); //Initialize: Setup DataSourceManager public void init() throws javax.servlet.ServletException { String prefix = getServletContext().getRealPath("/"); String file = getInitParameter("data-source-file"); DataSourceManager.configure(prefix + file); log.info("initialized successfully!"); } //Process the HTTP request public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String reportClass = request.getParameter("reportClass"); log.debug("Running Report:" + reportClass); boolean isExcelFormat = false; if (reportClass == null) { throw new IllegalArgumentException("Jasper Class Unspecified"); } String reportFormat = request.getParameter("reportFormat"); if (reportFormat == null) { reportFormat = "jasperPrint"; } try { JasperReport myRpt = JasperManager.loadReport(this.getClass() .getResourceAsStream("/jasperReports/" + reportClass + ".jasper")); //set ReprintHeaderOnEachPage=false for Excel Format isExcelFormat = reportFormat.equalsIgnoreCase("excel"); if (isExcelFormat) { //use reflect to set the private field of JRBaseReport //No margin for excel format, max pageHeight java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField( "leftMargin"); margin.setAccessible(true); margin.setInt(myRpt, 0); margin = JRBaseReport.class.getDeclaredField("topMargin"); margin.setAccessible(true); margin.setInt(myRpt, 0); margin = JRBaseReport.class.getDeclaredField("bottomMargin"); margin.setAccessible(true); margin.setInt(myRpt, 0); java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField( "pageHeight"); pageHeight.setAccessible(true); pageHeight.setInt(myRpt, Integer.MAX_VALUE); //Don't print group header on each page if (null != myRpt.getGroups()) { for (int i = 0; i < myRpt.getGroups().length; i++) { myRpt.getGroups()[i].setReprintHeaderOnEachPage(false); } } } Map params = new HashMap(10); Enumeration enu = request.getParameterNames(); while (enu.hasMoreElements()) { String key = (String) enu.nextElement(); params.put(key, request.getParameter(key).toUpperCase().replaceAll("'", "''")); log.debug(key + "=" + request.getParameter(key)); } log.debug("Before Filling"); OutputStream httpOut = response.getOutputStream(); Connection conn = DataSourceManager.getConnection(request.getSession()); JasperPrint rptPnt = JasperManager.fillReport(myRpt, params, conn); conn.close(); if (reportFormat.equalsIgnoreCase("jasperPrint")) { response.setContentType("application/octet-stream"); JRSaver.saveObject(rptPnt, httpOut); } else if (reportFormat.equalsIgnoreCase("pdf")) { response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment;filename=\"" + reportClass + ".PDF\""); JasperManager.printReportToPdfStream(rptPnt, httpOut); } else if (reportFormat.equalsIgnoreCase("excel")) { response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=\"" + reportClass + ".XLS\""); JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, httpOut); exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporter.exportReport(); } else if (reportFormat.equalsIgnoreCase("html")) { JRHtmlExporter exporter = new JRHtmlExporter(); response.setContentType("text/html"); Map imagesMap = new HashMap(); request.getSession().setAttribute("IMAGES_MAP", imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image.jsp?image="); exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, httpOut); exporter.exportReport(); } log.debug("Report Exported"); } catch (Exception ex) { log.error("Error Occured", ex); } } } /** * Title: JRDataSourceAdapter * Description: Converting JRDataSource to Mapped ArrayList * Copyright: Copyright (c) 2004 * Company: ***** * @author zephyr * @version 1.0 */ package xyz; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.design.*; import java.util.*; public class JRDataSourceAdapter { public static Map JRDataSource2Map(JRDataSource dataSource, String[] fieldNames, Class[] fieldClasses) throws JRException { HashMap result; if (fieldNames.length != fieldClasses.length) { throw new JRException("Number of Field Name & Class unmatch"); } JRDesignField[] fields = new JRDesignField[fieldNames.length]; result = new HashMap(4); for (int i = 0; i < fieldNames.length; i++) { fields[i] = new JRDesignField(); fields[i].setName(fieldNames[i]); fields[i].setValueClass(fieldClasses[i]); result.put(fieldNames[i], new ArrayList()); } do { for (int i = 0; i < fields.length; i++) { Object value = dataSource.getFieldValue(fields[i]); ((ArrayList) result.get(fields[i].getName())).add(value); } } while (dataSource.next()); return result; } } /** * Title: GraphProvider * Description: Generate JFreeChart Image * Copyright: Copyright (c) 2004 * Company: **** * @author zephyr * @version 1.0 */ package xyz; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.design.*; import net.sf.jasperreports.engine.export.*; import org.jfree.chart.*; import org.jfree.chart.axis.*; import org.jfree.chart.plot.*; import org.jfree.data.*; import java.awt.*; import java.awt.image.*; import java.io.*; import java.util.*; public class GraphProvider { public static Image getImage(Map dataSource, String fieldNameX, String fieldNameY, String chartName, String titleX, String titleY, boolean isBarChart, int imageWidth, int imageHeight) throws JRException { JRDesignField fieldX = new JRDesignField(); fieldX.setName(fieldNameX); fieldX.setValueClass(java.lang.String.class); JRDesignField fieldY = new JRDesignField(); fieldY.setName(fieldNameY); fieldY.setValueClass(java.lang.Double.class); ArrayList periods = (ArrayList) dataSource.get(fieldNameX); ArrayList values = (ArrayList) dataSource.get(fieldNameY); DefaultCategoryDataset categoryDs = new DefaultCategoryDataset(); for (int i = 0; i < values.size(); i++) { Object obj = values.get(i); double dataValue = 0; if (obj != null) { dataValue = ((Double) obj).doubleValue(); } categoryDs.addValue(dataValue, null, (String) periods.get(i)); } JFreeChart c = null; if (isBarChart) { c = ChartFactory.createBarChart(chartName, titleX, titleY, categoryDs, PlotOrientation.VERTICAL, false, false, false); } else { c = ChartFactory.createLineChart(chartName, titleX, titleY, categoryDs, PlotOrientation.VERTICAL, false, false, false); } c.getTitle().setFont(new Font("Arial", Font.BOLD, 16)); NumberAxis axis = (NumberAxis) c.getCategoryPlot().getRangeAxis(); axis.setAutoRange(true); TickUnitSource tickUnits = NumberAxis.createIntegerTickUnits(); axis.setStandardTickUnits(tickUnits); return (c.createBufferedImage(imageWidth, imageHeight)); } } ]]> jasperreport可以用Collection做ؓ数据源,q种方式比用Connection方式更ؓ灉|方便 http://www.tkk7.com/sgsoft/articles/193.html天一?/dc:creator>天一?/author>Fri, 07 Jan 2005 10:24:00 GMT http://www.tkk7.com/sgsoft/articles/193.html http://www.tkk7.com/sgsoft/comments/193.html http://www.tkk7.com/sgsoft/articles/193.html#Feedback 0 http://www.tkk7.com/sgsoft/comments/commentRss/193.html http://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 GMT http://www.tkk7.com/sgsoft/articles/194.html http://www.tkk7.com/sgsoft/comments/194.html http://www.tkk7.com/sgsoft/articles/194.html#Feedback 5 http://www.tkk7.com/sgsoft/comments/commentRss/194.html http://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 |
aƵ |
һƷ |
Ļ߲Ƶ
|
?VþþƷ |
ѿƵijAPP |
Ʒҹ |
AVþþƷ |
AVĻɫ |
aëƬƵ |
91Ƶѹۿ |
ר˿ |
Ʒ˾þ |
ִִӲˬƵ
|
avŷǮ |
aëƬƵ |
Av뾫Ʒ |
þƷavվ |
˳߹ۿƵ |
ɫͷվ |
պƷרҹ |
ŷպɫ |
㽶Ƶ |
ŷƷ㽶 |
պavѹۿ |
5 |
պƷƵ |
˳Ƶ߲Ų |
Ʒɫһ |
˳7777Ӱ߹ۿ |
AVҹӰԺʦӰԺ
|
2020ˬ |
þĻƷѩ |
þþþƷַ |
պƬӰѹۿ |