??xml version="1.0" encoding="utf-8" standalone="yes"?>成人影院av,国产午夜精品理论片a级大结局,精品在线小视频http://www.aygfsteel.com/keweibo/category/30571.htmlAs long as you are there to lead me ,I won't lose my way zh-cnWed, 02 Apr 2008 12:18:59 GMTWed, 02 Apr 2008 12:18:59 GMT60JFreeReport介二http://www.aygfsteel.com/keweibo/articles/190441.htmlKEKEWed, 02 Apr 2008 11:33:00 GMThttp://www.aygfsteel.com/keweibo/articles/190441.htmlhttp://www.aygfsteel.com/keweibo/comments/190441.htmlhttp://www.aygfsteel.com/keweibo/articles/190441.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/190441.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/190441.htmlJFreeReport是由JFreel织开发的一个基于java的报表组件。利用JFreeReportlg可以完成大多数样式的报表Qƈ且能够将其输?br />  为pdf、xls、cvs、html{不同格式的文g和打华ͼ为程序开发h员解x表问题提供了很大的方ѝ?br /> JFreeReportlg包括一个核心包以及几个扩展包,可以到www.jfree.org|站下蝲。由于是开源的Q所以可以直接得到其源代码?br />  Q后面关于PDF输出中文斚w需要修改其源代码)
现在JFreeReport加入CPentahoQ所以JFreeReport的最新版本只到jfreereport-0.8.7-9.jarQ之后就以Pentaho Report Designer命名了?br />  
二、JFreeReportlg的结?br /> JFreeReportlg的核心对象就是JFreeReport对象Q我其视两部分Q一部分是报表格式定义,另一部分是数据存储?br /> JFreeReportlg的数据用的是java.swing.table.TableModelc,我们对它都非常熟悉了Q用JTable做表格时都会用到Q所以在此不再篏q?br />  我主要讲讲JFreeReport的报表格式定义以及输出方法?br /> JFreeReport报表分Z下几个部分:
 报头QReportHeaderQ?br />  报尾QReportFooterQ?br />  头QPageHeaderQ?br />  尾QPageFooterQ?br />  分组_GroupHeaderQ?br />  分组(GroupFooterQ和数据域?br /> l     表头QReportHeaderQ——内ҎC在整个报表的开_可以包括报表名称{内宏V?br /> l     表尾QReportFooterQ——内ҎC在整个报表的末?br /> l     首QPageHeaderQ——内ҎC在每一늚首部Q第一则昄在ReportHeader下面Q可以包括报表日期、填表h{内宏V?br /> l     尾QPageFooterQ——内ҎC在每一늚末尾Q可以包括页L信息?br /> l     分组_GroupHeaderQ——如果将数据分组Q则GroupHeadar内容会显C在每一l分l的头部?br /> l     分组(GroupFooterQ——如果将数据分组Q则GroupHeadar内容会显C在每一l分l的头部?br /> l     数据域——报表数据,一般位于每늚中间部分?br />  
三、报表格式定?br /> 知道了JFreeReportlg的报表结构,下面该介l如何定义了。有两种ҎQ一U是使用java代码实现Q另一U是使用xml定义?br /> 1、代码方式实现报表格式定?br /> 使用代码方式实现步骤很简单,是分别构造报_ReportHeaderQ、报(ReportFooterQ、页_PageHeaderQ、页(PageFooterQ?br />  分组_GroupHeaderQ和分组(GroupFooterQ对象,然后使用setҎ加入JFreeReport对象可以了?br /> 上面q几个对象我们一般只会用到其addElement(Element element)ҎQ即一个元素(ElementQ加入到指定部分。在q里Q元素的意义
是昄在报表中的内容,包括文本、表根{图形、图片等{。Element是一个抽象类Q他有几个子c,但我们不必直接用这些子c,
而是通过org.jfree.report.elementfactory包中的工厂类来构建。:
l     LabelElementFactory——标{օ素工厂类Q定义报表中昄的固定文本内宏V?br /> l     TextElementFactory——文本元素工厂类Q根据定义的域名Q显C其域名下的内容。比如:tableModel中的“~号”字段下的内容?br /> l     StaticShapeElementFactory——图形元素类Q可以绘制直Uѝ矩形等囑Ş?br /> 其他的元素我没用q,大家可以查看JFreeReport的API文档。他们的用法L下面的例子?br />   public static final int ROW_HEIGHT = 20;    //报告Q行高度
        public static final int HEADER_HEIGHT = 40;    //报告Q报头高?br />        JFreeReport report = new JFreeReport();    //构造JFreeReport对象
       report.setName("Report Name");
       PageDefinition pd = report.getPageDefinition();    //取得报告面定义
       float pageWidth = pd.getWidth();    //取得打印材质的页?br />  
       //定义头
       PageHeader header = new PageHeader();
       LabelElementFactory title = new LabelElementFactory();    //标题元素
       title.setText("l计报表");    //讄文本内容
       title.setColor(Color.BLACK);    //讄颜色
       title.setAbsolutePosition(new Point2D.Float(0, HEADER_HEIGHT));    //讄昄位置
       title.setMinimumSize(new FloatDimension(pageWidth, 36));    //讄寸
       title.setHorizontalAlignment(ElementAlignment.LEFT);
       title.setVerticalAlignment(ElementAlignment.MIDDLE);
       title.setDynamicHeight(true);    //讄是否动态调整高度(如果为trueQ当文本内容出昄范围旉度自动加长)
       header.addElement(title.createElement());
       report.setPageHeader(header);
 
       String[] columnNames = getColumnNames();    //取得报表数据域的所有列?br />  
    if (columnNames != null && columnNames.length > 0) ...{
          report.getItemBand().addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), 0));    //l制表格的横U?br />            //定义报表?br />            ReportHeader reportHeader = new ReportHeader();
        for (int i = 0; i < columnNames.length; i++) ...{
              //字段名元?br />               LabelElementFactory col = new LabelElementFactory();
              col.setName(columnNames[i]);
              col.setColor(Color.BLACK);
              col.setHorizontalAlignment(ElementAlignment.CENTER);
              col.setVerticalAlignment(ElementAlignment.MIDDLE);
              col.setDynamicHeight(true);
              col.setAbsolutePosition(new Point2D.Float((pageWidth
                     / (columnNames.length))
                     * i, 0));
              col.setMinimumSize(new FloatDimension(pageWidth
                     / (columnNames.length), ROW_HEIGHT));    //讄最尺?br />               col.setBold(true);    //讄是否_体昄
              col.setText(columnNames[i]);
              reportHeader.addElement(col.createElement());
              reportHeader.addElement(StaticShapeElementFactory.createVerticalLine(null, Color.BLACK, new BasicStroke(1), col.getAbsolutePosition().getX()));    //元素左侧竖线
              reportHeader.addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), 0));    //元素上方横线
              reportHeader.addElement(StaticShapeElementFactory.createVerticalLine(null, Color.BLACK, new BasicStroke(1), pageWidth));    //元素右侧竖线
              report.setReportHeader(reportHeader);
             
              //字段内容元素
              TextFieldElementFactory data = new TextFieldElementFactory();
              data.setName(columnNames[i]);
 
              data.setColor(Color.BLACK);
              data.setAbsolutePosition(new Point2D.Float((pageWidth
                     / (columnNames.length))
                     * i, 0));
              data.setMinimumSize(new FloatDimension(pageWidth
                     / (columnNames.length), ROW_HEIGHT));
              data.setHorizontalAlignment(ElementAlignment.CENTER);
 
              data.setVerticalAlignment(ElementAlignment.MIDDLE);
              data.setDynamicHeight(true);
              data.setWrapText(new Boolean(true));
              data.setNullString("-");    //如果字段内容为空Q显C的文本
              data.setFieldname(columnNames[i]);
               report.getItemBand().addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), 0));
              report.getItemBand().addElement(data.createElement());
               report.getItemBand().addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), -100));
               report.getItemBand().addElement(StaticShapeElementFactory.createVerticalLine(null, Color.BLACK, new BasicStroke(1), data.getAbsolutePosition().getX()));
               report.getItemBand().addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), 0));
           }// end for(int i=0;i<columnNames.length;i++)
          
           //最后的竖线
           report.getItemBand().addElement(StaticShapeElementFactory.createVerticalLine(null, Color.BLACK, new BasicStroke(1), pageWidth));
          
           PageFooter footer = new PageFooter();
          
           //讄号
           PageOfPagesFunction pageFunction = new PageOfPagesFunction("PAGE_NUMBER");    //构造一个页号函数对?br />            pageFunction.setFormat("{0} / {1}?);    //讄号昄格式Q此处显C的格式?#8220;1/5?#8221;Q?br />            report.addExpression(pageFunction);
          
           TextFieldElementFactory pageCount = new TextFieldElementFactory();
           pageCount.setFieldname("PAGE_NUMBER");
           pageCount.setColor(Color.black);
           pageCount.setAbsolutePosition(new Point2D.Float(0, 0));
           pageCount.setMinimumSize(new FloatDimension(pageWidth, 0));
           pageCount.setHorizontalAlignment(ElementAlignment.RIGHT);
           pageCount.setVerticalAlignment(ElementAlignment.MIDDLE);
           pageCount.setDynamicHeight(true);
           footer.addElement(pageCount.createElement());
           report.setPageFooter(footer);
          
           ReportFooter reportFooter = new ReportFooter();
           reportFooter.addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), 0));
           report.setReportFooter(reportFooter);
 
