xmlgraphics-fop-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Zahigian, Mike" <micha...@amgen.com>
Subject RE: Help to get started in a servlet
Date Wed, 06 Feb 2002 00:23:36 GMT
Here's a simple servlet that will work.  Like the FOP servlet, you give it a
fo file or an xml/xsl combination in a get parameter.  You have to have the
latest xalan and xerces in addition to fop, because I handle the xml
transformation within the servlet as opposed to using the fop methods for
transformation.  Let me know if you have any trouble.

Mike Z

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.xml.sax.InputSource;
import org.apache.fop.apps.Driver;
import javax.xml.transform.stream.*;
import javax.xml.transform.*;

public class SimpleServlet extends HttpServlet {

    private static final String FO_REQUEST_PARAM = "fo";
    private static final String XML_REQUEST_PARAM = "xml";
    private static final String XSL_REQUEST_PARAM = "xsl";

    // you might want to override init() and set up a log4j category for the
servlet so you can easily add debugging
    // code

    public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

       try {
		   // you might want to set up a constant to represent the
directory path or pull the directory path
		   // from a configuration file, otherwise you have to
supply the path in the get parameter
            String foParam = request.getParameter(FO_REQUEST_PARAM);
            String xmlParam = request.getParameter(XML_REQUEST_PARAM);
            String xslParam = request.getParameter(XSL_REQUEST_PARAM);

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            InputSource input = null;

            // set content type as pdf so browser will know it's getting pdf
content and display it properly
            response.setContentType("application/pdf");

            if ((request.getParameter(FO_REQUEST_PARAM)) != null) {
                FileInputStream fo = new FileInputStream(foParam);
                input = new InputSource(fo);
            } else if(((request.getParameter(XML_REQUEST_PARAM)) != null) &&
((request.getParameter(XSL_REQUEST_PARAM)) != null)) {
            	File xml = new File(xmlParam);
            	File xsl = new File(xslParam);
            	Source xmlSource = new StreamSource(xml);
				Source xslSource = new StreamSource(xsl);
				StringWriter sw = new StringWriter();
				TransformerFactory tFactory =
TransformerFactory.newInstance();
				//create Templates so the xsl document will
function as a template and will be cached in
				//order to optimize performance
				Templates cachedXSLT =
tFactory.newTemplates(xslSource);
				Transformer transformer =
cachedXSLT.newTransformer();
				//transform the xml we've been given using
the cached xsl
				transformer.transform(xmlSource, new
StreamResult(sw));
				Reader r = new StringReader(sw.toString());
				input = new InputSource(r);
            } else {
				// handle situation:  get parameters are not
correct
            }
			if (input != null) {
				Driver driver = new Driver(input, out);
				driver.setRenderer(Driver.RENDER_PDF);
				driver.run();
			}

            //send content to the browser now
            byte[] content = out.toByteArray();
			response.setContentLength(content.length);
			response.getOutputStream().write(content);
			response.getOutputStream().flush();
        } catch (Exception e) {
            // handle exceptions.
        }
    }

	// pass post data received to get for processing
    public void doPost(HttpServletRequest request,
						  HttpServletResponse
response)
			throws IOException, ServletException
		{
			doGet(request, response);
	}
}

-----Original Message-----
From: Chinn, Gale [mailto:GWChinn@cessna.textron.com]
Sent: Tuesday, February 05, 2002 7:58 AM
To: 'fop-user@xml.apache.org'
Subject: Help to get started in a servlet



I am new to fop and can get it to run command line, but would like to get it
to run in a servlet.
I have followed the info on fop's embedding page using fop.war file in the
webapps directory of Tomcat on ver 3.2 and 4, but cannot get it to work
using:
http://localhost:8080/fop/fop?fo=... or
http://localhost:8080/fop/servlet/fop?fo=... 

I would just like to get a simple pdf to come back to my browser to prove a
point to my group leader.  Any help would be appreciated

TIA,

Gale Chinn
Programmer/Analyst
Cessna Aircraft Company
Wichita, KS

Mime
View raw message