From 9cfac12f9bd3234ae5a4503aed2466193c7e50d2 Mon Sep 17 00:00:00 2001 From: Keiron Liddle Date: Wed, 27 Mar 2002 11:55:52 +0000 Subject: updated old servlet code, moved to contrib added print servlet Submitted By: Jeremias Maerki git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194721 13f79535-47bb-0310-9956-ffa450edef68 --- contrib/servlet/src/FopServlet.java | 138 ++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 contrib/servlet/src/FopServlet.java (limited to 'contrib/servlet/src/FopServlet.java') diff --git a/contrib/servlet/src/FopServlet.java b/contrib/servlet/src/FopServlet.java new file mode 100644 index 000000000..d3043bd9d --- /dev/null +++ b/contrib/servlet/src/FopServlet.java @@ -0,0 +1,138 @@ +/* + * $Id$ + * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. + * For details on use and redistribution please refer to the + * LICENSE file included with these sources. + */ + +import java.io.*; + +import javax.servlet.*; +import javax.servlet.http.*; + +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; + +import org.apache.fop.apps.Driver; +import org.apache.fop.apps.Version; +import org.apache.fop.apps.XSLTInputHandler; +import org.apache.fop.messaging.MessageHandler; + +import org.apache.avalon.framework.logger.ConsoleLogger; +import org.apache.avalon.framework.logger.Logger; + +/** + * Example servlet to generate a PDF from a servlet. + * Servlet param is: + * + * + * Example URL: http://servername/fop/servlet/FopServlet?fo=readme.fo + * Example URL: http://servername/fop/servlet/FopServlet?xml=data.xml&xsl=format.xsl + * Compiling: you will need + * - servlet_2_2.jar + * - fop.jar + * - sax api + * - avalon-framework-x.jar (where x is the version found the FOP lib dir) + * + * Running: you will need in the WEB-INF/lib/ directory: + * - fop.jar + * - batik.jar + * - xalan-2.0.0.jar + * - avalon-framework-x.jar (where x is the version found the FOP lib dir) + */ +public class FopServlet extends HttpServlet { + public static final String FO_REQUEST_PARAM = "fo"; + public static final String XML_REQUEST_PARAM = "xml"; + public static final String XSL_REQUEST_PARAM = "xsl"; + Logger log = null; + + public void doGet(HttpServletRequest request, + HttpServletResponse response) throws ServletException { + if (log == null) { + log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN); + MessageHandler.setScreenLogger(log); + } + try { + String foParam = request.getParameter(FO_REQUEST_PARAM); + String xmlParam = request.getParameter(XML_REQUEST_PARAM); + String xslParam = request.getParameter(XSL_REQUEST_PARAM); + + if (foParam != null) { + File fofile = new File(foParam); + //log.warn("FO: "+fofile.getCanonicalPath()); + FileInputStream file = new FileInputStream(fofile); + renderFO(new InputSource(file), response); + } else if ((xmlParam != null) && (xslParam != null)) { + XSLTInputHandler input = + new XSLTInputHandler(new File(xmlParam), + new File(xslParam)); + renderXML(input, response); + } else { + PrintWriter out = response.getWriter(); + out.println("Error\n"+ + "

FopServlet Error

No 'fo' "+ + "request param given."); + } + } catch (ServletException ex) { + throw ex; + } + catch (Exception ex) { + throw new ServletException(ex); + } + } + + /** + * Renders an FO inputsource into a PDF file which is written + * directly to the response object's OutputStream + */ + public void renderFO(InputSource foFile, + HttpServletResponse response) throws ServletException { + try { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + response.setContentType("application/pdf"); + + Driver driver = new Driver(foFile, out); + driver.setLogger(log); + driver.setRenderer(Driver.RENDER_PDF); + driver.run(); + + byte[] content = out.toByteArray(); + response.setContentLength(content.length); + response.getOutputStream().write(content); + response.getOutputStream().flush(); + } catch (Exception ex) { + throw new ServletException(ex); + } + } + + /** + * Renders an XML file into a PDF file by applying a stylesheet + * that converts the XML to XSL:FO. The PDF is written + * directly to the response object's OutputStream + */ + public void renderXML(XSLTInputHandler input, + HttpServletResponse response) throws ServletException { + try { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + response.setContentType("application/pdf"); + + Driver driver = new Driver(); + driver.setLogger(log); + driver.setRenderer(Driver.RENDER_PDF); + driver.setOutputStream(out); + driver.render(input.getParser(), input.getInputSource()); + + byte[] content = out.toByteArray(); + response.setContentLength(content.length); + response.getOutputStream().write(content); + response.getOutputStream().flush(); + } catch (Exception ex) { + throw new ServletException(ex); + } + } + +} -- cgit v1.2.3