+++ /dev/null
-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.log.*;
-
-import mir.servlet.*;
-import mir.module.*;
-import mir.misc.*;
-import mir.entity.*;
-import mir.storage.*;
-
-
-import mircoders.entity.*;
-import mircoders.storage.*;
-import mircoders.module.*;
-import mircoders.producer.*;
-
-
-
-/**
- * generate a PDF from a servlet.
- * Servlet param is:
- * <ul>
- * <li>id: the id number of the content entity to turn into a pdf
- * </ul>
- *
- * Example URL: http://servername/servlet/OutputMir?id=66
- * Compiling: you will need
- * - servlet_2_2.jar
- * - fop.jar
- * - sax api
- * - logkit jar
- *
- * Running: you will need in the WEB-INF/lib/ directory:
- * - fop.jar
- * - batik.jar
- * - avalon-framework-4.0.jar
- * - logkit-1.0.jar
- * - xalan-2.0.0.jar
- */
-public class OutputMir extends AbstractServlet {
- private ModuleContent contentModule;
-
- public static final String ID_REQUEST_PARAM = "id";
-
- Logger log = null;
-
- public void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException {
- if(log == null) {
- Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
- log = hierarchy.getLoggerFor("fop");
- log.setPriority(Priority.WARN);
- }
- getConfig(request);
-
- String producerStorageRoot=MirConfig.getProp("Producer.StorageRoot");
- String producerDocRoot=MirConfig.getProp("Producer.DocRoot");
- String templateDir = MirConfig.getPropWithHome("HTMLTemplateProcessor.Dir");
- String xslSheet=templateDir + "/" + MirConfig.getProp("Producer.PrintableContent.html2foStyleSheetName");
- try {
- contentModule = new ModuleContent(DatabaseContent.getInstance());
-
- String idParam = request.getParameter(ID_REQUEST_PARAM);
- if (idParam != null){
- EntityContent contentEnt = (EntityContent)contentModule.getById(idParam);
- String publishPath = contentEnt.getValue("publish_path");
- String foFile = producerStorageRoot + producerDocRoot + "/" +publishPath + "/" + idParam + ".fo";
- XSLTInputHandler input = new XSLTInputHandler(new File(foFile), new File(xslSheet));
- renderXML(input, response);
- } else {
- PrintWriter out = response.getWriter();
- out.println("<html><head><title>Error</title></head>\n"+
- "<body><h1>OutputMir Error</h1><h3>No 'id' "+
- "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 rendered
- * 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);
- }
- }
-
- 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);
- }
- }
-
- /**
- * creates a SAX parser, using the value of org.xml.sax.parser
- * defaulting to org.apache.xerces.parsers.SAXParser
- *
- * @return the created SAX parser
- */
- static XMLReader createParser() throws ServletException {
- String parserClassName = System.getProperty("org.xml.sax.parser");
- if (parserClassName == null) {
- parserClassName = "org.apache.xerces.parsers.SAXParser";
- }
-
- try {
- return (XMLReader) Class.forName(
- parserClassName).newInstance();
- } catch (Exception e) {
- throw new ServletException(e);
- }
- }
-
-}
-
-
-
-
-
-