??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品视频在线,欧美日本亚洲,青青草在线免费视频http://www.aygfsteel.com/43880800/category/17827.htmlzh-cnWed, 28 Feb 2007 03:44:51 GMTWed, 28 Feb 2007 03:44:51 GMT60JAVA操作excelhttp://www.aygfsteel.com/43880800/archive/2006/12/19/88798.htmlTomTomTue, 19 Dec 2006 07:00:00 GMThttp://www.aygfsteel.com/43880800/archive/2006/12/19/88798.htmlhttp://www.aygfsteel.com/43880800/comments/88798.htmlhttp://www.aygfsteel.com/43880800/archive/2006/12/19/88798.html#Feedback0http://www.aygfsteel.com/43880800/comments/commentRss/88798.htmlhttp://www.aygfsteel.com/43880800/services/trackbacks/88798.html  1 package  com.eesys.apps.logic;
 2
 3 import  java.io.File;
 4 import  java.io.FileInputStream;
 5 import  java.io.InputStream;
 6
 7 import  jxl.Cell;
 8 import  jxl.CellType;
 9 import  jxl.Sheet;
10 import  jxl.Workbook;
11 import  jxl.write.Label;
12
13 public   class  PrintManager  {
14     
15        public   static   void  main(String[] args)  {
16         jxl.Workbook rwb  =   null ;
17          try {
18            // 构徏Workbook对象, 只读Workbook对象
19            // 直接从本地文件创建Workbook
20            // 从输入流创徏Workbook
21             System.out.println( " ********START!******* " );
22           InputStream is  =   new  FileInputStream( " D:/test.xls " );
23           rwb  =  Workbook.getWorkbook(is);
24
25            // Sheet(术语Q工作表)是Excel表格左下角的Sheet1,Sheet2,Sheet3但在E序?br /> 26            // Sheet的下标是?开?br /> 27            // 获取W一张Sheet?/span>
28            Sheet rs  =  rwb.getSheet( 0 );
29             // 获取Sheet表中所包含的d?/span>
30             int  rsColumns  =  rs.getColumns();
31             // 获取Sheet表中所包含的总行?/span>
32             int  rsRows  =  rs.getRows();
33             // 获取指定单元格的对象引用
34             for ( int  i = 0 ;i < rsRows;i ++ ) {
35               for ( int  j = 0 ;j < rsColumns;j ++ ) {
36                Cell cell  =  rs.getCell(j,i);
37                System.out.print(cell.getContents() + "   " );
38              }

39              System.out.println();
40            }

41             // 利用已经创徏的Excel工作薄创建新的可写入的Excel工作?/span>
42            jxl.write.WritableWorkbook wwb  =  Workbook.createWorkbook( new  File( " D:/Book2.xls " ),rwb);
43             // dW一张工作表
44            
45            jxl.write.WritableSheet ws  =  wwb.getSheet( 0 );
46            
47            
48             // 获得W一个单元格对象
49            jxl.write.WritableCell wc  =  ws.getWritableCell( 0 0 );
50             // 判断单元格的cd, 做出相应的{?/span>
51             if  (wc.getType()  ==  CellType.LABEL)  {
52              Label l  =  (Label) wc;
53              l.setString( " The value has been modified. " );
54            }

55             // 写入Excel对象
56            wwb.write();
57            wwb.close();
58            System.out.println( " ********END!******* " );
59
60         }
catch (Exception e) {
61           e.printStackTrace();
62         }

63          finally {
64            // 操作完成Ӟ关闭对象Q释攑֍用的内存I间
65           rwb.close();
66
67         }

68       }

69     }

70
JSP 文g
 1<%@ page contentType="text/html; charset=GBK" %>
 2<%@ page import="java.io.File" %>
 3<%@ page import="java.io.FileInputStream" %>
 4<%@ page import="java.io.FileOutputStream" %>
 5<%@ page import="jxl.write.WritableSheet" %>
 6<%@ page import="java.io.InputStream" %>
 7
 8<%
 9response.reset();//清除Buffer
