On 12/13/2011 12:43 PM, Rob Sargent wrote:
I'm using fop-1.0 compile a year or so ago.  Perhaps I just need to
download the trunk?  Certainly happy to do that given a glimmer of hope
that it will solve my problem.

I think I've hit a catch-22 when generating IF
(application/X-fop-areatree) output. To generate this format I believe
one is forced to use "factory.newTransformer.transform(xsltSource)" as
opposed to the no-arg constructor.  And once one has done that one
cannot use transformer.setParameter(key, value).

What?

Why not?

This makes using<xsl:param>  in the IF-generating style-sheet neigh
impossible. Or I'm off my rocker (again).

It's certainly possible to set XSLT params. Here's some code almost verbatim from what I'm working on. It makes references to a `conf' object which holds pre-configured XSLT transformer factories etc, but you're probably just going to allocate the factory directory.


            FopFactory fopFactory = conf.getFopFactory();

// Create a user agent (a fop processor, really) to do the work.
            FOUserAgent userAgent = fopFactory.newFOUserAgent();

//Create an instance of the target renderer so the XMLRenderer can use its font setup Renderer targetRenderer = userAgent.getRendererFactory().createRenderer(
                    userAgent, outMimeType);

            //Create the XMLRenderer to create the area tree XML
            XMLRenderer xmlRenderer = new XMLRenderer();
            xmlRenderer.setUserAgent(userAgent);
            // TODO, probably only in fop svn:
// use setTransformerHandler to output directly to W3C DOM insead of
            // serializing to file.

            //Tell the XMLRenderer to mimic the target renderer
            xmlRenderer.mimicRenderer(targetRenderer);

            //Make sure the prepared XMLRenderer is used
            userAgent.setRendererOverride(xmlRenderer);
            userAgent.setURIResolver(uriResolver);

// Construct fop (the MIME type here is unimportant due to the override
            // on the user agent)
            Fop fop = fopFactory.newFop(null, userAgent, atOutStream);

            // Setup XSLT
TransformerFactory transformerFactory = conf.getTransformerFactory(); Transformer transformer = transformerFactory.newTransformer( xsltSource );
            transformer.setParameter("classadSection", classadSection);

// Resulting SAX events (the generated FO) must be piped through to FOP
            Result res = new SAXResult(fop.getDefaultHandler());

            File f = File.createTempFile("xslfo", ".xml");
            FileOutputStream fos = new FileOutputStream(f);
            Result res2 = new StreamResult(fos);
            transformer.transform( xmlInStream, res2 );
            fos.close();


             Transformer transformer = null;
             TransformerFactory factory = TransformerFactory.newInstance();

             if (xsltSource == null) {
                 // Not generating IF
                 transformer = factory.newTransformer();
             }
             else {
                 // Generating IF, xsltSource is
                 transformer = factory.newTransformer(xsltSource);
             }
             if (xsltParameterMap != null) {
                 // The values in the map are not applied when making IF
                 // I suspect because the stylesheet has already been read
                 applyXsltParameterMap(transformer); //Iterates on map:
transformer.setParameter(k,v)
             }
             transformer.transform(src, result);
             resultBytes = out.toByteArray();

Where xsltSource is constructed via

             xslUrl = new URL("jar:file://" + getBundlePath() +
                               "/lib/book-printing-core.jar!/" +
xsltFilename); //<== something.xsl
             inputstream = xslUrl.openStream();
             BufferedInputStream bis = new BufferedInputStream(inputstream);

             xsltSource = new StreamSource(bis);

If I don't use the second form of the constructor (with stylesheet) I do
not get the IF.  Indeed it's an error condition because the transformer
expect fo not xsl as the source.


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-h...@xmlgraphics.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-h...@xmlgraphics.apache.org

Reply via email to