(3rd try...could'nt get to post this message)
Hi Andreas,
Below is the code:
// STEP 1: Transform templates to FO
StringWriter writer = new StringWriter();
StreamResult foResult = new StreamResult(writer);
HashMap foParameters = new HashMap(parameters);
foParameters.put("templateInstanceGroups", templateInstanceGroups);
transform(TRANSFORM_FO, templateInstanceGroups, editable, null,
foParameters,
foResult);
writer.flush();
if (SystemUtil.isDevelopmentMode() || logger.isDebugEnabled())
{
System.out.println("------------------------------------------------------");
System.out.println("------------------------------------------------------");
System.out.println("-------------------- FO
-----------------------------");
System.out.println("------------------------------------------------------");
System.out.println(writer.toString());
System.out.println("------------------------------------------------------");
System.out.println("------------------------------------------------------");
System.out.println("------------------------------------------------------");
System.out.println("------------------------------------------------------");
}
// STEP 2: Transform FO to Area Tree
FopFactory fopFactory = FopFactory.newInstance();
// Used to find images
fopFactory.setURIResolver(TIPResourceResolver.DEFAULT_URI_RESOLVER);
// configure foUserAgent
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
//Create an instance of the target renderer so the XMLRenderer can use
its
font setup
Renderer targetRenderer =
foUserAgent.getRendererFactory().createRenderer
(foUserAgent, MimeConstants.MIME_PDF);
//Create the XMLRenderer to create the intermediate format (area tree
XML)
XMLRenderer xmlRenderer = new XMLRenderer();
xmlRenderer.setUserAgent(foUserAgent);
//Tell the XMLRenderer to mimic the target renderer
xmlRenderer.mimicRenderer(targetRenderer);
//Make sure the prepared XMLRenderer is used
foUserAgent.setRendererOverride(xmlRenderer);
File areaTreeFile = new File(atFile); // area tree file
OutputStream out = new java.io.FileOutputStream(areaTreeFile);
out = new java.io.BufferedOutputStream(out);
if (out == null)
{
throw new IllegalArgumentException("PDF production requires an
OutputStream for binary data, not a Writer, which is for
character data.");
}
Fop fop = (Fop)fopFactory.newFop(null, foUserAgent, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
StreamSource foSource = new StreamSource(new
StringReader(writer.toString()));
Result areaTreeResult = new SAXResult(fop.getDefaultHandler());
System.out.println("--- Start Area tree transform");
long start = System.currentTimeMillis();
transformer.transform(foSource, areaTreeResult);
long end = System.currentTimeMillis();
System.out.println("--- End Area tree transform: " + (end - start) /
1000.0);
out.close();
// STEP 3: Transform Area Tree to Area tree with last-odd-page omr
// Get the appropriate transformer name given the transform type
String transformerName = getTransformerName(TRANSFORM_AREA_TREE);
// Read area tree
InputStream is = new FileInputStream(areaTreeFile);
Source source = new StreamSource(is);
StringWriter atWriter = new StringWriter();
StreamResult areaTreeResult1 = new StreamResult(atWriter);
// Perform the transform
TransformUtil.transform(TransformUtil.TRANSFORM_STREAM,
transformerName,
parameters, source, areaTreeResult1);
// STEP 4: create PDF
OutputStream out2 = ((StreamResult)result).getOutputStream();
if (out2 == null)
{
throw new IllegalArgumentException("PDF production requires an
OutputStream for binary data, not a Writer, which is for character
data.");
}
//Setup fonts and user agent
FontInfo fontInfo = new FontInfo();
FOUserAgent userAgent = fopFactory.newFOUserAgent();
AreaTreeModel treeModel = new RenderPagesModel(userAgent,
MimeConstants.MIME_PDF, fontInfo, out2);
AreaTreeParser parser = new AreaTreeParser();
StreamSource atSource =
new StreamSource(new StringReader(atWriter.toString()));
parser.parse(atSource, treeModel, userAgent);
treeModel.endDocument();
}
catch (FOPException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SAXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Thanks
Kevin
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]