2、XML方式实现报表格式定义
对于单的报表Q我们可以用代码来实现Q但对于复杂的报表,代码可能无能ؓ力了
 Q虽然也可以实现Q但对于M码的人来说可能将是场NQ,那么我们可以通过定义XML来实现报表格式的定义?br />  q种Ҏ非常方便而且清晰?br /> JFreeReport定义了两UXML实现Ҏ。这里我只介l一U,因ؓ另一U我没有用过。我直接通过例子来解释如何实玎ͼ
<?xml version="1.0" encoding="GB2312"?>
<report name="My Report" pageformat="A4" leftmargin="40" rightmargin="40">
  <configuration>
    <property name="com.jrefinery.report.preview.PreferredWidth">1024</property>
    <property name="com.jrefinery.report.preview.PreferredHeight">768</property>
  </configuration>
   
  <!-- 报头  -->
  <reportfooter height="20" fontname="宋体" fontsize="12">
  </reportfooter>
   
  <!-- 首  -->
  <pageheader fontname="宋体" fontsize="12">
    <!-- 文本域,用于昄表数据中某列的内?nbsp; -->
    <!-- x,y: 为坐标点Q以首区域的左上角?0, 0)点)  -->
    <!-- width, height: 为文本域的宽度和高度Q如果ؓ数值则表示为绝对尺寸,如果为百分数Q则自动以百分比方式调整寸大小  -->
    <!-- alignment: 排列方式 -->
    <!-- fieldname: 域名Q即数据域的列名 -->
    <!-- nullstring: 当数据域内容为空时显C的字符串内?-->
    <!-- alignment: 水^排列方式centerQleft或right -->
    <!-- vertical-alignment: 竖直排列方式top、middle或bottom -->
    <!-- dynamic: 是否动态调整单元格高度Q如果ؓtrueQ当文本内容不以在当前寸中显C时自动增加单元格高度 -->
    <string-field x="0" y="0" width="100%" height="30" alignment="center" fontname="黑体" fontsize="15" fieldname="report.title" nullstring=""></string-field>
   
    <!-- 标签域,用于在报表中昄固定文本内容  -->
    <label x="0" y="20" width="100%" height="20" alignment="center" fontname="黑体" fontsize="15">报表</label>
        
    <label x="5%" y="80" width="100%" height="20" alignment="left">l计旉Q?lt;/label>
    <string-field x="90" y="80" width="30%" height="18" alignment="left" fieldname="report.time" nullstring=""/>
    
    <label x="70%" y="80" width="100%" height="20">l计日期Q?lt;/label>
   
    <!-- 旉域,用于昄旉  -->
    <!-- report.date: 下面<function>中定义的函数Q显C当前时?-->
    <!-- format: 日期格式 -->
    <date-field fieldname="report.date" format="yyyy/M/d" x="0%" y="80" width="95%" height="20" alignment="right"></date-field>
  </pageheader>
   
  <!-- 尾  -->
  <pagefooter height="20" fontname="宋体" fontsize="12">
    <string-field fieldname="pageXofY" x="0" y="4" width="100%" height="18" alignment="right"/>
  </pagefooter>
   
  <!-- 分组  -->
  <groups>
    <group name="group1">
      <!-- 分组?-->
      <groupheader fontname="宋体" fontsize="10.5">
        <label x="0%" y="5" width="20%" height="40" alignment="center" vertical-alignment="middle"> l?nbsp; ?</label>
        <rectangle x="0%" y="0" width="20%" height="50" color="#000000" draw="true" fill="false"/>
               
        <label x="20%" y="5" width="40%" height="20" alignment="center" vertical-alignment="middle">?q??lt;/label>
       
        <!-- 囑ŞQ矩?-->
        <!-- color: 颜色 -->
        <!-- fill: 是否填充 -->
        <rectangle x="20%" y="0" width="40%" height="25" color="#000000" draw="true" fill="false"/>       
        <label x="20%" y="30" width="20%" height="20" alignment="center" vertical-alignment="middle">??lt;/label>
        <rectangle x="20%" y="25" width="20%" height="25" color="#000000" draw="true" fill="false"/>
        <label x="40%" y="30" width="20%" height="20" alignment="center" vertical-alignment="middle">占比(%)</label>
        <rectangle x="40%" y="25" width="20%" height="25" color="#000000" draw="true" fill="false"/>
        <label x="60%" y="5" width="40%" height="20" alignment="center" vertical-alignment="middle">?q??lt;/label>
        <rectangle x="60%" y="0" width="40%" height="25" color="#000000" draw="true" fill="false"/>
        <label x="60%" y="30" width="20%" height="20" alignment="center" vertical-alignment="middle">??lt;/label>
        <rectangle x="60%" y="25" width="20%" height="25" color="#000000" draw="true" fill="false"/>
        <label x="80%" y="30" width="20%" height="20" alignment="center" vertical-alignment="middle">占比(%)</label>
        <rectangle x="80%" y="25" width="20%" height="25" color="#000000" draw="true" fill="false"/>
      </groupheader>
      <!-- 可以q有分组?lt;groupfooter> -->
    </group>
  </groups>
   
  <!-- 数据?nbsp; -->
  <items fontname="宋体" fontsize="12"> 
   
    <!-- 囑ŞQ直U?-->
    <line x1="0" y1="0" x2="0" y2="100%"/>
       
    <string-field fieldname="q度体检l论" x="0%" y="5" width="20%" height="20" alignment="center" vertical-alignment="middle" nullstring="" dynamic="true"/>
    <line x1="20%" y1="0" x2="20%" y2="100%"/><!-- l论 -->
    <string-field fieldname="上年? x="20%" y="5" width="20%" height="20" alignment="center" vertical-alignment="middle" nullstring="" dynamic="true"/>
    <line x1="40%" y1="0" x2="40%" y2="100%"/><!-- 上年度h?-->
    <string-field fieldname="上年?%)" x="40%" y="5" width="20%" height="20" alignment="center" vertical-alignment="middle" nullstring="" dynamic="true"/>
    <line x1="60%" y1="0" x2="60%" y2="100%"/><!-- 上年度占?-->
    <string-field fieldname="本年? x="60%" y="5" width="20%" height="20" alignment="center" vertical-alignment="middle" nullstring="" dynamic="true"/>
    <line x1="80%" y1="0" x2="80%" y2="100%"/><!-- 本年度h?-->
    <string-field fieldname="本年?%)" x="80%" y="5" width="20%" height="20" alignment="center" vertical-alignment="middle" nullstring="" dynamic="true"/>
    <line x1="100%" y1="0" x2="100%" y2="100%"/><!-- 本年度占?-->
       
    <line x1="0" y1="100%" x2="100%" y2="100%"/>       
  </items>
   
  <!-- 函数定义  -->
  <functions>
     <!-- 昄当前旉的函数用?nbsp; -->
    <property-ref name="report.date"/>

    <!-- 昄当前늠的函数用?-->
    <function name="PageNumber" class="org.jfree.report.function.PageFunction" deplevel="1"/>

    <!-- 昄总页数的函数用法 -->
    <function name="PageTotal" class="org.jfree.report.function.PageTotalFunction" deplevel="1"/>
   
    <!-- 表达式,ơ表辑ּ定义一个显C页码格式的用法 -->
    <expression name="pageXofY" class="org.jfree.report.function.TextFormatExpression">
      <properties>
        <property name="pattern">{0}/{1}?lt;/property>
        <property name="field[0]">PageNumber</property>
        <property name="field[1]">PageTotal</property>
      </properties>
    </expression>
  </functions>
