diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/embedding/java/embedding/intermediate/ExampleStamp.java | 58 | ||||
-rw-r--r-- | examples/embedding/xml/xslt/ifstamp.xsl | 49 |
2 files changed, 80 insertions, 27 deletions
diff --git a/examples/embedding/java/embedding/intermediate/ExampleStamp.java b/examples/embedding/java/embedding/intermediate/ExampleStamp.java index c6123b718..42ea34137 100644 --- a/examples/embedding/java/embedding/intermediate/ExampleStamp.java +++ b/examples/embedding/java/embedding/intermediate/ExampleStamp.java @@ -28,16 +28,18 @@ import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResult; +import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import org.xml.sax.SAXException; + import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; -import org.apache.fop.area.AreaTreeModel; -import org.apache.fop.area.AreaTreeParser; -import org.apache.fop.area.RenderPagesModel; -import org.apache.fop.fonts.FontInfo; -import org.xml.sax.SAXException; +import org.apache.fop.render.intermediate.IFDocumentHandler; +import org.apache.fop.render.intermediate.IFException; +import org.apache.fop.render.intermediate.IFParser; +import org.apache.fop.render.intermediate.IFUtil; import embedding.ExampleObj2XML; import embedding.model.ProjectTeam; @@ -53,30 +55,35 @@ public class ExampleStamp { /** * Stamps an intermediate file and renders it to a PDF file. - * @param atfile the intermediate file (area tree XML) + * @param iffile the intermediate file (area tree XML) * @param stampSheet the stylesheet that does the stamping * @param pdffile the target PDF file * @throws IOException In case of an I/O problem * @throws TransformerException In case of a XSL transformation problem * @throws SAXException In case of an XML-related problem + * @throws IFException if there was an IF-related error while creating the output file */ - public void stampToPDF(File atfile, File stampSheet, File pdffile) - throws IOException, TransformerException, SAXException { + public void stampToPDF(File iffile, File stampSheet, File pdffile) + throws IOException, TransformerException, SAXException, IFException { // Setup output OutputStream out = new java.io.FileOutputStream(pdffile); out = new java.io.BufferedOutputStream(out); try { - //Setup fonts and user agent - FontInfo fontInfo = new FontInfo(); + //user agent FOUserAgent userAgent = fopFactory.newFOUserAgent(); - //Construct the AreaTreeModel that will received the individual pages - AreaTreeModel treeModel = new RenderPagesModel(userAgent, - MimeConstants.MIME_PDF, fontInfo, out); + //Setup target handler + String mime = MimeConstants.MIME_PDF + ";mode=painter"; + IFDocumentHandler targetHandler = fopFactory.getRendererFactory().createDocumentHandler( + userAgent, mime); - //Iterate over all intermediate files - AreaTreeParser parser = new AreaTreeParser(); - Source src = new StreamSource(atfile); + //Setup fonts + IFUtil.setupFonts(targetHandler); + targetHandler.setResult(new StreamResult(pdffile)); + + IFParser parser = new IFParser(); + + Source src = new StreamSource(iffile); Source xslt = new StreamSource(stampSheet); //Setup Transformer for XSLT processing @@ -84,13 +91,10 @@ public class ExampleStamp { Transformer transformer = tFactory.newTransformer(xslt); //Send XSLT result to AreaTreeParser - SAXResult res = new SAXResult(parser.getContentHandler(treeModel, userAgent)); + SAXResult res = new SAXResult(parser.getContentHandler(targetHandler, userAgent)); //Start XSLT transformation and area tree parsing transformer.transform(src, res); - - //Signal the end of the processing. The renderer can finalize the target document. - treeModel.endDocument(); } finally { out.close(); } @@ -102,7 +106,7 @@ public class ExampleStamp { */ public static void main(String[] args) { try { - System.out.println("FOP ExampleConcat\n"); + System.out.println("FOP ExampleConcat (for the Intermediate Format)\n"); //Setup directories File baseDir = new File("."); @@ -111,10 +115,10 @@ public class ExampleStamp { //Setup output file File xsltfile = new File(baseDir, "xml/xslt/projectteam2fo.xsl"); - File atfile = new File(outDir, "team.at.xml"); - File stampxsltfile = new File(baseDir, "xml/xslt/atstamp.xsl"); - File pdffile = new File(outDir, "ResultStamped.pdf"); - System.out.println("Intermediate file : " + atfile.getCanonicalPath()); + File iffile = new File(outDir, "team.at.xml"); + File stampxsltfile = new File(baseDir, "xml/xslt/ifstamp.xsl"); + File pdffile = new File(outDir, "ResultIFStamped.pdf"); + System.out.println("Intermediate file : " + iffile.getCanonicalPath()); System.out.println("Stamp XSLT: " + stampxsltfile.getCanonicalPath()); System.out.println("PDF Output File: " + pdffile.getCanonicalPath()); System.out.println(); @@ -125,11 +129,11 @@ public class ExampleStamp { ExampleConcat concatapp = new ExampleConcat(); concatapp.convertToIntermediate( team1.getSourceForProjectTeam(), - new StreamSource(xsltfile), atfile); + new StreamSource(xsltfile), iffile); //Stamp document and produce a PDF from the intermediate format ExampleStamp app = new ExampleStamp(); - app.stampToPDF(atfile, stampxsltfile, pdffile); + app.stampToPDF(iffile, stampxsltfile, pdffile); System.out.println("Success!"); diff --git a/examples/embedding/xml/xslt/ifstamp.xsl b/examples/embedding/xml/xslt/ifstamp.xsl new file mode 100644 index 000000000..3402e2281 --- /dev/null +++ b/examples/embedding/xml/xslt/ifstamp.xsl @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- $Id$ --> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:if="http://xmlgraphics.apache.org/fop/intermediate"> + <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/> + <!-- ========================= --> + <!-- stamping... --> + <!-- ========================= --> + <xsl:template match="if:content"> + <xsl:copy> + <xsl:apply-templates select="@*"/> + + <!-- Stamp a big "SPECIMEN" text over the whole page using an area tree fragment inserted at the right place... --> + <if:g transform="translate(100000, 750000) rotate(-55)"> + <if:font family="sans-serif" style="normal" weight="400" variant="normal" size="160000" + color="#dfdfdf"/> + <if:text xml:space="preserve" x="0" y="0">SPECIMEN</if:text> + </if:g> + <!-- Note: The free transformation above will not work with AFP output. In such a case, + using an embedded SVG graphic is better. --> + + <xsl:apply-templates select="child::*"/> + </xsl:copy> + </xsl:template> + <!-- ========================= --> + <!-- identity transformation --> + <!-- ========================= --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> |