aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/servlet/src/FopServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/servlet/src/FopServlet.java')
-rw-r--r--contrib/servlet/src/FopServlet.java138
1 files changed, 138 insertions, 0 deletions
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:
+ * <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);
+ 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("<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.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);
+ }
+ }
+
+}