</report>
 另一U方法我没有用过Q以后了解了再补充?br /> 四、输?br /> 定义完JFreeReport对象Q就可以q行输出了。下面介l几U输出方法?br /> 1、通过预览H口对象输出
该方式只能在Application环境中用。通过预览H口Q用户可以自行选择打印、排版或生成各种格式的文Ӟq也是我们在Application中常用的方式。代码示例如下:
PreviewDialog preview = null;    //预览H口对象
  try ...{
           // 生成的报表攑ֈ预览H口?br />            preview = new PreviewDialog(report);
       } catch (ReportProcessingException e) ...{
           e.printStackTrace();
       }
 
   if (preview != null) ...{
           preview.pack();
           preview.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
           // 讄报表起始点及长宽
           preview.setLocation(new Point(0, 0));
           Dimension screen = getToolkit().getScreenSize();
           int width = (int) (screen.getWidth() - 2 * preview.getLocation().x);
           int height = (int) (screen.getHeight());
           preview.setSize(new Dimension(width, height));
 
           // 昄报表预览H口
           preview.setVisible(true);
           preview.requestFocus();
           // preview.addWindowListener(new CloseHandler());
       }

2、输出HTML文本?br /> q种Ҏ可以报表输ZؓHTML语言形成的文本,q种方式适用于在览器中昄报表内容。示例代码如下:
ByteArrayOutputStream bo = null;
      StreamHtmlFilesystem filesystem = null;
       try ...{
           // 生成Html
           bo = new ByteArrayOutputStream();
           final HtmlProcessor processor = new HtmlProcessor(report);
           processor.setGenerateBodyFragment(true);
           processor.setEncoding ("UTF-8");
           filesystem = new StreamHtmlFilesystem(bo);
           processor.setFilesystem(filesystem);
           processor.processReport();
           String htmlCode = new String(bo.toByteArray(), "UTF-8");
           bo.close();
           bo = null;
           filesystem.close();
           filesystem = null;
       } catch(FileNotFoundException e) ...{
           e.printStackTrace();
       } catch(SecurityException e) ...{
           e.printStackTrace();
       } catch (ReportProcessingException e) ...{
           e.printStackTrace();
       } catch (IOException e) ...{
           e.printStackTrace();
       }
