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_Local\xml\docs\AirWings_fop.fo
Out demo document: C:\Data_Local\xml\docs\AirWings_pdf_sax.pdf
*/
//FOP
import org.apache.fop.apps.Driver;
import org.apache.fop.messaging.MessageHandler;
//Avalon
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.ConsoleLogger;
//Java
import 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());}
}
}