Process an XSL-FO Document

Sometimes you need to process an XSL-FO document that is the result of an XSLT transformation. Actually, the XSL-FO document doesn’t exist, it is just a stream of SAX events. In a Java application, this can be done with the FOP processor classes:

//the XML documentC:Data_LocalxmldocsAirWings_xpath_xslt.xml//the XSL stylesheetC:Data_LocalxmldocsAirWings_xslt_fop.xsl//the output - a PDF fileC:Data_LocalxmldocsAirWings_xslt_1.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 javax.xml.transform.*;import javax.xml.transform.stream.*;import javax.xml.transform.sax.SAXResult;public class XSL_FO_and_XML_XSLT_1{   public static void main(String[] args)      {      OutputStream OS_pdf=null;      Transformer tXML=null;               //create a 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);             //specify the PDF format      fop.setRenderer(Driver.RENDER_PDF);                                         //the PDF file      try{         File F_pdf=new File                ("C://Data_Local//xml//docs//AirWings_xslt_1.pdf");         OS_pdf=new FileOutputStream(F_pdf);            fop.setOutputStream(OS_pdf);         }catch(java.io.FileNotFoundException e)            {MessageHandler.error("[***   "+e.getMessage()+"                                    ***]");}                                                 //create a TransformerFactory object      TransformerFactory tfXML=TransformerFactory.newInstance();               //setting the XSL stylesheet, AirWings_xslt_fop.xsl      Source sXSL=new StreamSource(new File              ("C://Data_Local//xml//docs//AirWings_xslt_fop.xsl"));                      //getting a Transformer object      try{         tXML=tfXML.newTransformer(sXSL);         }catch             (javax.xml.transform.TransformerConfigurationException e)            {MessageHandler.error("[*** XSLT Error ***]");}               //setting the XML, AirWings_xpath_xslt.xml      Source sXML=new StreamSource(new File             ("C://Data_Local//xml//docs//AirWings_xpath_xslt.xml"));               //define the Result      Result rXML=new SAXResult(fop.getContentHandler());      //pass sXML and rXML to the transformer      try{         tXML.transform(sXML,rXML);         }catch(javax.xml.transform.TransformerException e)            {MessageHandler.error("[*** XSLT error ***]");}      }}         

Notice that there isn’t an .fo/.fop file.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: