//- 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);
}
}
<?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">分類(lèi):</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">名稱(chēng):</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>
聯(lián)系客服