This tip shows a Java application that can be used to pass SAX events to a FOP processor. It uses the javax.xml.parsers.SAXParser class:
In demo document: C:Data_LocalxmldocsAirWings_fop.foOut demo document: C:Data_LocalxmldocsAirWings_pdf_sax.pdf*///FOPimport org.apache.fop.apps.Driver; import org.apache.fop.messaging.MessageHandler;//Avalonimport org.apache.avalon.framework.logger.Logger;import org.apache.avalon.framework.logger.ConsoleLogger;//Javaimport java.io.*;import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;public class SAX_FOP{ public static void main(String[] args){ OutputStream OS_pdf=null; try{ //create an org.apache.fop.apps.Driver object Driver fop=new Driver(); //setting a logger Logger logger=new ConsoleLogger(ConsoleLogger.LEVEL_INFO); fop.setLogger(logger); MessageHandler.setOutputMethod(MessageHandler.SCREEN); MessageHandler.setScreenLogger(logger); //setting renderer fop.setRenderer(Driver.RENDER_PDF); try{ //setting the out stream File F_pdf=new File("C://Data_Local// xml//docs//AirWings_pdf_sax.pdf"); OS_pdf=new FileOutputStream(F_pdf); fop.setOutputStream(OS_pdf); }catch(java.io.FileNotFoundException e) {MessageHandler.error("[*** "+e.getMessage()+" ***]");} //get a ContentHandler ContentHandler CH=fop.getContentHandler(); //get a SAXParserFactory object SAXParserFactory SAXpf=SAXParserFactory.newInstance(); //namespace activation if(SAXpf.isNamespaceAware()==false) SAXpf.setNamespaceAware(true); //get a SAXParser object SAXParser SAXp=SAXpf.newSAXParser(); //call a SAXParser.parse method SAXp.parse("C://Data_Local//xml//docs//AirWings_fop.fo", (DefaultHandler)(CH)); }catch(SAXException e) {System.out.println(e.getMessage()); }catch(ParserConfigurationException e) {System.out.println(e.getMessage()); }catch(IOException e) {System.out.println(e.getMessage());} } }