3、输出PDF文g
PDF的输出方式跟HTML的差不多Q但有一点,JFreeReport本n无法输出中文字符Q如果想要输Z文,我没有找到更好的ҎQ所以更改了JFreeReport包中org.jfree.report.modules.output.support.itext.BaseFontSupportcȝ源码Q将
final BaseFont f = BaseFont.createFont(BaseFont.HELVETICA, stringEncoding, embedded,
false, null, null)中的BaseFont.HELVETICA改ؓ“STSong-Light”,另外需要到www.lowagie.com/iText|站下蝲iText.jar包以支持STSong-Light字体~码Q这P可以输Z文了。示例代码如下所C:
q里注意Q必dtarget的字体编码设?#8220;UniGB-UCS2-H”而且使用Java1.5q行~译
       PDFOutputTarget target = null;
   try ...{
           //生成pdf
           FileOutputStream fos = new FileOutputStream("PDF.pdf");
           target = new PDFOutputTarget(fos);
           target.configure(report.getReportConfiguration());
           target.setFontEncoding("UniGB-UCS2-H");
           target.open();
   
           final PageableReportProcessor proc = new PageableReportProcessor(report);
           proc.setOutputTarget(target);
           proc.processReport();
           target.close();  
           target = null;
       } catch(FileNotFoundException e) ...{
           e.printStackTrace();
       } catch(SecurityException e) ...{
           e.printStackTrace();
       } catch (OutputTargetException e) ...{
           e.printStackTrace();
       } catch (ReportProcessingException e) ...{
           e.printStackTrace();
       }

