⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jfreereportpngservlet.java

📁 JAVA报表
💻 JAVA
字号:
/**
 * ========================================
 * JFreeReport : a free Java report library
 * ========================================
 *
 * Project Info:  http://www.jfree.org/jfreereport/index.html
 * Project Lead:  Thomas Morgner;
 *
 * (C) Copyright 2000-2003, by Simba Management Limited and Contributors.
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
 * either version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * -----------------------
 * JFreeReportPngServlet.java
 * -----------------------
 *
 * (C)opyright 2002, by Simba Management Limited and Contributors.
 *
 * Original Author:  David Gilbert (for Simba Management Limited);
 * Contributor(s):   Thomas Morgner;
 *
 * $Id: JFreeReportPngServlet.java,v 1.4 2003/09/09 10:27:59 taqua Exp $
 *
 * Changes
 * -------
 * 24-Jan-2003: Initial version
 */
package org.jfree.report.ext.servletdemo;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.io.IOException;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.keypoint.PngEncoder;
import org.jfree.report.modules.output.pageable.graphics.G2OutputTarget;
import org.jfree.report.util.Log;

/**
 * A Sample HttpServlet to show how JFreeReports can be used to generate
 * PNG content in a webbased environment.
 * <p>
 * The servlet expects a <code>page</code> parameter to be set. This parameter
 * must be greater or equal to one and must fit the report's paginated pages.
 * This servlet is not intended to be a stand-alone solution, it should be
 * used in conjunction with a wrapper page, which uses &lt;IMG&gt; tags to link
 * to this servlet.
 * <p>
 * POST and GET are handled equal, so it does not
 * matter whether you POST or GET the URL for this servlet.
 *
 * @author Jeevan Sunkersett
 */
public class JFreeReportPngServlet extends HttpServlet implements SingleThreadModel
{
  /**
   * Handles the GET method for the servlet. The GET method is mapped to
   * the POST method, both commands are handled equal.
   *
   * @param request the http request object.
   * @param response the http response object.
   * @throws ServletException if an error occured, which could not be handled internaly.
   * @throws IOException if writing the generated contents failed.
   */
  public void doGet(final HttpServletRequest request, final HttpServletResponse response)
      throws ServletException, IOException
  {
    doPost(request, response);
  }

  /**
   * Handles the POST method for the request. This parses the report definition,
   * loads the tablemodel and generates a single page of the report. The generated
   * page is returned as PNG file.
   * <p>
   * The generated PageStateList is stored in the session so that it can be reused
   * for later calls. The <code>page</code> parameter must be set to a valid value,
   * or the page generation will fail.
   * <p>
   * The page parameter is required, must be a valid positive integer. The first page
   * is '0'.
   *
   * @param request the http request object.
   * @param response the http response object.
   * @throws ServletException if an error occured, which could not be handled internaly.
   * @throws IOException if writing the generated contents failed.
   */
  public void doPost(final HttpServletRequest request, final HttpServletResponse response)
      throws ServletException, IOException
  {

    BufferedImage image = null;
    try
    {
      final URL in = getClass().getResource("/org/jfree/report/demo/swing-icons.xml");
      if (in == null)
      {
        throw new ServletException("Missing Resource: /org/jfree/report/demo/swing-icons.xml");
      }

      final URL base = getServletContext().getResource("/WEB-INF/lib/jlfgr-1_0.jar");
      final AbstractPageableReportServletWorker worker =
          new DefaultPageableReportServletWorker(request.getSession(true),
                                                 in,
                                                 new DemoModelProvider(base));

      final String param = request.getParameter("page");
      if (param == null)
      {
        Log.debug ("Page attribute is missing");
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        return;
      }

      int page = 0;
      try
      {
        page = Integer.parseInt(param);
      }
      catch (Exception e)
      {
        Log.debug("The page-parameter is invalid", e);
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        return;
      }

      final PageFormat pageFormat = worker.getReportPageFormat();
      image = createImage(pageFormat);
      final Graphics2D g2 = image.createGraphics();
      g2.setPaint(Color.white);
      g2.fillRect(0,0, (int) pageFormat.getWidth(), (int) pageFormat.getHeight());

      final G2OutputTarget target = new G2OutputTarget(g2, pageFormat);
      worker.setOutputTarget(target);

      if (page >= worker.getNumberOfPages() || page < 0)
      {
        Log.debug("The page-parameter is invalid: " + page + ": " + worker.getNumberOfPages());
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        return;
      }

      worker.processPage(page);

      response.setHeader("Content-Type", "image/png");
      response.setHeader("Content-Disposition","inline;filename=\"report-page-" + page + ".png\"");

      final ServletOutputStream out = response.getOutputStream();
      // from JFreeChart ...
      final PngEncoder encoder = new PngEncoder(image, true, 0, 9);
      final byte[] data = encoder.pngEncode();
      out.write(data);
      out.flush();
    }
    catch (Exception e)
    {
      Log.debug("Failed to serve the request", e);
      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
      return;
    }
  }

  /**
   * Create the empty image for the given page size.
   *
   * @param pf the page format that defines the image bounds.
   * @return the generated image.
   */
  private BufferedImage createImage(final PageFormat pf)
  {
    final double width = pf.getWidth();
    final double height = pf.getHeight();
    //write the report to the temp file
    final BufferedImage bi = new BufferedImage
      ((int) width, (int) height, BufferedImage.TYPE_BYTE_INDEXED);
    return bi;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -