123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /*
- * $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.avalon.framework.logger.ConsoleLogger;
- import org.apache.avalon.framework.logger.Logger;
-
- /**
- * Example servlet to generate a PDF from a servlet.
- * Servlet param is:
- * <ul>
- * <li>fo: the path to a formatting object file to render
- * </ul>
- *
- * 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);
- }
- 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("<html><head><title>Error</title></head>\n"+
- "<body><h1>FopServlet Error</h1><h3>No 'fo' "+
- "request param given.</body></html>");
- }
- } 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.enableLogging(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.enableLogging(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);
- }
- }
-
- }
|