以上是我对JFreeReportlg的ȝQ写的不好希望对大家有所
 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2056738



KE 2008-04-02 19:33 发表评论
]]>
JFreeReport介http://www.aygfsteel.com/keweibo/articles/190440.htmlKEKEWed, 02 Apr 2008 11:32:00 GMThttp://www.aygfsteel.com/keweibo/articles/190440.htmlhttp://www.aygfsteel.com/keweibo/comments/190440.htmlhttp://www.aygfsteel.com/keweibo/articles/190440.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/190440.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/190440.html JFreeReport是JFreeReport.OrgZLGPL授权协议提供的一lJava包,用于生成各类报表QJFreeReport的数据l自Swinglg的TableModel
接口Q用基于XML的报表格式定义文件对报表q行格式化。JFreeReport生成的报表可以分预览、打华ͼ而且支持导出为多U格式的文g
如pdf、Excel、CSV、Html{。更重要的是QJFreeReport不仅支持ZC/Sl构的系l,而且支持ZB/Sl构的系l中的在U报表显C?br /> 更具体的关于JFreeReport的介l请大家讉KJFreeReport的官方网站JFree.org?br />   
  1 环境预备
  1.1 JFreeReportlg
  
  请大家到http://prdownloads.sourceforge.net/jfreereport/jfreereport-0.8.4_7.zip?download下蝲JFreeReportlgQ?br />  下蝲的是一个ZIP文gQ然后将ZIP文g解压~到c:\jfreereportQ后面的章节中将使用Qjfreereport_homeQ表C个目录)目录下?br />   
  1.2 JFreeReport扩展lg
  
  请大家到http://www.jfree.org/jfreereport/jfreereport-ext-0.8.4_7.zip下蝲JFreeReport扩展lgQ他用于支持JFreeReportlg?br />  成的报表的在U显C。请大蝲后解压羃到c:\jfreereport-ext目录下(后面的章节中用%jfreereport_ext_homeQ表C个目录)
  
  1.3 Ant工具
  
  Apache公司提供的一个基于JAVA的自动化脚本引擎Q请大家到http://ant.apache.org/下蝲ant的可执行文gQ关于如何用ant请大家查
 看ant的帮助文档或者http://ant.apache.org/|站上的在线帮助文档。示例中主要是用ant来负责编译java代码?br />   
  1.4 作者提供的代码
  
  Zq行本文中作者提到的例子和相兌源文Ӟ请大家下载作者提供的vivianjDemo.zip文g和中文{换工具gb2unicode.jar?br />  然后解压~到Qjfreereport_homeQ\vivianjDemoQ后面的章节中将使用Qdemo _homeQ表C个目录)目录下?br />   
  2 JFreeReport生成报表的基本步?br />   我们首先演示一个简单的例子Q说明用JFreeReport生成报表的一些必要的步骤?br />   
  2.1 实例说明
  
  在这个例子中Q我们将循环生成100条数据放入TableModel中,然后使用JFreeReportlg提供的预览功能在屏幕上显C生成的报表?br />   
  QLQ?Z化,q里仅仅是逐条昄数据Q不作Q何修饰和l计工作Q所以也不用报表格式定义文件?br />   
  2.2 代码~制
  
  整个演示实例QHelloWorld.javaQ的代码和相x释如下,假如你执行了1.3中规定的步骤Q?br />  你可以在Qdemo _homeQ?src/org/vivianj/jfreereport/看到q个文g?br />   
  /**
  * HelloWorld.java
  */
  
  package org.vivianj.jfreereport;
  
  import java.awt.Color;
  import java.awt.event.WindowAdapter;
  import java.awt.event.WindowEvent;
  import java.awt.geom.Point2D;
  import javax.swing.table.DefaultTableModel;
  import javax.swing.table.TableModel;
  
  import org.jfree.report.Boot;
  import org.jfree.report.ElementAlignment;
  import org.jfree.report.JFreeReport;
  import org.jfree.report.ReportProcessingException;
  import org.jfree.report.elementfactory.TextFieldElementFactory;
  import org.jfree.report.modules.gui.base.PreviewDialog;
  import org.jfree.ui.FloatDimension;
  
  /**
  * 使用JFreeReport生成报表的简单例子,用于演示使用JFreeReport生成报表的一些基本步?br />   *
  * 本例子中Qؓ了简化操作,报表定义是用java直接~码
  *
  * @ 作?Q?bookman
  */
  public class HelloWorld
  {
  /**
  * 处理H口关闭事g
  */
  protected static class CloseHandler extends WindowAdapter
  {
  public void windowClosing(final WindowEvent event)
  {
  System.exit(0);
  }
  }
  
  /**
  * 创徏和显C简单的报表
  */
  public HelloWorld()
  {
  // 获得创徏报表需要用到的数据
  final TableModel data = createData();
  //获得报表要用到的报表定义内容
  final JFreeReport report = createReportDefinition();
  //报表定义和数据l合
  report.setData(data);
  try
  {
  //生成的报表攑ֈ预览H口?br />   final PreviewDialog preview = new PreviewDialog(report);
  preview.addWindowListener(new CloseHandler());
  preview.pack();
  //昄报表预览H口
  preview.setVisible(true);
  }
  catch (ReportProcessingException e)
  {
  System.out.println(e);
  }
  
  }
  
  /**
  * 创徏生成报表需要用到的数据
  *
  * @q回一个TableModel实例
  */
  private TableModel createData()
  {
  
  final Object[] columnNames = new String[]{"Column1", "Column2"};
  final DefaultTableModel result = new DefaultTableModel(columnNames, 100);
  int rownum = 0;
  int colnum = 0;
  for (;rownum < 100 ; rownum++)
  {
  result.setValueAt("say Hello " + rownum + "?, rownum, 0);
  result.setValueAt("say World " + rownum + "? , rownum, 1);
  }
  
  return result;
  
  }
  
  /**
  * 创徏一个报表定?br />   *
  * @q回一个报表定义实?br />   */
  private JFreeReport createReportDefinition()
  {
  
  final JFreeReport report = new JFreeReport();
  report.setName("A Very Simple Report");
  /**
  * 定义要显C报表第一列的样式
  */
  TextFieldElementFactory factory = new TextFieldElementFactory();
  factory.setName("T1");
  factory.setAbsolutePosition(new Point2D.Float(0, 0));
  factory.setMinimumSize(new FloatDimension(150, 20));
  factory.setColor(Color.black);
  factory.setHorizontalAlignment(ElementAlignment.LEFT);
  factory.setVerticalAlignment(ElementAlignment.MIDDLE);
  factory.setNullString("-");
  factory.setFieldname("Column1");
  report.getItemBand().addElement(factory.createElement());
  /**
  * 定义要显C报表第二列的样?br />   */
  factory = new TextFieldElementFactory();
  factory.setName("T2");
  factory.setAbsolutePosition(new Point2D.Float(200, 0));
  factory.setMinimumSize(new FloatDimension(150, 20));
  factory.setColor(Color.black);
  factory.setHorizontalAlignment(ElementAlignment.LEFT);
  factory.setVerticalAlignment(ElementAlignment.MIDDLE);
  factory.setNullString("-");
  factory.setFieldname("Column2");
  report.getItemBand().addElement(factory.createElement());
  /**
  * q回一个报表定义的实例
  */
  return report;
  
  }
  
  public static void main(final String[] args)
  {
  // 初始化JFreeReport
  Boot.start();
  
  //调用演示实例
  new HelloWorld();
  }
  
  }
  
  2.3 q行例子
  
  假如你执行了1.3中规定的步骤Q你可以q入命o行界面,然后q入Qdemo_homeQ目录下Q修改setenv.cmd中的相关讄Q?br />  执行serenv.cmd讄环境变量。执行java org.vivianj.jfreereport.HelloWorld查看q行l果。下面这个图片是
 作者执行后l果的屏q截图:
  
  大家可以看到QJFreeReport已经自动帮我们实C分页。上面这个图片显C的是第一늚数据Q你可以通过工具栏中的查
 看其它页面中的内宏V?br />   
  2.4 基本步骤解释
  
  使用JFreeReport生成报表通常需要以下三个基本步骤:
  
  生成可通过TableModel接口讉K的数据,如本例中的createDataҎ完成的功?br />   生成一个JFreeReport实例Q他定义了我们如何格式化昄数据Q如本例中的createReportDefinitionҎ完成的功?br />   数据和JFreeReport实例q接hQƈ且将该JFreeReport实例传给PreviewDialog的一个实例显C给用户
  
  3 使用JFreeReport生成复杂报表
  3.1 报表定义文g
  
  报表定义文g是JFreeReport生成复杂报表的重要文Ӟ他就是一个XML文档Q主要描q如何用指定的格式生成复杂的报表,
 同时使用报表定义文g也可以在报表格式需要修Ҏ只需要更新该报表定义文gQ而不需要修改应用代码?br />   
  3.1.1 报表定义文g分类
  
  JFreeReport中用了两种ZXML的报表定义文件来保存报表定义信息Q简单格式和扩展格式Q很明显,单格式不能够完全
 的描qJFreeReport支持的全部报表定义信?但是他更易于上手使用。而扩展格式则能够对JFreeReport的报表定义提?br />  完整的支持,但是扩展格式太具体了Q不太轻易用?br />   
  关于q两U报表定义格式文件所

KE 2008-04-02 19:32 发表评论
]]>
վ֩ģ壺 | ְ| | β| ɽ| ̨| ʱ| Զ| | ƽ| | | | ֹ| ½| ɽ| ͭϿ| | | | | γ| ̽| | | | | ƽ| | | | ˹| | г| | ٰ| ĺ| | | | ͨ|