Two problem with this approach. First, you are using a lot of memory to
store
intermediate XML result in a string buffer. Second, you have to parse that
XML
again (FOP will do it for you, but it takes time). A better solution, as I
already
said before, is to register FOP as a receiver of SAX events fired by XALAN
on the first transformation - this was you eliminate both problems and do
all
your work in one pass. Just create a Transformer from the stylesheet and do
// 3. Create FOP driver and set rendering mode and output stream
org.apache.fop.apps.Driver driver = new org.apache.fop.apps.Driver();
driver.setRenderer(driver.RENDER_PDF);
driver.setOutputStream( <whatever you writing to> );
// 4. Create SAXResult based on FOP Driver content handler which
// will accept SAX events and build FOP tree
javax.xml.transform.sax.SAXResult saxResult =
new javax.xml.transform.sax.SAXResult( driver.getContentHandler() );
// 5. Use the Transformer to transform an XML Source and send the output
// to a Result object.
// Implicitely it will create the FOP tree by firing SAX events
transformer.transform( <whatever XML source you have>, saxResult );
YS
-----Original Message-----
From: Semprini Davide [mailto:[EMAIL PROTECTED]]
Sent: Monday, September 24, 2001 9:42 AM
To: [EMAIL PROTECTED]
Subject: Re: FOP WARNING
Okay,
The example that I give is only to explain
that you can perform the PDF in two distinc phase
1) perform a trasformation
2) use driver
You can use the "tranform method"
with input like Dynamic xml (Dom Document) or urlXML
and getting out a fo (Dom Document) or Writer object
YOU HAVE A LOT OF TRANSFORM TO USE!!!!!!
YOU HAVE TO SEE THE APIDOC FOR THE
COMPLETE DOCUMENTATION!!!!
For example in my project I use
xalan transform and with some
conversion I use the Fop driver
and my XML is dynamic.
WITH Transformer XALAN:
StringWriter SstringWriter = new StringWriter();
/* this is the fo file */
StreamResult SstreamResult = new StreamResult(SstringWriter);
transformer.transform(SstreamSourceXML, SstreamResult)
/* convert the fo file in a right format for driver
ByteArrayOutputStream outPDF = new ByteArrayOutputStream();
SResult = SstringWriter.toString();
ByteArrayInputStream str = new ByteArrayInputStream(SResult.getBytes());
Driver driver = new Driver(new InputSource(str), outPDF);
Is this performance????? I think yes!!
Bye
Amit wrote:
Looking at your code I am guessing that you wrote the fo file out to the
filesystem and then used the driver to convert it to PDF...how is
performance on that?
Instead of writing the file out to the file system did you try converting
into some sorta stream and use the driver??
thanks for your help
Amit
Semprini Davide wrote:
Hi,
I have had the same problem!!!!!!!!
Nobody give me a response!
This code in FOP Home page don't work (for me!) !!!!!
Driver driver = new Driver(); driver.setRenderer(Driver.RENDER_PDF);
InputHandler inputHandler = new XSLTInputHandler(xmlFile, xslFile);
XMLReader parser = inputHandler.getParser(); driver.setOutputStream(new
FileOutputStream(outFile)); driver.render(parser,
inputHandler.getInputSource());
I have solved the problem using 2 phase:
1) generate the transformation using XSLTrasform, Xalan1Transform etc...
(you can choose)
code:
XSLTransform traXSLT = new XSLTransform();
traXSLT.transform(urlXML, urlXSL, urlFoFile);
You can choose 4 transform type (see the api documentation)
2) Apply the result at the driver
FileInputStream file = new FileInputStream(urlFoFile);
response.setContentType("application/pdf");
Driver driver = new Driver(new InputSource(file), out);
driver.setRenderer(Driver.RENDER_PDF);
driver.run();
byte[] content = out.toByteArray();
response.setContentLength(content.length);
response.getOutputStream().write(content);
response.getOutputStream().flush();
THIS CODE WORK FINE!!!
Bye
Amit wrote:
I am trying to generate PDFs using FOP-0.20.1. The input files are xmland
xsl filesI am using JRun3.0 with java1.2.2Here is the error I getWARNING:
Unknown formatting object ^rootAnybody any
ideas?---------------------------------------------------------------------T
o unsubscribe, e-mail: [EMAIL PROTECTED] additional
commands, email: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]