git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195912 13f79535-47bb-0310-9956-ffa450edef68pull/30/head
build |
FOP Servlet Readme | |||||
This directory contains two sample servlets that use FOP: | |||||
- FopServlet can take a XSL:FO file or a XML+XSLT as parameters to create a PDF | |||||
that is being shown in the browser. | |||||
- FopPrintServlet has the same parameters but prints the generated document to | |||||
the default printer instead of generating a PDF. | |||||
Creating the WAR file: | |||||
1. Run build.bat (on Windows) or build.sh (on Unix) to create the WAR file. | |||||
2. Put the WAR file in you favourite web container. | |||||
Sample URLs: | |||||
http://localhost:8080/fop/servlet/FopServlet?fo=readme.fo | |||||
http://localhost:8080/fop/servlet/FopPrintServlet?fo=readme.fo | |||||
Tip: If you have problems using Internet Explorer, try this URL: | |||||
http://localhost:8080/fop/servlet/FopServlet?fo=readme.fo&ext=.pdf |
@echo off | |||||
echo Fop Servlet Build System | |||||
echo -------------------------- | |||||
if "%JAVA_HOME%" == "" goto error | |||||
set LIBDIR=../../lib | |||||
set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip | |||||
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\ant.jar | |||||
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis.jar | |||||
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xercesImpl-2.2.1.jar | |||||
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xalan-2.4.1.jar | |||||
set ANT_HOME=%LIBDIR% | |||||
echo Building with classpath %LOCALCLASSPATH% | |||||
echo Starting Ant... | |||||
%JAVA_HOME%\bin\java.exe -Dant.home=%ANT_HOME% -classpath "%LOCALCLASSPATH%" org.apache.tools.ant.Main %1 %2 %3 %4 %5 | |||||
goto end | |||||
:error | |||||
echo ERROR: JAVA_HOME not found in your environment. | |||||
echo Please, set the JAVA_HOME variable in your environment to match the | |||||
echo location of the Java Virtual Machine you want to use. | |||||
:end | |||||
rem set LOCALCLASSPATH= | |||||
#!/bin/sh | |||||
# This file should be executable. | |||||
echo | |||||
echo "Fop Servlet Build System" | |||||
echo "--------------------------" | |||||
echo | |||||
if [ "$JAVA_HOME" = "" ] ; then | |||||
echo "ERROR: JAVA_HOME not found in your environment." | |||||
echo | |||||
echo "Please, set the JAVA_HOME variable in your environment to match the" | |||||
echo "location of the Java Virtual Machine you want to use." | |||||
exit 1 | |||||
fi | |||||
LIBDIR=../../lib | |||||
LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip | |||||
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/ant.jar | |||||
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/xml-apis.jar | |||||
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/xercesImpl-2.2.1.jar | |||||
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/xalan-2.4.1.jar | |||||
ANT_HOME=$LIBDIR | |||||
echo | |||||
echo Building with classpath $LOCALCLASSPATH | |||||
echo Starting Ant... | |||||
echo | |||||
$JAVA_HOME/bin/java -Dant.home=$ANT_HOME -classpath "$LOCALCLASSPATH" org.apache.tools.ant.Main $* |
<?xml version="1.0"?> | |||||
<project default="package" basedir="."> | |||||
<property name="Name" value="Fop Servlet"/> | |||||
<property name="name" value="fopservlet"/> | |||||
<property name="version" value="0.2cvs"/> | |||||
<!-- compiler switches --> | |||||
<property name="build.compiler" value="classic"/> | |||||
<property name="debug" value="off"/> | |||||
<property name="optimize" value="on"/> | |||||
<property name="deprecation" value="off"/> | |||||
<!-- directories --> | |||||
<property name="src.dir" value="./src"/> | |||||
<property name="conf.dir" value="./conf"/> | |||||
<property name="fop.lib.dir" value="../../lib"/> | |||||
<property name="lib.dir" value="./lib"/> | |||||
<property name="build.dir" value="./build"/> | |||||
<property name="build.src" value="./build/src"/> | |||||
<property name="build.dest" value="./build/classes"/> | |||||
<property name="build.war" value="./build/war"/> | |||||
<!-- stuff --> | |||||
<path id="project.class.path"> | |||||
<fileset dir="${lib.dir}"> | |||||
<include name="servlet*.jar"/> | |||||
</fileset> | |||||
<fileset dir="${fop.lib.dir}"> | |||||
<include name="avalon-framework*.jar"/> | |||||
<include name="batik*.jar"/> | |||||
</fileset> | |||||
<fileset dir="${fop.lib.dir}/../build"> | |||||
<include name="fop.jar"/> | |||||
</fileset> | |||||
</path> | |||||
<!-- =================================================================== --> | |||||
<!-- Initialization target --> | |||||
<!-- =================================================================== --> | |||||
<target name="init"> | |||||
<tstamp/> | |||||
<filter token="version" value="${version}"/> | |||||
<property name="year" value="1999-2003"/> | |||||
<echo message="------------------- ${Name} ${version} [${year}] ----------------"/> | |||||
<available property="servlet.present" classname="javax.servlet.Servlet" classpathref="project.class.path"/> | |||||
</target> | |||||
<target name="servlet-check" depends="init" unless="servlet.present"> | |||||
<echo message="============================================================================="/> | |||||
<echo message="servlet.jar is missing in the lib directory. Please get one and put it there."/> | |||||
<echo message="============================================================================="/> | |||||
<fail message="Dependecy check failed."/> | |||||
</target> | |||||
<!-- =================================================================== --> | |||||
<!-- Prepares the build directory --> | |||||
<!-- =================================================================== --> | |||||
<target name="prepare" depends="init, servlet-check"> | |||||
<!-- create directories --> | |||||
<echo message="Preparing the build directories"/> | |||||
<mkdir dir="${build.dir}"/> | |||||
<mkdir dir="${build.dest}"/> | |||||
</target> | |||||
<!-- =================================================================== --> | |||||
<!-- Compiles the source directory --> | |||||
<!-- =================================================================== --> | |||||
<target name="compile" depends="prepare"> | |||||
<echo message="Compiling the sources "/> | |||||
<javac srcdir="${src.dir}" destdir="${build.dest}" debug="${debug}" deprecation="${deprecation}" optimize="${optimize}"> | |||||
<classpath refid="project.class.path"/> | |||||
</javac> | |||||
</target> | |||||
<!-- =================================================================== --> | |||||
<!-- Creates the class package --> | |||||
<!-- =================================================================== --> | |||||
<target name="package" depends="compile"> | |||||
<echo message="Creating the WAR file"/> | |||||
<war warfile="${build.dir}/fop.war" webxml="${conf.dir}/web.xml"> | |||||
<lib dir="${fop.lib.dir}"> | |||||
<include name="avalon-framework*.jar"/> | |||||
<include name="batik*.jar"/> | |||||
</lib> | |||||
<lib dir="${fop.lib.dir}/../build"> | |||||
<include name="fop.jar"/> | |||||
</lib> | |||||
<classes dir="${build.dest}"/> | |||||
</war> | |||||
</target> | |||||
<target name="all" depends="package"/> | |||||
<!-- "all" target for us Makefile converts ;-) --> | |||||
<!-- =================================================================== --> | |||||
<!-- Clean targets --> | |||||
<!-- =================================================================== --> | |||||
<target name="clean" depends="init"> | |||||
<delete dir="${build.dir}"/> | |||||
</target> | |||||
</project> |
<?xml version="1.0" encoding="ISO-8859-1"?> | |||||
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" | |||||
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> | |||||
<web-app> | |||||
<servlet> | |||||
<servlet-name>Fop</servlet-name> | |||||
<servlet-class>FopServlet</servlet-class> | |||||
</servlet> | |||||
<servlet-mapping> | |||||
<servlet-name>Fop</servlet-name> | |||||
<url-pattern>/</url-pattern> | |||||
</servlet-mapping> | |||||
<servlet> | |||||
<servlet-name>FopPrint</servlet-name> | |||||
<servlet-class>FopPrintServlet</servlet-class> | |||||
</servlet> | |||||
<servlet-mapping> | |||||
<servlet-name>FopPrint</servlet-name> | |||||
<url-pattern>/fopprint</url-pattern> | |||||
</servlet-mapping> | |||||
</web-app> |
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
* | |||||
* ==================================================================== | |||||
* | |||||
* This source code implements specifications defined by the Java | |||||
* Community Process. In order to remain compliant with the specification | |||||
* DO NOT add / change / or delete method signatures! | |||||
*/ |
/* | |||||
* $Id$ | |||||
* Copyright (C) 2002 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 java.util.Vector ; | |||||
import java.awt.print.PrinterJob ; | |||||
import java.awt.print.PrinterException ; | |||||
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.FOPException; | |||||
import org.apache.fop.area.PageViewport; | |||||
import org.apache.fop.apps.Version; | |||||
import org.apache.fop.apps.XSLTInputHandler; | |||||
import org.apache.fop.render.awt.AWTRenderer ; | |||||
import org.apache.avalon.framework.logger.ConsoleLogger; | |||||
import org.apache.avalon.framework.logger.Logger; | |||||
/** | |||||
* Example servlet to generate a fop printout from a servlet. | |||||
* Printing goes to the default printer on host where the servlet executes. | |||||
* Servlet param is: | |||||
* <ul> | |||||
* <li>fo: the path to a formatting object file to render | |||||
* </ul> | |||||
* | |||||
* Example URL: http://servername/fop/servlet/FopPrintServlet?fo=readme.fo | |||||
* Example URL: http://servername/fop/servlet/FopPrintServlet?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 | |||||
* - avalon-framework-x.jar (where x is the version found the FOP lib dir) | |||||
* - xalan-2.0.0.jar | |||||
*/ | |||||
public class FopPrintServlet 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) { | |||||
FileInputStream file = new FileInputStream(foParam); | |||||
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 { | |||||
response.setContentType ("text/html"); | |||||
PrintWriter out = response.getWriter(); | |||||
out.println("<html><title>Error</title>\n"+ "<body><h1>FopServlet Error</h1><h3>No 'fo' or 'xml/xsl' "+ | |||||
"request param given.</h3></body></html>"); | |||||
} | |||||
} catch (ServletException ex) { | |||||
throw ex; | |||||
} | |||||
catch (Exception ex) { | |||||
throw new ServletException(ex); | |||||
} | |||||
} | |||||
/** | |||||
* Renders an FO inputsource to the default printer. | |||||
*/ | |||||
public void renderFO(InputSource foFile, | |||||
HttpServletResponse response) throws ServletException { | |||||
try { | |||||
Driver driver = new Driver(foFile, null); | |||||
PrinterJob pj = PrinterJob.getPrinterJob(); | |||||
PrintRenderer renderer = new PrintRenderer(pj); | |||||
driver.enableLogging(log); | |||||
driver.setRenderer(renderer); | |||||
driver.run(); | |||||
reportOK (response); | |||||
} catch (Exception ex) { | |||||
throw new ServletException(ex); | |||||
} | |||||
} | |||||
/** | |||||
* Renders an FO generated using an XML and a stylesheet to the default printer. | |||||
*/ | |||||
public void renderXML(XSLTInputHandler input, | |||||
HttpServletResponse response) throws ServletException { | |||||
try { | |||||
Driver driver = new Driver(); | |||||
PrinterJob pj = PrinterJob.getPrinterJob(); | |||||
PrintRenderer renderer = new PrintRenderer(pj); | |||||
pj.setCopies(1); | |||||
driver.enableLogging(log); | |||||
driver.setRenderer(renderer); | |||||
driver.render(input.getParser(), input.getInputSource()); | |||||
reportOK (response); | |||||
} catch (Exception ex) { | |||||
throw new ServletException(ex); | |||||
} | |||||
} | |||||
// private helper, tell (browser) user that file printed | |||||
private void reportOK (HttpServletResponse response) | |||||
throws ServletException { | |||||
String sMsg = | |||||
"<html><title>Success</title>\n" + "<body><h1>FopPrintServlet: </h1>" + | |||||
"<h3>The requested data was printed</h3></body></html>" ; | |||||
response.setContentType ("text/html"); | |||||
response.setContentLength (sMsg.length()); | |||||
try { | |||||
PrintWriter out = response.getWriter(); | |||||
out.println (sMsg); | |||||
out.flush(); | |||||
} catch (Exception ex) { | |||||
throw new ServletException(ex); | |||||
} | |||||
} | |||||
// This is stolen from PrintStarter | |||||
class PrintRenderer extends AWTRenderer { | |||||
private static final int EVEN_AND_ALL = 0; | |||||
private static final int EVEN = 1; | |||||
private static final int ODD = 2; | |||||
private int startNumber; | |||||
private int endNumber; | |||||
private int mode = EVEN_AND_ALL; | |||||
private int copies = 1; | |||||
private PrinterJob printerJob; | |||||
PrintRenderer(PrinterJob printerJob) { | |||||
super(null); | |||||
this.printerJob = printerJob; | |||||
startNumber = 0 ; | |||||
endNumber = -1; | |||||
printerJob.setPageable(this); | |||||
mode = EVEN_AND_ALL; | |||||
String str = System.getProperty("even"); | |||||
if (str != null) { | |||||
try { | |||||
mode = Boolean.valueOf(str).booleanValue() ? EVEN : ODD; | |||||
} catch (Exception e) {} | |||||
} | |||||
} | |||||
public void stopRenderer() | |||||
throws IOException { | |||||
super.stopRenderer(); | |||||
if (endNumber == -1) | |||||
endNumber = getPageCount(); | |||||
Vector numbers = getInvalidPageNumbers(); | |||||
for (int i = numbers.size() - 1; i > -1; i--) | |||||
//removePage( | |||||
// Integer.parseInt((String) numbers.elementAt(i))); | |||||
try { | |||||
printerJob.print(); | |||||
} catch (PrinterException e) { | |||||
e.printStackTrace(); | |||||
throw new IOException("Unable to print: " + | |||||
e.getClass().getName() + ": " + e.getMessage()); | |||||
} | |||||
} | |||||
public void renderPage(PageViewport page) throws IOException, FOPException { | |||||
pageWidth = (int)((float) page.getViewArea().getWidth() / 1000f); | |||||
pageHeight = (int)((float) page.getViewArea().getHeight() / 1000f); | |||||
super.renderPage(page); | |||||
} | |||||
private Vector getInvalidPageNumbers() { | |||||
Vector vec = new Vector(); | |||||
int max = getPageCount(); | |||||
boolean isValid; | |||||
for (int i = 0; i < max; i++) { | |||||
isValid = true; | |||||
if (i < startNumber || i > endNumber) { | |||||
isValid = false; | |||||
} else if (mode != EVEN_AND_ALL) { | |||||
if (mode == EVEN && ((i + 1) % 2 != 0)) | |||||
isValid = false; | |||||
else if (mode == ODD && ((i + 1) % 2 != 1)) | |||||
isValid = false; | |||||
} | |||||
if (!isValid) | |||||
vec.add(i + ""); | |||||
} | |||||
return vec; | |||||
} | |||||
} // class PrintRenderer | |||||
} | |||||
/* | |||||
* $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); | |||||
} | |||||
} | |||||
} |