HtmlExampleServlet演示如何通过HTML表格在Web环境下展示JFreeReport定义的表格
简单报表的HTML展示
JFreeReport提供HtmlProcessor类来将输入的JFreeReport报表变成HTML表格形式,最后通过Servlet的输出通道展示给用户,具体的用法如下例:
import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.report.JFreeReport; import org.jfree.report.modules.output.table.base.TableProcessor; import org.jfree.report.modules.output.table.html.HtmlProcessor; import org.jfree.report.modules.output.table.html.StreamHtmlFilesystem; import org.jfree.report.util.Log; /** * * <p>HtmlExampleServlet演示如何通过HTML表格在Web环境下展示JFreeReport定义的表格 * 简单报表的HTML展示 JFreeReport提供HtmlProcessor类来将输入的JFreeReport报表变成HTML表格形式,最后通过Servlet的输出通道展示给用户,具体的用法如下例: * * <p> * * 创建日期 2013-5-13<br> * @author longgangbai<br> * @version $Revision$ 2013-5-13 * @since 3.0.0 */ public class JFreeReportHtmlServlet extends HttpServlet { // private static final long serialVersionUID = 1L; public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { TableProcessor worker; // 设置输出页面的Meta信息 response.setHeader("Content-Disposition", "inline; filename=\"" + "unknown.html" + "\""); // 设置页面的输出格式 response.setHeader("Content-Type", "text/html"); try { // 获取Servlet的输出流 OutputStream out = response.getOutputStream(); // 获取HelloWorld中定义的报表 JFreeReportView jfreeReport =new JFreeReportView(); JFreeReport report=jfreeReport.getJFreeReport(); // 将报表和Servlet的输出流作为参数传递给TableProcessor的实例 final HtmlProcessor processor = new HtmlProcessor(report); processor.setFilesystem(new StreamHtmlFilesystem(out)); worker = processor; } catch (Exception e) { Log.debug("无法解析报表定义", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } try { // 输出结果 worker.processReport(); } catch (Exception e) { Log.debug("输出结果产生错误", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } } }
动态的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.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生成报表的一些基本步骤 * * 本例子中,为了简化操作,报表定义是使用java直接编码 * * @ 作者 : bookman */ public class JFreeReportView { /** * 处理窗口关闭事件 */ protected static class CloseHandler extends WindowAdapter { public void windowClosing(final WindowEvent event) { System.exit(0); } } /** * 创建和显示简单的报表 */ public JFreeReportView() { } public JFreeReport getJFreeReport() { // 获得创建报表需要用到的数据 final TableModel data = createData(); // 获得报表要用到的报表定义内容 final JFreeReport report = createReportDefinition(); // 将报表定义和数据结合 report.setData(data); return report; } public void viewJFreeReport() { try { JFreeReport report =getJFreeReport(); // 将生成的报表放到预览窗口中 final PreviewDialog preview = new PreviewDialog(report); preview.addWindowListener(new CloseHandler()); preview.pack(); // 显示报表预览窗口 preview.setVisible(true); } catch (ReportProcessingException e) { System.out.println(e); } } /** * 创建生成报表需要用到的数据 * * @返回一个TableModel实例 */ private TableModel createData() { final Object[] columnNames = new String[] {"Column1", "Column2" }; final DefaultTableModel result = new DefaultTableModel(columnNames, 100); int rownum = 0; for (; rownum < 100; rownum++) { result.setValueAt("say Hello " + rownum + "次", rownum, 0); result.setValueAt("say World " + rownum + "次", rownum, 1); } return result; } /** * 创建一个报表定义 * * @返回一个报表定义实例 */ private JFreeReport createReportDefinition() { final JFreeReport report = new JFreeReport(); report.setName("A Very Simple Report"); /** * 定义要显示报表第一列的样式 */ 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()); /** * 定义要显示报表第二列的样式 */ 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()); /** * 返回一个报表定义的实例 */ return report; } }