<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 78,  comments - 48,  trackbacks - 0

    摘要:

    目前基于Web的精確打印解決方案主要有兩類:一是加強客戶端的邏輯;二是在服務(wù)器端產(chǎn)生適于精確打印的文件。流行的打印工具中用Applet實現(xiàn)、用瀏覽器插件實現(xiàn)或是開發(fā)嵌入瀏覽器的客戶端的方法屬于第一類;而在服務(wù)器端產(chǎn)生圖片文件、pdf或ps等.精確打印文件的方法屬于第二類。下面就給出一個servlet通過模板生成pdf文件的實現(xiàn).選擇的報表工具是jfreereport.
    首先說些廢話。
    基于Java開發(fā)的Web的應(yīng)用系統(tǒng)的打印問題一直困擾著我。原因是基于Web的應(yīng)用是瘦客戶端應(yīng)用,邏輯集中在服務(wù)器上,而打印是基于客戶端的行為。

    目前基于Web的精確打印解決方案主要有兩類:一是加強客戶端的邏輯;二是在服務(wù)器端產(chǎn)生適于精確打印的文件。
    流行的打印工具中用Applet實現(xiàn)、用瀏覽器插件實現(xiàn)或是開發(fā)嵌入瀏覽器的客戶端的方法屬于第一類;而在服務(wù)器端產(chǎn)生圖片文件、pdf或ps等

    精確打印文件的方法屬于第二類。

    以上流行的解決方案的比較:

    方案                打印效果                        瀏覽器依賴                部署代價                        維護代價
    Applet實現(xiàn)        頁面控制困難                需要java plug-in插件                無需客戶端部署                客戶端調(diào)整
    瀏覽器插件實現(xiàn)        同本地打印,效果好        依賴特定類型版本的瀏覽器        客戶端動態(tài)部署                客戶端調(diào)整
    圖片文件實現(xiàn)        頁面控制困難                無                        無                        無
    pdf文件實現(xiàn)        同本地打印,效果好        需要acroreader插件                無需客戶端部署                無

    pdf文件是流行的文件格式,瀏覽器和pdf閱讀器已成為客戶端必備的安裝內(nèi)容。對于通用的打印解決方案我認為pdf文件的方式具有更大的靈活性和可用性。

    廢話到此為止,下面就給出一個servlet通過模板生成pdf文件的實現(xiàn):

    我選擇的是報表工具是jfreereport,當(dāng)然若簡單的文本可以使用iText直接產(chǎn)生。

    1. jfreereport與was5.0.x的集成

    was5.0.x依據(jù)j2ee 1.3規(guī)范,jaxp/dom/sax的版本分別為1.1/2/2,與jfreereport依賴的gunjaxp.jar中的一致,其他的包也不存在沖突。因此可以將這些

    包直接加到Web項目的包目錄/WEB-INF/lib中。
    jfreereport的包很多,與讀取模板、生成報表和生成pdf文件相關(guān)的有:
    gnujaxp.jar
    itext-1.2.2.jar
    iTextAsian.jar
    jcommon-0.9.7.jar
    jfreereport-0.8.4_11-core.jar
    jfreereport-0.8.4_11-misc-configstore-base.jar
    jfreereport-0.8.4_11-output-pageable-base.jar
    jfreereport-0.8.4_11-output-pageable-pdf.jar
    jfreereport-0.8.4_11-output-support-itext.jar
    jfreereport-0.8.4_11-output-support-pagelayout.jar
    jfreereport-0.8.4_11-parser-base.jar
    jfreereport-0.8.4_11-parser-ext.jar
    pixie-0.8.1.jar

    jfreereport中自帶的itext-1.02b.jar版本低,可以替換為新版本,iTextAsian.jar是生成中文所必須的。


    2. 編碼和漢字問題
    由于我的環(huán)境是英文系統(tǒng)(Win2k en version + sp4)加裝中文支持,為了在開發(fā)環(huán)境中支持中文必須使用UTF-8編碼。因此需要對jfreereport中的一些參數(shù)進行配置。
    需要將org\jfree\report\modules\output\support\itext\configuration.properties文件中的org.jfree.report.modules.output.support.itext.Encoding參數(shù)設(shè)為GBK (或GB18030,請量力而行,我的環(huán)境未安裝GB18030的支持)。
    需要將顯示中文的區(qū)域的字體和編碼分別設(shè)為"STSong-Light"和"UniGB-UCS2-H"。此字體和編碼是生成pdf文件時顯示中文所必須的,與jfreereport的GUI工具的顯示無關(guān)。

    3. 程序示例
    我選用了jfreereport中的Java Look and Feel Graphics Repository的例子,并將部分內(nèi)容換為中文。以下是直接生成pdf的servlet代碼和我變更的報表模板。



    //- GenPDFByJfreereportTemplateServlet.java

    package acme.web.servlets;

    import java.io.IOException;
    import java.net.URL;

    import javax.servlet.Servlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.jfree.report.Boot;
    import org.jfree.report.JFreeReport;
    import org.jfree.report.demo.SwingIconsDemoTableModel;
    import org.jfree.report.modules.output.pageable.base.PageableReportProcessor;
    import org.jfree.report.modules.output.pageable.pdf.PDFOutputTarget;
    import org.jfree.report.modules.parser.base.ReportGenerator;
    import org.jfree.report.util.Log;
    import org.jfree.report.util.ReportConfiguration;
    import org.jfree.xml.ElementDefinitionException;

    /**
    * @version         1.0
    * @author         Lee S
    */
    public class GenPDFByJfreereportTemplateServlet extends HttpServlet implements Servlet
    {
            /**
            * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
            */
            public void doGet(HttpServletRequest req, HttpServletResponse resp)
                    throws ServletException, IOException
            {
                    resp.setContentType("application/pdf");

                    ServletOutputStream out = resp.getOutputStream();
                    
                    try
                    {
                            // initialize JFreeReport
                            Boot.start();

                            ReportConfiguration.getGlobalConfig().setLogLevel("Error");
                            // update the log system to use the new settings ...
                            Log.getJFreeReportLog().init();

                            final URL in =
                                    getClass().getResource("/acme/web/resources/swing-icons.xml");

                            if (in == null)
                            {
                                    throw new Exception("swing-icons.xml can't be found.");
                            }

                            final JFreeReport report = parseReport(in);
                            report.setData(new SwingIconsDemoTableModel());

                            PDFOutputTarget target =
                                    new PDFOutputTarget(out, report.getDefaultPageFormat());
                            target.configure(report.getReportConfiguration());
                            
                            target.open();
                            PageableReportProcessor proc = new PageableReportProcessor(report);
                            proc.setOutputTarget(target);
                            proc.processReport();
                            target.close();


                    }
                    catch (Exception ex)
                    {
                            System.err.println("Generate PDF failed: " + ex);
                    }
                    finally
                    {
                            try
                            {
                                    out.close();
                            }
                            catch (Exception e)
                            {
                                    System.err.println("Output PDF failed: " + e);
                            }
                    }

            }

            /**
            * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
            */
            public void doPost(HttpServletRequest req, HttpServletResponse resp)
                    throws ServletException, IOException
            {
                    doGet(req, resp);
            }


            /**
             * Reads the report from the swing-icons.xml report template.
             *
             * @param templateURL The template location.
             *
             * @return A report.
             * @throws ElementDefinitionException if the report generator encountered an error.
             * @throws IOException if there was an IO error while reading from the URL.
             */
            private JFreeReport parseReport(final URL templateURL)
                     throws IOException, ElementDefinitionException
            {
              final ReportGenerator generator = ReportGenerator.getInstance();
              return generator.parseReport(templateURL);
            }


    }




    //- swing-icons.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE report-definition
       PUBLIC "-//JFreeReport//DTD report definition//EN//extended"
              "http://jfreereport.sourceforge.net/extreport.dtd">

    <!-- ***************************************************************** -->
    <!-- *  Swing-Icons.XML                                              * -->
    <!-- *  A sample report definition used as an introduction to        * -->
    <!-- *  JFreeReport.                                                 * -->
    <!-- ***************************************************************** -->

    <report-definition name="First Report">

      <!-- ************************ -->
      <!-- * PARSER CONFIGURATION * -->
      <!-- ************************ -->
      <parser-config>
        <object-factory class="org.jfree.report.modules.parser.ext.factory.objects.DefaultClassFactory"/>
        <element-factory class="org.jfree.report.modules.parser.ext.factory.elements.DefaultElementFactory"/>
        <stylekey-factory class="org.jfree.report.modules.parser.ext.factory.stylekey.DefaultStyleKeyFactory"/>
        <stylekey-factory class="org.jfree.report.modules.parser.ext.factory.stylekey.PageableLayoutStyleKeyFactory"/>
        <template-factory class="org.jfree.report.modules.parser.ext.factory.templates.DefaultTemplateCollection"/>
        <datasource-factory class="org.jfree.report.modules.parser.ext.factory.datasource.DefaultDataSourceFactory"/>
      </parser-config>

      <!-- ************************ -->
      <!-- * REPORT CONFIGURATION * -->
      <!-- ************************ -->
      <report-config>
        <defaultpageformat orientation="portrait"
          pageformat="LETTER"
          topmargin="72"
          bottommargin="72"
          leftmargin="72"
          rightmargin="72"/>
      </report-config>

      <!-- ********** -->
      <!-- * STYLES * -->
      <!-- ********** -->
      <styles>
        <style name="medium-line">
          <compound-key name="min-size">
            <basic-object name="height">0.0</basic-object>
            <basic-object name="width">-100.0</basic-object>
          </compound-key>
          <basic-key name="paint">black</basic-key>
          <basic-key name="stroke" class="java.awt.BasicStroke">0.5</basic-key>
          <basic-key name="draw-shape">true</basic-key>
          <basic-key name="scale">true</basic-key>
        </style>

        <style name="background-rectangle">
          <compound-key name="absolute_pos">
            <basic-object name="x">0.0</basic-object>
            <basic-object name="y">0.0</basic-object>
          </compound-key>
          <compound-key name="min-size">
            <basic-object name="height">-100.0</basic-object>
            <basic-object name="width">-100.0</basic-object>
          </compound-key>
          <basic-key name="fill-shape">true</basic-key>
          <basic-key name="scale">true</basic-key>
        </style>
      </styles>

      <!-- ********************** -->
      <!-- * REPORT DESCRIPTION * -->
      <!-- ********************** -->
      <report-description>

        <!-- ================= -->
        <!-- = REPORT HEADER = -->
        <!-- ================= -->
        <report-header name="report-header-band">
          <style>
            <compound-key name="min-size">
              <basic-object name="height">112.0</basic-object>
              <basic-object name="width">0.0</basic-object>
            </compound-key>
          </style>

          <default-style>
            <basic-key name="font">SansSerif</basic-key>
            <basic-key name="font-size">10</basic-key>
            <basic-key name="valignment">bottom</basic-key>
          </default-style>

          <element name="title1" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">2.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">18.0</basic-object>
                <basic-object name="width">-100.0</basic-object>
              </compound-key>
              <basic-key name="alignment">center</basic-key>
              <basic-key name="font-size">18</basic-key>
              <basic-key name="font-bold">true</basic-key>
            </style>
            <template references="label">
              <basic-object name="content">Java Look and Feel Graphics Repository</basic-object>
            </template>
          </element>

          <element name="description1" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">32.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">10.0</basic-object>
                <basic-object name="width">-100.0</basic-object>
              </compound-key>
            </style>

            <template references="label">
              <basic-object name="content">This report lists the icons contained in the Java Look and Feel Graphics Repository.</basic-object>
            </template>
          </element>

          <element name="description2" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">44.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">10.0</basic-object>
                <basic-object name="width">-100.0</basic-object>
              </compound-key>
            </style>
            <template references="label">
              <basic-object name="content">For more information about the repository, refer to:</basic-object>
            </template>
          </element>

          <element name="url1" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">68.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">10.0</basic-object>
                <basic-object name="width">-100.0</basic-object>
              </compound-key>
              <basic-key name="alignment">center</basic-key>
              <basic-key name="font">Monospaced</basic-key>
              <basic-key name="font-size">9</basic-key>
            </style>
            <template references="label">
              <basic-object name="content">http://developer.java.sun.com/developer/techDocs/hi/repository/</basic-object>
            </template>
          </element>

          <element name="description3" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">92.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">10.0</basic-object>
                <basic-object name="width">-100.0</basic-object>
              </compound-key>
            </style>
            <template references="label">
              <basic-object name="content">The design of this report is described in the JFreeReport PDF documentation.</basic-object>
            </template>
          </element>

        </report-header>

        <!-- ================= -->
        <!-- = REPORT FOOTER = -->
        <!-- ================= -->
        <report-footer name="report-footer-band">

          <style>
            <compound-key name="min-size">
              <basic-object name="height">30.0</basic-object>
              <basic-object name="width">0.0</basic-object>
            </compound-key>
          </style>

          <default-style>
            <basic-key name="font">SansSerif</basic-key>
            <basic-key name="font-size">12</basic-key>
            <basic-key name="font-bold">true</basic-key>
            <basic-key name="valignment">bottom</basic-key>
          </default-style>

          <element name="rect1" type="shape/generic">
            <style>
              <extends name="background-rectangle"/>
              <basic-key name="paint">#ccffcc</basic-key>
            </style>
            <template references="rectangle"/>
          </element>

          <element type="shape/generic">
            <style>
              <extends name="medium-line"/>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">0.0</basic-object>
              </compound-key>
            </style>
            <template references="horizontal-line"/>
          </element>

          <element type="shape/generic">
            <style>
              <extends name="medium-line"/>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">30.0</basic-object>
              </compound-key>
            </style>
            <template references="horizontal-line"/>
          </element>

          <element name="reportTotalLabel" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">10.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">12.0</basic-object>
                <basic-object name="width">-50.0</basic-object>
              </compound-key>
              <basic-key name="alignment">left</basic-key>
            </style>
            <template references="label">
              <basic-object name="content">REPORT TOTAL:</basic-object>
            </template>
          </element>

          <element name="reportCountField" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">-50.0</basic-object>
                <basic-object name="y">10.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">9.0</basic-object>
                <basic-object name="width">-30.0</basic-object>
              </compound-key>
              <basic-key name="alignment">center</basic-key>
              <basic-key name="font-size">9</basic-key>
            </style>
            <template references="number-field">
              <basic-object name="field">OverallCount</basic-object>
              <basic-object name="format">#0</basic-object>
              <basic-object name="nullValue">-</basic-object>
            </template>
          </element>

          <element name="reportSumField" type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">-80.0</basic-object>
                <basic-object name="y">10.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">9.0</basic-object>
                <basic-object name="width">-20.0</basic-object>
              </compound-key>
              <basic-key name="font-size">9</basic-key>
              <basic-key name="alignment">right</basic-key>
              <basic-key name="valignment">bottom</basic-key>
            </style>
            <template references="number-field">
              <basic-object name="field">OverallSum</basic-object>
              <basic-object name="format">#,##0</basic-object>
              <basic-object name="nullValue">-</basic-object>
            </template>
          </element>
        </report-footer>

        <!-- =============== -->
        <!-- = PAGE HEADER = -->
        <!-- =============== -->
        <page-header>

          <style>
            <compound-key name="min-size">
              <basic-object name="height">18.0</basic-object>
              <basic-object name="width">0.0</basic-object>
            </compound-key>
            <basic-key name="display-on-firstpage">false</basic-key>
            <basic-key name="display-on-lastpage">true</basic-key>
          </style>

          <default-style>
            <basic-key name="font-bold">true</basic-key>
            <basic-key name="font-size">9</basic-key>
            <basic-key name="font">SansSerif</basic-key>
            <basic-key name="font-italic">false</basic-key>
            <basic-key name="paint">black</basic-key>
            <basic-key name="valignment">bottom</basic-key>
          </default-style>

          <element type="shape/generic">
            <style>
              <extends name="background-rectangle"/>
              <basic-key name="paint">#afafaf</basic-key>
            </style>
            <template references="rectangle"/>
          </element>

          <element type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">0.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">14.0</basic-object>
                <basic-object name="width">-50.0</basic-object>
              </compound-key>
              <basic-key name="alignment">left</basic-key>
            </style>
            <template references="label">
              <basic-object name="content">Java Look and Feel Graphics Repository</basic-object>
            </template>
          </element>

          <element type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">-80.0</basic-object>
                <basic-object name="y">0.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">14.0</basic-object>
                <basic-object name="width">-20.0</basic-object>
              </compound-key>
              <basic-key name="alignment">right</basic-key>
            </style>
            <template references="date-field">
              <basic-object name="nullValue">-</basic-object>
              <basic-object name="format">d-MMM-yyyy</basic-object>
              <basic-object name="field">report.date</basic-object>
            </template>
          </element>

          <element type="shape/generic">
            <style>
              <extends name="medium-line"/>
              <basic-key name="stroke" class="java.awt.BasicStroke">2.0</basic-key>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">16.0</basic-object>
              </compound-key>
              <basic-key name="paint">#cfcfcf</basic-key>
            </style>
            <template references="horizontal-line"/>
          </element>
        </page-header>

        <!-- =============== -->
        <!-- = PAGE FOOTER = -->
        <!-- =============== -->
        <page-footer>

          <style>
            <basic-key name="display-on-lastpage">true</basic-key>
            <basic-key name="display-on-firstpage">true</basic-key>
            <compound-key name="min-size">
              <basic-object name="height">14.0</basic-object>
              <basic-object name="width">0.0</basic-object>
            </compound-key>
          </style>

          <default-style>
            <basic-key name="font-bold">false</basic-key>
            <basic-key name="font-size">9</basic-key>
            <basic-key name="font">SansSerif</basic-key>
            <basic-key name="font-italic">false</basic-key>
          </default-style>

          <element type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">3.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">9.0</basic-object>
                <basic-object name="width">-100.0</basic-object>
              </compound-key>
              <basic-key name="alignment">center</basic-key>
              <basic-key name="valignment">bottom</basic-key>
            </style>
            <template references="number-field">
              <basic-object name="nullValue">-</basic-object>
              <basic-object name="format">Page #0</basic-object>
              <basic-object name="field">PageNumber</basic-object>
            </template>
          </element>

        </page-footer>

        <!-- ========== -->
        <!-- = GROUPS = -->
        <!-- ========== -->
        <groups>

          <!-- category group -->
          <group name="Category">
            <fields>
              <field>Category</field>
            </fields>

            <group-header>
              <style>
                <compound-key name="min-size">
                  <basic-object name="height">30.0</basic-object>
                  <basic-object name="width">0.0</basic-object>
                </compound-key>
              </style>

              <default-style>
    <!-- use such font name & encoding for displaying chinese -->
                <basic-key name="font">STSong-Light</basic-key>
                <basic-key name="font-encoding">UniGB-UCS2-H</basic-key>
                <basic-key name="font-size">12</basic-key>
                <basic-key name="font-bold">true</basic-key>
                <basic-key name="font-italic">false</basic-key>
                <basic-key name="paint">black</basic-key>
                <basic-key name="alignment">left</basic-key>
                <basic-key name="valignment">bottom</basic-key>
              </default-style>

              <element type="shape/generic">
                <style>
                  <extends name="background-rectangle"/>
                  <basic-key name="paint">#ccccff</basic-key>
                </style>
                <template references="rectangle"/>
              </element>

              <element type="shape/generic">
                <style>
                  <extends name="medium-line"/>
                  <basic-key name="paint">black</basic-key>
                </style>
                <template references="horizontal-line"/>
              </element>

              <element type="shape/generic">
                <style>
                  <extends name="medium-line"/>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">0.0</basic-object>
                    <basic-object name="y">30.0</basic-object>
                  </compound-key>
                  <basic-key name="paint">black</basic-key>
                </style>
                <template references="horizontal-line"/>
              </element>

              <element type="text/plain">
                <style>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">0.0</basic-object>
                    <basic-object name="y">3.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">12.0</basic-object>
                    <basic-object name="width">92.0</basic-object>
                  </compound-key>
                </style>
                <template references="label">
                  <basic-object name="content">分類:</basic-object>
                </template>
              </element>

              <element type="text/plain">
                <style>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">96.0</basic-object>
                    <basic-object name="y">3.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">12.0</basic-object>
                    <basic-object name="width">120.0</basic-object>
                  </compound-key>
                </style>
                <template references="string-field">
                  <basic-object name="nullValue">-</basic-object>
                  <basic-object name="field">Category</basic-object>
                </template>
              </element>

              <element type="text/plain">
                <style>
                  <basic-key name="font-size">8</basic-key>
                  <basic-key name="font-bold">false</basic-key>
                  <basic-key name="font-italic">true</basic-key>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">0.0</basic-object>
                    <basic-object name="y">20.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">9.0</basic-object>
                    <basic-object name="width">-50.0</basic-object>
                  </compound-key>
                </style>
                <template references="label">
                  <basic-object name="content">名稱:</basic-object>
                </template>
              </element>

              <element type="text/plain">
                <style>
                  <basic-key name="font-size">8</basic-key>
                  <basic-key name="font-bold">false</basic-key>
                  <basic-key name="font-italic">true</basic-key>
                  <basic-key name="paint">black</basic-key>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">-50.0</basic-object>
                    <basic-object name="y">20.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">9.0</basic-object>
                    <basic-object name="width">-30.0</basic-object>
                  </compound-key>
                </style>
                <template references="label">
                  <basic-object name="content">圖標:</basic-object>
                </template>
              </element>

              <element type="text/plain">
                <style>
                  <basic-key name="font-size">8</basic-key>
                  <basic-key name="font-bold">false</basic-key>
                  <basic-key name="font-italic">true</basic-key>
                  <basic-key name="alignment">right</basic-key>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">-80.0</basic-object>
                    <basic-object name="y">20.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">9.0</basic-object>
                    <basic-object name="width">-20.0</basic-object>
                  </compound-key>
                </style>
                <template references="label">
                  <basic-object name="content">文件大小:</basic-object>
                </template>
              </element>
            </group-header>

            <group-footer>
              <style>
                <compound-key name="min-size">
                  <basic-object name="height">30.0</basic-object>
                  <basic-object name="width">0.0</basic-object>
                </compound-key>
                <basic-key name="pagebreak-before">false</basic-key>
              </style>
              <default-style>
                <basic-key name="font">SansSerif</basic-key>
                <basic-key name="font-size">11</basic-key>
                <basic-key name="font-bold">true</basic-key>
                <basic-key name="font-italic">false</basic-key>
                <basic-key name="valignment">bottom</basic-key>
              </default-style>

              <element type="text/plain">
                <style>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">0.0</basic-object>
                    <basic-object name="y">5.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">11.0</basic-object>
                    <basic-object name="width">100.0</basic-object>
                  </compound-key>
                  <basic-key name="alignment">left</basic-key>
                </style>
                <template references="label">
                  <basic-object name="content">Group Total:</basic-object>
                </template>
              </element>

              <element type="text/plain">
                <style>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">-50.0</basic-object>
                    <basic-object name="y">5.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">9.0</basic-object>
                    <basic-object name="width">-30.0</basic-object>
                  </compound-key>
                  <basic-key name="alignment">center</basic-key>
                  <basic-key name="font-size">9</basic-key>
                </style>
                <template references="number-field">
                  <basic-object name="nullValue">-</basic-object>
                  <basic-object name="format">#0</basic-object>
                  <basic-object name="field">GroupCount</basic-object>
                </template>
              </element>

              <element type="text/plain">
                <style>
                  <compound-key name="absolute_pos">
                    <basic-object name="x">-80.0</basic-object>
                    <basic-object name="y">5.0</basic-object>
                  </compound-key>
                  <compound-key name="min-size">
                    <basic-object name="height">9.0</basic-object>
                    <basic-object name="width">-20.0</basic-object>
                  </compound-key>
                  <basic-key name="font-size">9</basic-key>
                  <basic-key name="alignment">right</basic-key>
                </style>
                <template references="number-field">
                  <basic-object name="nullValue">-</basic-object>
                  <basic-object name="format">#,##0</basic-object>
                  <basic-object name="field">GroupSum</basic-object>
                </template>
              </element>
            </group-footer>
          </group>
        </groups>

        <!-- ============= -->
        <!-- = ITEM BAND = -->
        <!-- ============= -->
        <itemband>

          <style>
            <compound-key name="min-size">
              <basic-object name="height">26.0</basic-object>
              <basic-object name="width">0.0</basic-object>
            </compound-key>
          </style>

          <default-style>
            <basic-key name="font">STSong-Light</basic-key>
            <basic-key name="font-encoding">UniGB-UCS2-H</basic-key>
            <basic-key name="font-size">10</basic-key>
            <basic-key name="valignment">bottom</basic-key>
          </default-style>

          <element type="shape/generic">
            <style>
              <extends name="medium-line"/>
              <basic-key name="stroke" class="java.awt.BasicStroke">0.1</basic-key>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">25.0</basic-object>
              </compound-key>
              <basic-key name="paint">#dfdfdf</basic-key>
            </style>
            <template references="horizontal-line"/>
          </element>

          <!-- element to display the name from the TableModel -->
          <element type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">0.0</basic-object>
                <basic-object name="y">8.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">10.0</basic-object>
                <basic-object name="width">-50.0</basic-object>
              </compound-key>
              <basic-key name="alignment">left</basic-key>
            </style>
            <template references="string-field">
              <basic-object name="nullValue">-</basic-object>
              <basic-object name="field">Name</basic-object>
            </template>
          </element>

          <!-- element to display icon from the TableModel -->
          <element type="image/generic">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">-50.0</basic-object>
                <basic-object name="y">1.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">24.0</basic-object>
                <basic-object name="width">-30.0</basic-object>
              </compound-key>
              <basic-key name="alignment">center</basic-key>
              <basic-key name="valignment">middle</basic-key>
            </style>
            <template references="image-field">
              <basic-object name="field">Icon</basic-object>
            </template>
          </element>

          <!-- element to display the file size from the TableModel -->
          <element type="text/plain">
            <style>
              <compound-key name="absolute_pos">
                <basic-object name="x">-80.0</basic-object>
                <basic-object name="y">8.0</basic-object>
              </compound-key>
              <compound-key name="min-size">
                <basic-object name="height">10.0</basic-object>
                <basic-object name="width">-20.0</basic-object>
              </compound-key>
              <basic-key name="alignment">right</basic-key>
            </style>
            <template references="number-field">
              <basic-object name="nullValue">-</basic-object>
              <basic-object name="format">#,##0</basic-object>
              <basic-object name="field">Size</basic-object>
            </template>
          </element>
        </itemband>
      </report-description>

      <!-- ************* -->
      <!-- * FUNCTIONS * -->
      <!-- ************* -->
      <functions>
        <property-ref name="report.date"/>

        <function name="PageNumber" class="org.jfree.report.function.PageFunction"/>
        <function name="GroupCount" class="org.jfree.report.function.ItemCountFunction">
          <properties>
            <property name="field">Name</property>
            <property name="group">Category</property>
          </properties>
        </function>

        <function name="GroupSum" class="org.jfree.report.function.ItemSumFunction">
          <properties>
            <property name="field">Size</property>
            <property name="group">Category</property>
          </properties>
        </function>

        <function name="OverallCount" class="org.jfree.report.function.ItemCountFunction">
          <properties>
            <property name="field">Name</property>
          </properties>
        </function>

        <function name="OverallSum" class="org.jfree.report.function.ItemSumFunction">
          <properties>
            <property name="field">Size</property>
          </properties>
        </function>
      </functions>

    </report-definition>



    4. 總結(jié)
    這是自認為目前最佳的Web應(yīng)用的打印解決方案,雖然僅使用jfreereport產(chǎn)生pdf文件的功能,但是jfreereport提供的頁面自動布置的功能使產(chǎn)生報表的工作較之使用iText直接產(chǎn)生要方便許多。以上的例子理論上可以在任何的符合j2ee 1.3規(guī)范(或部分符合,如tomcat 4.x)的應(yīng)用服務(wù)器上運行,我僅僅在was 5.0.x上進行了測試。僅供大家參考。

    參考
    JFreeReport 0.8.3 Reference Guide -  http://www.object-refinery.com/ jfreereport/jfreereport-0.8.3-A4.pdf
    用Java實現(xiàn)PDF報表 - http://blog.csdn.net/legendinfo/articles/176184.aspx
    posted on 2006-01-13 13:39 黑咖啡 閱讀(628) 評論(0)  編輯  收藏 所屬分類: tec

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(2)

    隨筆分類(67)

    文章分類(43)

    Good Article

    Good Blogs

    Open Source

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本亚洲视频在线| 国产精品亚洲va在线观看| 亚洲午夜福利精品无码| 4hu四虎最新免费地址| 中文字幕在线免费看| 国产青草亚洲香蕉精品久久| 久久精品九九亚洲精品| 在线亚洲97se亚洲综合在线| 日本高清免费aaaaa大片视频| 84pao国产成视频免费播放| 中文字幕在线免费看| 一区二区三区精品高清视频免费在线播放| 亚洲午夜电影一区二区三区| 亚洲国产一区国产亚洲| 国产亚洲精品线观看动态图| 四虎影院永久免费观看| 国内外成人免费视频| 在线天堂免费观看.WWW| 99re6热视频精品免费观看| 中文在线免费不卡视频| 又粗又长又爽又长黄免费视频 | 麻豆91免费视频| 亚洲色大成网站www永久网站| 久久精品国产亚洲av麻豆小说| 亚洲精品中文字幕乱码三区| 亚洲国产成人久久综合区| 国产一区二区三区免费看| 免费看的黄色大片| 成年女人18级毛片毛片免费观看| 韩国免费一级成人毛片| 免免费国产AAAAA片| 黄页免费的网站勿入免费直接进入| 24小时在线免费视频| 最近新韩国日本免费观看| 久久福利青草精品资源站免费 | 在线视频精品免费| 国产成人精品免费视频网页大全| 59pao成国产成视频永久免费| 中文字幕亚洲免费无线观看日本 | 亚洲日本中文字幕一区二区三区| 国产91在线免费|