10response.setContentType("application/vnd.ms-excel");
11File fileWrite = new File("d:/test.xls");
12response.setContentLength((int) fileWrite.length()); 
13InputStream in=new FileInputStream(fileWrite);
14byte[] b = new byte[2048];
15int len = 0;
16while ((len = in.read(b)) > 0{
17    response.getOutputStream().write(b, 0, len); // 向浏览器输出
18   }

19in.close();
20response.getOutputStream().close();
21
22%>


Tom 2006-12-19 15:00 发表评论
]]>
iReport & JasperReport配置及用L明手?/title><link>http://www.aygfsteel.com/43880800/archive/2006/12/04/85434.html</link><dc:creator>Tom</dc:creator><author>Tom</author><pubDate>Mon, 04 Dec 2006 10:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/43880800/archive/2006/12/04/85434.html</guid><wfw:comment>http://www.aygfsteel.com/43880800/comments/85434.html</wfw:comment><comments>http://www.aygfsteel.com/43880800/archive/2006/12/04/85434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/43880800/comments/commentRss/85434.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/43880800/services/trackbacks/85434.html</trackback:ping><description><![CDATA[ <h2 class="diaryTitle">iReport & JasperReport配置及用L明手? -</h2> <p>                                       </p> <p> </p> <p>关于iReport和JasperReport的简明手?/p> <p>By Gem 伍子?/p> <br /> <font size="+0"> <font size="+0"> <p> <strong> </strong> </p> <h1> <font size="+0">1</font>安装</h1> <h2> <font size="+0">1.1 iReport</font>的安?/h2> <font size="+0">iReport</font>直接解压后,?font size="+0">J2SDK\lib</font>目录下的<font size="+0">tools.jar</font>拯?font size="+0">iReport\lib</font>目录下,然后?font size="+0">iReport</font>目录下运?font size="+0">iReport.bat</font>卛_?br />需要注意的?font size="+0">tools.jar</font>的版本必要与本机安装的<font size="+0">jre</font>一_也就是说Q如果系l安装的?font size="+0">jre1.4.2</font>必ȝ<font size="+0">jdk1.4.2</font>?font size="+0">tools.jar</font>?br /><h2><font size="+0">1.2 JapserReport</font>开发(q行Q环境的搭徏</h2><p><font size="+0">JasperReport</font>的开发环境必要导入以下所有包Q?/p><p><font size="+0">1Q?JasperReport</font>包,?font size="+0">jasperreports-0.6.1.jar</font>Q?/p><p><font size="+0">2Q?Aparche Common</font>包,包括<font size="+0">logging</font>?font size="+0">digester</font>?font size="+0">beanutils</font>?font size="+0">collections</font>?font size="+0">logging-api</font>Q?/p><p><font size="+0">3Q?iText</font>包,包括<font size="+0">itext-1.1.jar</font>?font size="+0">iTextAsian.jar</font>Q用于输Z文字W到<font size="+0">PDF</font>文gQ?/p><p>以上所有包Q除?font size="+0">iTextAsian.jar</font>Q都已经包含?font size="+0">iReport\lib</font>目录下?/p><font size="+0"><font size="+0"><h1><font size="+0">2 </font>开发流E?/h1><p>?font size="+0">iReport</font>可视化编辑生成的文g?font size="+0">jrxml</font>文Q这是一U?font size="+0">xml</font>文gQ记录了一?font size="+0">report</font>的详l信息,我们可以直接用写字板打开它编辑,<font size="+0">iReport</font>是一个方便我们生成和~辑<font size="+0">jrxml</font>文g的工P它也可以很方便地?font size="+0">jrxml</font>文g~译?font size="+0">jasper</font>报表文g?/p><p><font size="+0">jrxml</font>文g通过<font size="+0">Jasper</font>~译之后变成了<font size="+0">jasper</font>文gQ这份文件才是真正在E序中调用生成报表的<font size="+0">report</font>文g?/p><p>但是有一点要注意的是Q?font size="+0">jasper</font>的各个版本编译出来的<font size="+0">jasper</font>文gq不兼容Q就是说?font size="+0">0.6.1</font>版编译出来的文g?font size="+0">0.6.4</font>版调用是会出错的Q?font size="+0">iReport</font>自带?font size="+0">Jasper</font>版本?font size="+0">0.6.1</font>Q?font size="+0">jasper</font>的最新版本是<font size="+0">0.6.4</font>。所以ؓ了保持通用性,我徏议只?font size="+0">iReport</font>来开发编?font size="+0">jrxml</font>文gQ而不~译?font size="+0">jasper</font>文gQ在我们的打印报表程序中再即时编译一ơ。虽然这h率可能会低了一点,但是保证了不同版本的兼容性?/p><p>在我们的E序中,要调?font size="+0">Jasper</font>的话Q首先要得到一个数据库?font size="+0">Connection</font>QŞ如:<font size="+0">Connection con = ...</font></p><p>需要往<font size="+0">JasperReport</font>传参数的话只需要新Z?font size="+0">Map</font>Q以参数名作?font size="+0">key</font>Q需要传入的对象作ؓ<font size="+0">value</font>Q譬如:</p><p><font size="+0">Map props = new HashMap();</font></p><p><font size="+0">      props.put("name", new String("name"));</font></p><p>需要多个参数只需分别<font size="+0">put</font>q?font size="+0">Map</font>里去可以了?/p><font size="+0"><font size="+0"><p><font size="+0">JasperReport</font>有如下几个主要的<font size="+0">Manager</font>Q?/p><table cellspacing="0" cellpadding="0" border="1"><tbody><tr><td valign="top" width="163"><strong><font size="+0">JasperCompileManager<br /></font></strong></td><td valign="top" width="405"><p>?font size="+0">jrxml</font>文g~译?font size="+0">jasper</font>文g?font size="+0">JasperReport</font>对象</p></td></tr><tr><td valign="top" width="163"><strong><font size="+0">JasperFillManager<br /></font></strong></td><td valign="top" width="405"><p>从数据源中获取数据ƈ填充<font size="+0">jasper</font>文g?font size="+0">JasperReport</font>对象Q?font size="+0">JasperPrint</font>对象</p></td></tr><tr><td valign="top" width="163"><strong><font size="+0">JasperPrintManager<br /></font></strong></td><td valign="top" width="405"><p>?font size="+0">JasperPrint</font>对象直接输出到打印机打印</p></td></tr><tr><td valign="top" width="163"><strong><font size="+0">JasperExportManager<br /></font></strong></td><td valign="top" width="405"><p>?font size="+0">JasperPrint</font>对象导出?font size="+0">PDF</font>?font size="+0">HTML</font>文gQ或)</p></td></tr><tr><td valign="top" width="163"><strong><font size="+0">JasperRunManager<br /></font></strong></td><td valign="top" width="405"><p>q行一?font size="+0">jasper</font>文g?font size="+0">JasperReport</font>对象q输出到<font size="+0">PDF</font>?font size="+0">Html</font>文gQ或)中,我的理解是等于集成了<strong><font size="+0">JasperFillManager</font></strong>?strong><font size="+0">JasperExportManager</font></strong>的功?/p></td></tr></tbody></table><p>对于上述对象的详l说明请参阅<font size="+0">JasperReport</font>的文?/p><p>例程Q?/p>例程Q? <p><font size="+0">public static void main(String[] args) {</font></p><p><font size="+0">    try {</font></p><p><font size="+0">      Class.forName("org.gjt.mm.mysql.Driver");</font></p><p><font size="+0">      Connection con = DriverManager.getConnection(</font></p><p><font size="+0">          "jdbc:mysql://wes:3306/umpdb?useUnicode=true&characterEncoding=GBK", "root", "elite");</font></p><p><font size="+0">      File f1 = new File("Account.jrxml");</font></p><p><font size="+0">      File f2 = new File("Contact.jrxml");</font></p><p><font size="+0">      JasperReport main = JasperCompileManager.compileReport(f1</font></p><p><font size="+0">          .getAbsolutePath());</font></p><p><font size="+0">      JasperReport report = JasperCompileManager.compileReport(f2</font></p><p><font size="+0">          .getAbsolutePath());</font></p><p><font size="+0">      Map props = new HashMap();</font></p><p><font size="+0">      props.put("subreport", report);</font></p><p><font size="+0">      JasperPrint print = JasperFillManager.fillReport(main, props,con);</font></p><p><font size="+0">      //JasperPrintManager.printReport(print,true);</font></p><p><font size="+0">      JasperExportManager.exportReportToPdfFile(print, "a.pdf");</font></p><p><font size="+0">      //JasperRunManager.runReportToPdfFile("Account.jasper", "a.pdf", props, con);</font></p><p><font size="+0">    } catch (ClassNotFoundException e) {</font></p><p><font size="+0">      // TODO </font>自动生成<font size="+0"> catch </font>?/p><p><font size="+0">      e.printStackTrace();</font></p><p><font size="+0">    } catch (SQLException e) {</font></p><p><font size="+0">      // TODO </font>自动生成<font size="+0"> catch </font>?/p><p><font size="+0">      e.printStackTrace();</font></p><p><font size="+0">    } catch (JRException e) {</font></p><p><font size="+0">      // TODO </font>自动生成<font size="+0"> catch </font>?/p><p><font size="+0">      e.printStackTrace();</font></p><p><font size="+0">    }</font></p><p><font size="+0">  }</font></p><font size="+0"><font size="+0"><h1><font size="+0">3 </font>注意事项</h1><p><font size="+0">1</font>Q?font size="+0">iReport</font>中新Z文报表的时候记得要输入<font size="+0">XML</font>~码<font size="+0">GB2312</font>?/p><p><font size="+0">2</font>Q?font size="+0">iReport</font>中定义中文字体的时候,要选择<font size="+0">PDF Font Name</font>?font size="+0">STSong-Light</font>Q宋体)?font size="+0">MHei-Medium</font>Q黑体)?font size="+0">MSung-Light</font>Q在<font size="+0">PDF Encoding</font>中选择<font size="+0">GB-UCS2-H(Chinese Simplified)</font>Q否则输出到<font size="+0">PDF</font>时会q?/p><p><font size="+0">3</font>Q用<font size="+0">Report SQL</font>查询之后Q可能会出现某些字段没有自动建立<font size="+0">Field</font>Q就需要在<font size="+0">Field</font>中手动定义了?/p></font></font></font></font></font></font></font> </font> <img src ="http://www.aygfsteel.com/43880800/aggbug/85434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/43880800/" target="_blank">Tom</a> 2006-12-04 18:28 <a href="http://www.aygfsteel.com/43880800/archive/2006/12/04/85434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperreport可以用Collection做ؓ数据源,q种方式比用Connection方式更ؓ灉|方便 http://www.aygfsteel.com/43880800/archive/2006/11/28/84157.htmlTomTomTue, 28 Nov 2006 14:40:00 GMThttp://www.aygfsteel.com/43880800/archive/2006/11/28/84157.htmlhttp://www.aygfsteel.com/43880800/comments/84157.htmlhttp://www.aygfsteel.com/43880800/archive/2006/11/28/84157.html#Feedback0http://www.aygfsteel.com/43880800/comments/commentRss/84157.htmlhttp://www.aygfsteel.com/43880800/services/trackbacks/84157.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方式更ؓ灉|方便


