I did it this way: <code> // FO --> PDF driver.reset(); driver.setOutputStream(pdf); driver.setRenderer(org.apache.fop.apps.Driver.RENDER_PDF);
TransformerFactory tFactory = TransformerFactory.newInstance(); if (tFactory.getFeature(SAXSource.FEATURE) && tFactory.getFeature(SAXResult.FEATURE)) { SAXTransformerFactory saxTFactory = ((SAXTransformerFactory)tFactory); TransformerHandler th = saxTFactory.newTransformerHandler(new StreamSource(xsl)); // Create SAXResult based on FOP Driver content handler which will accept // SAX events and build FOP tree SAXResult saxResult = new SAXResult(driver.getContentHandler()); th.setResult(saxResult); <comment> Now you can use th as a ContentHandler and fire the events on it! </comment> pdf.close(); } </code> Christian -----Ursprüngliche Nachricht----- Von: Smith, Paul [mailto:[EMAIL PROTECTED]] Gesendet: Donnerstag, 15. November 2001 13:11 An: Fop-Dev (E-mail) Cc: Smith, Paul Betreff: Difficulties embedding FOP by firing SAX events myself Hi, I am trying to embed FOP within my own Java application as described in http://xml.apache.org/fop/embedding.html, specifically the third method: "calling getContentHandler() and firing the SAX events yourself" and I am running into difficulties! I have a class called MyParser which fires the required events (it implements XMLReader). Its parse method that calls SAX events on ContentHandler and ignores the InputStream. If I do: (I have simplifed the code samples so their maybe a few typos) MyParser parser = new MyParser(); XMLSerializer serializer = new XMLSerializer(new FileOutputStream("output.fo"), new OutputFormat(method, encoding, indenting)); ContentHandler handler = serializer.asContentHandler(); parser.setContentHandler(handler); parser.parse(new InputStream()); Then I can produce a well formed XSL-FO file that validates against the DTD provided by N. Grigoriev from RenderX. Running fop on this file eg. "fop output.fo output.pdf", generates output.pdf successfully. HOWEVER, If I try and embed FOP by doing: Driver driver = new Driver(); driver.setOutputStream(new FileOutputStream("output.pdf"); driver.setInputSource(new InputSource()); Logger logger = Hierarchy.getDefaultHierarchy().getLoggerFor("foRender"); logger.setPriority(Priority.INFO); driver.setLogger(logger); MyParser parser = new MyParser(); driver.render(parser, new InputSource()); FOP generates output.pdf but when opened in Acrobat Reader I get "There was an error opening this document. Could not repair file." Closer inspection shows that the PDF has not been correctly generated at all. The first 9 lines look like: %PDF-1.3 %ª«¬ 4 0 obj << /Type /Info /Producer (null) >> endobj 5 0 obj << /Length 235 /Filter /FlateDecode >> where as the first 9 lines of the PDF generated by running FOP from the command line look like: %PDF-1.3 %ª«¬ 4 0 obj << /Type /Info /Producer (FOP 0.20.1) >> endobj 5 0 obj << /Length 296 /Filter [ /ASCII85Decode /FlateDecode ] >> During driver.render the logger prints out: INFO 10058 [foRender] (): building formatting object tree DEBUG 10058 [fop ] (): setting up fonts INFO 10058 [foRender] (): [1] Any help you can offer is much appreciated. Thanks in advance --- Paul Smith ******************************************************************* DISCLAIMER: The information contained in this email is confidential and is intended solely for the use of the named addressee. Access, copying or re-use of the information in it by any other person is not authorised. ******************************************************************** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]