Tom 2006-11-28 22:40 发表评论
]]>
ireport+jasperreports 探烦http://www.aygfsteel.com/43880800/archive/2006/11/28/84155.htmlTomTomTue, 28 Nov 2006 14:36:00 GMThttp://www.aygfsteel.com/43880800/archive/2006/11/28/84155.htmlhttp://www.aygfsteel.com/43880800/comments/84155.htmlhttp://www.aygfsteel.com/43880800/archive/2006/11/28/84155.html#Feedback0http://www.aygfsteel.com/43880800/comments/commentRss/84155.htmlhttp://www.aygfsteel.com/43880800/services/trackbacks/84155.html q几天在弄ireport+jasperreports的报表,l于弄得差不多了····
下面把我这几天做的一些东西记录下来···?br />其中提出一些特别要注意的地方(我就是在那几个地Ҏ(gu)费了些时_···

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

2、下载ireport和jasperreports···
jasperreport下蝲地址Q(我下的是jasperreports-0.6.8Q?/font> http://jasperreports.sourceforge.net
ireport下蝲地址Q(我下的是iReport0.5.0Q?/font> http://ireport.sourceforge.net

3、下载了ireport它解压~以后运行iReport.bat文gQ过大约30U如果能出现ireport的主H体
则表明你的系l已l可以运行ireport了,但是我的不行Q所以我~辑目录下的iReport.bat文gQ?br />代码如下····
@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

----------------
q里是采用ant来运行的Q所以还需要下载一个ant···
如果你没有安装ant的话也可以找到noAnt文g夹下的startup.bat文g卛_q行···

4、数据库···
我是用的mysql数据库,之前配置数据库的JDBC驱动器一直不成功原因是我下的mysql的jdbc驱动太老了Q?br />和ireport的不兼容····
?/font> http://dev.mysql.com/downloads/ 下蝲最新版本··?/font>

5、配|数据库q接····
q个是报表与数据库的接口Q通过<资料来源>--<q接/资料来源>开启配|对话框Qireport会记录以前用的
所有连接,除非你手工删除这些连接,否则q接一直存在··?br />配置新连接界面如下:
 
提示Q如果你需要报表提供中文内Ҏ(gu)C可以在JDBC URL下工夫,比如输入Q?br />jdbc:mysql://localhost/xiaoya?user=root&password=root&useUnicode=true&characterEncoding=GB2312

6、中文问题···?br />解决pdf中文问题需要下载itextasian.jar和itext-1.3.jarQ将其下载后攑ֈireport/lib下即可·?br />要在q里提一下的是之前我也下载了q两个东东放到指定的位置了可q是qQ后来还是解决了··
解决Ҏ(gu)Q?br />在iReport中新Z个TextField的时候会自动把pdf字体设ؓCP1252Q这个是需要修改的Q?br />否则pdf输出会报错说找不到字体,我就被这个捆饶了很久Q修改如图:

7、理解几个重要的概念····
  a、iReport的输出格式···?br />    iReport的预览输出格式可以支持以下几U:
    PDF、HTML、CSV、JAVA2D、Excel、纯文字、JRViewerQ其中最常用的是PDF、JRViewer?br />    本文以JRViewerZ子。JRViewer是直接以C/S方式作ؓ报表的输出格式,在JFrame框架下输出。Jasperreport提供默认的JRViewer输出cR?br />  b、报表的动态对象变量、参数、字D···?br />    在用iReport的过E中会碰到很多与变量QVariablesQ、参敎ͼParametersQ、字D(FieldsQ这些有关的内容Q我们要介绍q些对象的用和意义Q?br />   ·字段QFieldsQ:是数据库抽取出来的,希望在报表中出现的数据库内容?br />     比如一个ID的所有倹{?F{ filedsName }
   ·参数QParametersQ:q是你的应用需要提供给报表的入口,
     比如你希望在报表被解释的时候提供Where语句的条件|
     那么可以用参敎ͼParametersQ?P{ parameterName }
   ·变量QVariablesQ:q是报表中一些逻辑q算的表玎ͼ比如l计倹{?V{ variablesName }
     每种对象的定义格式如每个对象的后面说明,比如定义一个变量(VariablesQ,
     那么表达式就写成$V{ variablesName }Q报表中出现的就是这个变量的名称?br />   c、编译、静态运行、动态运行··?br />     Jasperreportq行旉要的是一个jasper后缀的文Ӟ~译q程其实是把jrxml后缀的文件生成jasper后缀的文件。(可以参考Jasperreport的运行原理) 静态运行和动态运行是相对的,后者带数据源运行,比如带数据库q行。前者就是静态文本运行,和数据源无关Q如果报表中出现和数据源有关的对象,则以null昄?br />   d、报表的l构···
       一个报表的l构大致是几个部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter?br />     ·TitleQ每个报表一般会有一个名字,比如×××销售报表,title是搁置q个名称的最好地方了Q当然你也可以根据需要搁|在合适的地方?br />     ·pageHeaderQ报表的一些公p素,比如늠、创建时间、创Zh{信息放|在q里是比较好的选择?br />     ·columnHeaderQ无可非议的q里是放|列的名UͼC不是列数据?br />     ·DetialQ放|需要@环的数据Q比如销售记录数据?br />     ·columnFooterQ放|列U别的统计计值或是列的说明?br />     ·pageFooterQ放|页U别的统计值或是页的说明?br />     ·SummaryQ可能需要对几页Q你的报表可能有几个늻成)的统计倹{比?0个销售记录共占用?,那么攄q些l计记录的统计值最好的地方是summary?br />     ·groupHeaderQ每个表的内容可能需要根据某个属性进行划分显C内容和计算内容Q比如希望以月䆾为单位每l分开昄销售记录,那么可以定义一个组Q组的定义参考后文)QgroupHeader是攄l说明或是组标志最好的地方?
     ·GroupfooterQ放|组的统计或是说?/font>

8、徏立一个新的报表····?/font>

  a、新Z个空报表的基本配|?br />    单击工具栏的W一个工具“New Report”,新徏一个报表,输入报表名称和定义报表的一些参敎ͼ比如名称输入Q例子是做一个项目的Bug量统计报表)单击【More?】选择标签Q填写或是选择XML~码Q这是关pd你的XML支持的字W集的选择Q请Ҏ(gu)需要选择Q比如需要你的XML文g支持中文Q那么可以输入或是GBKQ之后点凅ROK】按钮,q入报表的设计界面?br />  b、定义报表可能需要的字体cd及其属?br />    一个报表的内容五花八门Q有表头、栏位名、数据、其他变量信息等{,如果q些信息都是一致的字体和属性(比如颜色Q,那么整个报表死气沉沉,昑־很粗p了。我们可以在为报表添加每个元素时定义元素的属性,但是那是一个多么费时的工作Q如果能预先定义一些属性的l合Q之后在创徏每个元素时只需选择q些l合的其中一个即可,省事又快速?br />    单击【预览】-【报表字体】开启自定义l合对话框。单凅RNew】进入定义详l对话框Q如图:
    按照图中的顺序填写信息和步骤Q依ơ定义“表头”、“组”、“列”、“列内容”、“统计计”、“其他”等6中字体组合?br />    注意PDF内嵌字体的选择Q如果你需要报表时以PDF文g格式提供Q那么对此需要作出选择?br />   9、向表添加对象···?br />  a、添加静态对象··?br />   可以通过工具栏的工具d静态对象,比如文本Q点凅RT】,之后在报表的I白处单击,如此卛_把静态对象添加到报表Q然后拖动对象的Ҏ(gu)Q它的大小合适,双击对象弹出对象的属性配|对话框Q切换到【Font】LabelQ在“Report font”的ComBox选择“表头”字体,Q表头字体是前文提供的自定义属性组合)Q再切换到【Static Text】LabelQ修改表头的名字Q比如“Bugl计报表”或是“销售记录统计表”等{与业务有关的内宏V添加图片,L凅RImage Tool】,之后的操作与TextcM。其他静态对象操作步骤类伹{?br />  b、用连接··?br />    q记得前文提供的Q?.2节)配置MySql数据库连接吗Q这里我们将要用前文配|的q接了。选择菜单【徏立】-【用动态连接】开启可选的动态连接, 选择M一个你需要的q接最后【OK】,保存报表Q这样你的报表就使用了这个连接了?br />   *【特别提C?/strong>此连接必M以后应用E序使用的连接一致?br />  c、创建SQL查询语句····
    SQL语句是对MRDBMS起作用的语言Q外部用户需要用这些语a理l护数据库中的数据,同样的,iReport也是需要这么做Q我们需要提供查询数据库的语aQSQL语句Q这PiReport卛_通过此SQL语句获取数据Q之后组l到报表中ƈ昄出来Q以满用户的需要ؓ目的?br />    通过菜单【资料来源】-【报表查询】开启SQL输入对话框,q在【Report SQL Query?Label中输入SQL语句如图Q图中的“Automatically Retrieve Fields”checkbox和“ReadFields”Button是确认自动获取还是手动获取数据库表的可用Fields。单凅ROK】,保存报表?br />     

d、创建字D动态对象····?br />    报表的动态对象有变量、参数、字D,前文提及了他们的概念Q这里将要一一讲解如何使用。字D也是数据库中的字D,通过菜单【预览】-【报表字Dc开启字D늚列表Q工h上可以找到相应的工具Q,可以拖放L字段到报表的M位置Q比如拖动一部分Bug的内容字D到detialD(内容无关紧要Q只要知道原理)?br />  e、创建组···
     l是一个很重要的概念,一个报表可以多个组Q每个组以一个关键字为标讎ͼ比如希望Bugl计是根据项目(或是产品Q进行统计的。那么可以设立一个项目标记的l。如图:
 
        

l的参数讑֮可以看界面即可理解部分,其中最主要的是“Group expression”,q是必须输入格式正确的ƈ且存在的字段名称Q本文的“proname”是【字Dc中的一个元素。依此类推,建立其他的组对象?br />    每徏立一个组Q在报表的界面上都会出现该组对应的段Q如图:他们是首֯应出现的。(Header和FooterQ?br />   
 
  f、添加参数和使用参数····
    我们重申参数作用Q一般是需要外界提供参数给报表的入口,比如SQL语句的where条g的表辑ּ。通过【预览】-【报表参数】开启报表参数列表对话框Q工h上可以找到相应的工具Q。如图:输入名称及其他参数。【ok?保存报表?br />         那么如何使用呢?打开SQL语句对话框,参考?.3创徏SQL查询语句”,q时候的SQL语句应该是:SELECT * FROM bugs  where proname=$P{ProjectName} order by proname,modulename
    注意其中的红体字部分Q就是把刚才定义?nobr>变量q用到SQL语句了。这样当应用提供参数Ӟ只要指定提供l这个参敎ͼ那么报表解释引擎卛_替换q些变量然后再执行SQL语句Q在W二部分提到~程Ӟ会提供参数设定代码?br /> 
  g、添加变量和使用变量····
     变量的定义类似参敎ͼ通过【预览】-【报表变量】开启报表变量列表对话框Q工h上可以找到相应的工具Q,如图Q图中定义的变量的作用是Q定义一个Bug的计数器Q数据类型是java.lang.Integer,使用Count函数q行l计字段testerQ作用范围是模块l,也就是统计模块的Bug量。其中的tester可以Ҏ(gu)其他非组对象Q比如proname是组对象Q就不要用作q里的统计参数。以上提供的是自定义变量Q其实iReportpȝq有提供一些内嵌(BuildinQ的变量Q比如页码,行记录数{,视需要而用?br />  
 
  10、最后的报表····
    a、完成后的报表··?br />    
    b、预览报表··?br />     点击动态运行报表,出现如图内容Q?br />     

  11、在jsp中调用报表····?br />    解决q个问题也用了我差不?天时?(Q但ȝ是搞定了·····
    下面分别介绍以pdf格式和以html格式昄报表····
   a、pdf格式ireport_pdf.jsp····

   <%@ page import="net.sf.jasperreports.engine.*" %>
    <%@ page import="java.util.*" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.sql.*" %>
    <%
      //报表~译之后生成?jasper 文g的存放位|?br />      File reportFile = new File(application.getRealPath("ireport/xueji.jasper"));
      //q个是用来联接我的mysql 的JDBC URL
      String url="jdbc:mysql://localhost:3306/xueji?useUnicode=true&characterEncoding=gb2312";
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      //传递报表中用到的参数?br />      Map parameters = new HashMap();
     //"Name"是报表中定义q的一个参数名U?其类型ؓString ?/font>

     parameters.put("banji", new String(" c1"));
     System.out.println("---------conn-------------");
     //q接?nobr>数据?/a>
     Connection conn = DriverManager.getConnection(url,"root","root");
     System.out.println("---------Jasper begin-------------");
     //在控制台昄一下报表文件的物理路径
     System.out.println(reportFile.getPath());
     byte[] bytes=JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);

     System.out.println("---------Jasper end-------------");
     response.setContentType("application/pdf");
     response.setContentLength(bytes.length);
     ServletOutputStream ouputStream = response.getOutputStream();
     ouputStream.write(bytes, 0, bytes.length);
     ouputStream.flush();
     ouputStream.close();
   %>

   b、html格式ireport_html.jsp····

 
  
  
  
  
  
  
   <%


    File reportFile = new File(application.getRealPath("/ireport/xueji.jasper"));
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
    Map parameters = new HashMap();
    parameters.put("baiji", "c1");
   //parameters.put("BaseDir", reportFile.getParentFile());   
   //JRBeanArrayDataSource jrDataSource = new JRBeanArrayDataSource(objects);//objects打印的实体数l;

    Class.forName("org.gjt.mm.mysql.Driver");
    Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/xueji","root","root");
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
         
    JRHtmlExporter exporter = new JRHtmlExporter();
    StringBuffer sbuffer = new StringBuffer();

    Map imagesMap = new HashMap();
    session.setAttribute("IMAGES_MAP", imagesMap);
   
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
    //exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
    //exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/ireport/ireport_html.Image?image=");
    //exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
    exporter.exportReport();
    //out.flush();
    conn.close();
   % >

注意Q以html格式调用主要要注?/exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
                              //exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "images目录的\?image=");
                              在生成html预览的时候会生成一个px文gQ而这个images_uri的\径就是那个px的\径,不用Q就用下?br />                              的语句就可以了···?
                              exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);   
而这个语句则是处理分는的····                             ?
//exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");


需要注意的地方····
必须在tomcat5以上版本中运行···?br />在运行的时候还要将jasperreports/lib下的包全部拷到tomcat下你所放文件目录下的win-inf/lib下··?br />特别要注意的是看看ireport/lib下的包与jasperreports/lib的包是否兼容···
之前我的一直有问题是因ؓ我的发布环境是jasperreports-0.6.7.jar而运行环境是jasperreports-0.6.8.jar···
q样也会出现错误的···?/font>

参考资料···?br />感谢···
http://www-128.ibm.com/developerworks/cn/java/j-ireport/?ca=dwcn-newsletter-java
http://blog.csdn.net/jemlee2002/archive/2004/10/05/125107.aspx



Tom 2006-11-28 22:36 发表评论
]]>
վ֩ģ壺 ֹ| ľ| Һ| | ˮ| | | | ƽ| | ƽ˳| | ۶| | ʲ| ÷| ̫| Ͳ| | ֶ| | ɫ| dz| | | | ־| | Ӫɽ| | ƽ| | ʡ| | ֦| | | ɽ| ˲| ɽ| |