aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/embedding/java/embedding/atxml/ExampleConcat.java219
-rw-r--r--examples/embedding/java/embedding/atxml/ExampleStamp.java143
-rw-r--r--examples/embedding/java/embedding/intermediate/ExampleConcat.java79
-rw-r--r--src/java/META-INF/services/org.apache.fop.render.Renderer3
-rw-r--r--src/java/META-INF/services/org.apache.fop.render.intermediate.IFDocumentHandler3
-rw-r--r--src/java/org/apache/fop/render/PrintRendererConfigurator.java36
-rw-r--r--src/java/org/apache/fop/render/RendererFactory.java7
-rw-r--r--src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java6
-rw-r--r--src/java/org/apache/fop/render/bitmap/TIFFDocumentHandlerMaker.java6
-rw-r--r--src/java/org/apache/fop/render/intermediate/AbstractIFDocumentHandlerMaker.java8
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFParser.java28
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFRenderer.java7
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFSerializer.java11
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFSerializerConfiguration.java80
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFSerializerMaker.java (renamed from src/java/org/apache/fop/render/intermediate/IFRendererMaker.java)27
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFUtil.java35
-rw-r--r--src/java/org/apache/fop/render/intermediate/util/IFConcatenator.java182
-rw-r--r--src/java/org/apache/fop/render/intermediate/util/IFDocumentHandlerProxy.java187
-rw-r--r--src/java/org/apache/fop/render/pcl/PCLDocumentHandlerMaker.java6
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFDocumentHandlerMaker.java6
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java41
-rw-r--r--src/java/org/apache/fop/render/ps/PSDocumentHandlerMaker.java6
-rw-r--r--src/java/org/apache/fop/render/ps/PSRendererConfigurator.java32
-rw-r--r--src/sandbox/org/apache/fop/render/svg/SVGDocumentHandlerMaker.java6
-rw-r--r--src/sandbox/org/apache/fop/render/svg/SVGPrintDocumentHandlerMaker.java6
25 files changed, 896 insertions, 274 deletions
diff --git a/examples/embedding/java/embedding/atxml/ExampleConcat.java b/examples/embedding/java/embedding/atxml/ExampleConcat.java
new file mode 100644
index 000000000..adec1b08c
--- /dev/null
+++ b/examples/embedding/java/embedding/atxml/ExampleConcat.java
@@ -0,0 +1,219 @@
+/*
+ * 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$ */
+
+package embedding.atxml;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+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.StreamSource;
+
+import org.xml.sax.SAXException;
+
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.Fop;
+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.apache.fop.render.Renderer;
+import org.apache.fop.render.xml.XMLRenderer;
+
+import embedding.ExampleObj2XML;
+import embedding.model.ProjectMember;
+import embedding.model.ProjectTeam;
+
+/**
+ * Example for the area tree XML format that demonstrates the concatenation of two documents
+ * rendered to the area tree XML format. A single PDF file is generated from the two area tree
+ * files.
+ */
+public class ExampleConcat {
+
+ // configure fopFactory as desired
+ private FopFactory fopFactory = FopFactory.newInstance();
+
+ /**
+ * Creates a sample ProjectTeam instance for this demo.
+ * @return ProjectTeam the newly created ProjectTeam instance
+ */
+ public static ProjectTeam createAnotherProjectTeam() {
+ ProjectTeam team = new ProjectTeam();
+ team.setProjectName("The Dynamic Duo");
+ team.addMember(new ProjectMember(
+ "Batman", "lead", "batman@heroes.org"));
+ team.addMember(new ProjectMember(
+ "Robin", "aid", "robin@heroes.org"));
+ return team;
+ }
+
+ /**
+ * Converts an XSL-FO document to an area tree XML file.
+ * @param src the source file
+ * @param xslt the stylesheet file
+ * @param areaTreeFile the target area tree XML file
+ * @throws IOException In case of an I/O problem
+ * @throws FOPException In case of a FOP problem
+ * @throws TransformerException In case of a XSL transformation problem
+ */
+ public void convertToAreaTreeXML(Source src, Source xslt, File areaTreeFile)
+ throws IOException, FOPException, TransformerException {
+
+ //Create a user agent
+ 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, MimeConstants.MIME_PDF);
+
+ //Create the XMLRenderer to create the area tree XML
+ XMLRenderer xmlRenderer = new XMLRenderer();
+ xmlRenderer.setUserAgent(userAgent);
+
+ //Tell the XMLRenderer to mimic the target renderer
+ xmlRenderer.mimicRenderer(targetRenderer);
+
+ //Make sure the prepared XMLRenderer is used
+ userAgent.setRendererOverride(xmlRenderer);
+
+ // Setup output
+ OutputStream out = new java.io.FileOutputStream(areaTreeFile);
+ out = new java.io.BufferedOutputStream(out);
+ try {
+ // Construct fop (the MIME type here is unimportant due to the override
+ // on the user agent)
+ Fop fop = fopFactory.newFop(null, userAgent, out);
+
+ // Setup XSLT
+ TransformerFactory factory = TransformerFactory.newInstance();
+ Transformer transformer;
+ if (xslt != null) {
+ transformer = factory.newTransformer(xslt);
+ } else {
+ transformer = factory.newTransformer();
+ }
+
+ // Resulting SAX events (the generated FO) must be piped through to FOP
+ Result res = new SAXResult(fop.getDefaultHandler());
+
+ // Start XSLT transformation and FOP processing
+ transformer.transform(src, res);
+ } finally {
+ out.close();
+ }
+ }
+
+ /**
+ * Concatenates an array of area tree XML files to a single PDF file.
+ * @param files the array of area tree XML files
+ * @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
+ */
+ public void concatToPDF(File[] files, File pdffile)
+ throws IOException, TransformerException, SAXException {
+ // 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();
+ FOUserAgent userAgent = fopFactory.newFOUserAgent();
+
+ //Construct the AreaTreeModel that will received the individual pages
+ AreaTreeModel treeModel = new RenderPagesModel(userAgent,
+ MimeConstants.MIME_PDF, fontInfo, out);
+
+ //Iterate over all area tree files
+ AreaTreeParser parser = new AreaTreeParser();
+ for (int i = 0; i < files.length; i++) {
+ Source src = new StreamSource(files[i]);
+ parser.parse(src, treeModel, userAgent);
+ }
+
+ //Signal the end of the processing. The renderer can finalize the target document.
+ treeModel.endDocument();
+ } finally {
+ out.close();
+ }
+ }
+
+ /**
+ * Main method.
+ * @param args command-line arguments
+ */
+ public static void main(String[] args) {
+ try {
+ System.out.println("FOP ExampleConcat\n");
+
+ //Setup directories
+ File baseDir = new File(".");
+ File outDir = new File(baseDir, "out");
+ outDir.mkdirs();
+
+ //Setup output file
+ File xsltfile = new File(baseDir, "xml/xslt/projectteam2fo.xsl");
+ File[] files = new File[] {
+ new File(outDir, "team1.at.xml"),
+ new File(outDir, "team2.at.xml")};
+ File pdffile = new File(outDir, "ResultConcat.pdf");
+ for (int i = 0; i < files.length; i++) {
+ System.out.println("Area Tree XML file " + (i + 1) + ": "
+ + files[i].getCanonicalPath());
+ }
+ System.out.println("PDF Output File: " + pdffile.getCanonicalPath());
+ System.out.println();
+
+
+ ProjectTeam team1 = ExampleObj2XML.createSampleProjectTeam();
+ ProjectTeam team2 = createAnotherProjectTeam();
+
+ ExampleConcat app = new ExampleConcat();
+
+ //Create area tree XML files
+ app.convertToAreaTreeXML(
+ team1.getSourceForProjectTeam(),
+ new StreamSource(xsltfile), files[0]);
+ app.convertToAreaTreeXML(
+ team2.getSourceForProjectTeam(),
+ new StreamSource(xsltfile), files[1]);
+
+ //Concatenate the individual area tree files to one document
+ app.concatToPDF(files, pdffile);
+
+ System.out.println("Success!");
+
+ } catch (Exception e) {
+ e.printStackTrace(System.err);
+ System.exit(-1);
+ }
+ }
+
+}
diff --git a/examples/embedding/java/embedding/atxml/ExampleStamp.java b/examples/embedding/java/embedding/atxml/ExampleStamp.java
new file mode 100644
index 000000000..53a12d6ed
--- /dev/null
+++ b/examples/embedding/java/embedding/atxml/ExampleStamp.java
@@ -0,0 +1,143 @@
+/*
+ * 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$ */
+
+package embedding.atxml;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.xml.transform.Source;
+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.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 embedding.ExampleObj2XML;
+import embedding.model.ProjectTeam;
+
+/**
+ * Example for the area tree XML format that demonstrates the stamping of a document with some
+ * kind of watermark. The resulting document is then rendered to a PDF file.
+ */
+public class ExampleStamp {
+
+ // configure fopFactory as desired
+ private FopFactory fopFactory = FopFactory.newInstance();
+
+ /**
+ * Stamps an area tree XML file and renders it to a PDF file.
+ * @param atfile the area tree XML file
+ * @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
+ */
+ public void stampToPDF(File atfile, File stampSheet, File pdffile)
+ throws IOException, TransformerException, SAXException {
+ // 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();
+ FOUserAgent userAgent = fopFactory.newFOUserAgent();
+
+ //Construct the AreaTreeModel that will received the individual pages
+ AreaTreeModel treeModel = new RenderPagesModel(userAgent,
+ MimeConstants.MIME_PDF, fontInfo, out);
+
+ //Iterate over all area tree files
+ AreaTreeParser parser = new AreaTreeParser();
+ Source src = new StreamSource(atfile);
+ Source xslt = new StreamSource(stampSheet);
+
+ //Setup Transformer for XSLT processing
+ TransformerFactory tFactory = TransformerFactory.newInstance();
+ Transformer transformer = tFactory.newTransformer(xslt);
+
+ //Send XSLT result to AreaTreeParser
+ SAXResult res = new SAXResult(parser.getContentHandler(treeModel, 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();
+ }
+ }
+
+ /**
+ * Main method.
+ * @param args command-line arguments
+ */
+ public static void main(String[] args) {
+ try {
+ System.out.println("FOP ExampleConcat\n");
+
+ //Setup directories
+ File baseDir = new File(".");
+ File outDir = new File(baseDir, "out");
+ outDir.mkdirs();
+
+ //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("Area Tree XML file : " + atfile.getCanonicalPath());
+ System.out.println("Stamp XSLT: " + stampxsltfile.getCanonicalPath());
+ System.out.println("PDF Output File: " + pdffile.getCanonicalPath());
+ System.out.println();
+
+ ProjectTeam team1 = ExampleObj2XML.createSampleProjectTeam();
+
+ //Create area tree XML file
+ ExampleConcat concatapp = new ExampleConcat();
+ concatapp.convertToAreaTreeXML(
+ team1.getSourceForProjectTeam(),
+ new StreamSource(xsltfile), atfile);
+
+ //Stamp document and produce a PDF from the area tree XML format
+ ExampleStamp app = new ExampleStamp();
+ app.stampToPDF(atfile, stampxsltfile, pdffile);
+
+ System.out.println("Success!");
+
+ } catch (Exception e) {
+ e.printStackTrace(System.err);
+ System.exit(-1);
+ }
+ }
+
+}
diff --git a/examples/embedding/java/embedding/intermediate/ExampleConcat.java b/examples/embedding/java/embedding/intermediate/ExampleConcat.java
index 6967ebc8a..a5765f49b 100644
--- a/examples/embedding/java/embedding/intermediate/ExampleConcat.java
+++ b/examples/embedding/java/embedding/intermediate/ExampleConcat.java
@@ -29,20 +29,22 @@ 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.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
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.apache.fop.render.Renderer;
-import org.apache.fop.render.xml.XMLRenderer;
-import org.xml.sax.SAXException;
+import org.apache.fop.render.intermediate.IFContext;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFException;
+import org.apache.fop.render.intermediate.IFSerializer;
+import org.apache.fop.render.intermediate.IFUtil;
+import org.apache.fop.render.intermediate.util.IFConcatenator;
import embedding.ExampleObj2XML;
import embedding.model.ProjectMember;
@@ -50,7 +52,7 @@ import embedding.model.ProjectTeam;
/**
* Example for the intermediate format that demonstrates the concatenation of two documents
- * renderered to the intermediate format. A single PDF file is generated from the two intermediate
+ * rendered to the intermediate format. A single PDF file is generated from the two intermediate
* files.
*/
public class ExampleConcat {
@@ -76,7 +78,7 @@ public class ExampleConcat {
* Converts an XSL-FO document to an intermediate file.
* @param src the source file
* @param xslt the stylesheet file
- * @param intermediate the target intermediate file (area tree XML)
+ * @param intermediate the target intermediate file
* @throws IOException In case of an I/O problem
* @throws FOPException In case of a FOP problem
* @throws TransformerException In case of a XSL transformation problem
@@ -87,25 +89,26 @@ public class ExampleConcat {
//Create a user agent
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, MimeConstants.MIME_PDF);
+ //Create an instance of the target document handler so the IFSerializer
+ //can use its font setup
+ IFDocumentHandler targetHandler = userAgent.getRendererFactory().createDocumentHandler(
+ userAgent, MimeConstants.MIME_PDF + ";mode=painter");
- //Create the XMLRenderer to create the intermediate format (area tree XML)
- XMLRenderer xmlRenderer = new XMLRenderer();
- xmlRenderer.setUserAgent(userAgent);
+ //Create the IFSerializer to write the intermediate format
+ IFSerializer ifSerializer = new IFSerializer();
+ ifSerializer.setContext(new IFContext(userAgent));
- //Tell the XMLRenderer to mimic the target renderer
- xmlRenderer.mimicRenderer(targetRenderer);
+ //Tell the IFSerializer to mimic the target format
+ ifSerializer.mimicDocumentHandler(targetHandler);
- //Make sure the prepared XMLRenderer is used
- userAgent.setRendererOverride(xmlRenderer);
+ //Make sure the prepared document handler is used
+ userAgent.setDocumentHandlerOverride(ifSerializer);
// Setup output
OutputStream out = new java.io.FileOutputStream(intermediate);
out = new java.io.BufferedOutputStream(out);
try {
- // Construct fop (the MIME type here is unimportant due to the override
+ // Construct FOP (the MIME type here is unimportant due to the override
// on the user agent)
Fop fop = fopFactory.newFop(null, userAgent, out);
@@ -130,35 +133,41 @@ public class ExampleConcat {
/**
* Concatenates an array of intermediate files to a single PDF file.
- * @param files the array of intermediate files (area tree XML)
+ * @param files the array of intermediate files
* @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 concatToPDF(File[] files, File pdffile)
- throws IOException, TransformerException, SAXException {
+ 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();
+ //Setup 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);
+
+ //Setup fonts
+ IFUtil.setupFonts(targetHandler);
+ targetHandler.setResult(new StreamResult(pdffile));
+
+ IFConcatenator concatenator = new IFConcatenator(targetHandler, null);
//Iterate over all intermediate files
- AreaTreeParser parser = new AreaTreeParser();
for (int i = 0; i < files.length; i++) {
Source src = new StreamSource(files[i]);
- parser.parse(src, treeModel, userAgent);
+ concatenator.appendDocument(src);
}
- //Signal the end of the processing. The renderer can finalize the target document.
- treeModel.endDocument();
+ //Signal the end of the processing so the target file can be finalized properly.
+ concatenator.finish();
} finally {
out.close();
}
@@ -170,7 +179,7 @@ public class ExampleConcat {
*/
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(".");
@@ -180,9 +189,9 @@ public class ExampleConcat {
//Setup output file
File xsltfile = new File(baseDir, "xml/xslt/projectteam2fo.xsl");
File[] files = new File[] {
- new File(outDir, "team1.at.xml"),
- new File(outDir, "team2.at.xml")};
- File pdffile = new File(outDir, "ResultConcat.pdf");
+ new File(outDir, "team1.if.xml"),
+ new File(outDir, "team2.if.xml")};
+ File pdffile = new File(outDir, "ResultIFConcat.pdf");
for (int i = 0; i < files.length; i++) {
System.out.println("Intermediate file " + (i + 1) + ": "
+ files[i].getCanonicalPath());
diff --git a/src/java/META-INF/services/org.apache.fop.render.Renderer b/src/java/META-INF/services/org.apache.fop.render.Renderer
index 7548d7936..0e6f12cb5 100644
--- a/src/java/META-INF/services/org.apache.fop.render.Renderer
+++ b/src/java/META-INF/services/org.apache.fop.render.Renderer
@@ -7,5 +7,4 @@ org.apache.fop.render.xml.XMLRendererMaker
org.apache.fop.render.awt.AWTRendererMaker
org.apache.fop.render.print.PrintRendererMaker
org.apache.fop.render.afp.AFPRendererMaker
-org.apache.fop.render.pcl.PCLRendererMaker
-org.apache.fop.render.intermediate.IFRendererMaker
+org.apache.fop.render.pcl.PCLRendererMaker \ No newline at end of file
diff --git a/src/java/META-INF/services/org.apache.fop.render.intermediate.IFDocumentHandler b/src/java/META-INF/services/org.apache.fop.render.intermediate.IFDocumentHandler
index efa5c7a3c..cbf9c58a5 100644
--- a/src/java/META-INF/services/org.apache.fop.render.intermediate.IFDocumentHandler
+++ b/src/java/META-INF/services/org.apache.fop.render.intermediate.IFDocumentHandler
@@ -2,4 +2,5 @@ org.apache.fop.render.pdf.PDFDocumentHandlerMaker
org.apache.fop.render.pcl.PCLDocumentHandlerMaker
org.apache.fop.render.bitmap.TIFFDocumentHandlerMaker
org.apache.fop.render.ps.PSDocumentHandlerMaker
-org.apache.fop.render.afp.AFPDocumentHandlerMaker \ No newline at end of file
+org.apache.fop.render.afp.AFPDocumentHandlerMaker
+org.apache.fop.render.intermediate.IFSerializerMaker \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/PrintRendererConfigurator.java b/src/java/org/apache/fop/render/PrintRendererConfigurator.java
index e01750b99..f1a76be1d 100644
--- a/src/java/org/apache/fop/render/PrintRendererConfigurator.java
+++ b/src/java/org/apache/fop/render/PrintRendererConfigurator.java
@@ -41,9 +41,11 @@ import org.apache.xmlgraphics.util.ClasspathResource;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FopFactory;
+import org.apache.fop.fonts.CustomFontCollection;
import org.apache.fop.fonts.EmbedFontInfo;
import org.apache.fop.fonts.EncodingMode;
import org.apache.fop.fonts.FontCache;
+import org.apache.fop.fonts.FontCollection;
import org.apache.fop.fonts.FontEventAdapter;
import org.apache.fop.fonts.FontEventListener;
import org.apache.fop.fonts.FontInfo;
@@ -53,13 +55,16 @@ import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.fonts.FontUtil;
import org.apache.fop.fonts.autodetect.FontFileFinder;
import org.apache.fop.fonts.autodetect.FontInfoFinder;
+import org.apache.fop.fonts.base14.Base14FontCollection;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
import org.apache.fop.util.LogUtil;
/**
* Base Print renderer configurator (mostly handles font configuration)
*/
public class PrintRendererConfigurator extends AbstractRendererConfigurator
- implements RendererConfigurator {
+ implements RendererConfigurator, IFDocumentHandlerConfigurator {
/** logger instance */
protected static Log log = LogFactory.getLog(PrintRendererConfigurator.class);
@@ -452,4 +457,33 @@ public class PrintRendererConfigurator extends AbstractRendererConfigurator
return embedFontInfo;
}
+ // ---=== IFDocumentHandler configuration ===---
+
+ /** {@inheritDoc} */
+ public void configure(IFDocumentHandler documentHandler) throws FOPException {
+ //nop
+ }
+
+ /** {@inheritDoc} */
+ public void setupFontInfo(IFDocumentHandler documentHandler, FontInfo fontInfo)
+ throws FOPException {
+ FontManager fontManager = userAgent.getFactory().getFontManager();
+ List fontCollections = new java.util.ArrayList();
+ fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled()));
+
+ Configuration cfg = super.getRendererConfig(documentHandler.getMimeType());
+ if (cfg != null) {
+ FontResolver fontResolver = new DefaultFontResolver(userAgent);
+ FontEventListener listener = new FontEventAdapter(
+ userAgent.getEventBroadcaster());
+ List fontList = buildFontList(cfg, fontResolver, listener);
+ fontCollections.add(new CustomFontCollection(fontResolver, fontList));
+ }
+
+ fontManager.setup(fontInfo,
+ (FontCollection[])fontCollections.toArray(
+ new FontCollection[fontCollections.size()]));
+ documentHandler.setFontInfo(fontInfo);
+ }
+
}
diff --git a/src/java/org/apache/fop/render/RendererFactory.java b/src/java/org/apache/fop/render/RendererFactory.java
index 2b26e4881..b12664818 100644
--- a/src/java/org/apache/fop/render/RendererFactory.java
+++ b/src/java/org/apache/fop/render/RendererFactory.java
@@ -287,7 +287,8 @@ public class RendererFactory {
} else {
AbstractRendererMaker rendMaker = getRendererMaker(outputFormat);
AbstractIFDocumentHandlerMaker documentHandlerMaker = null;
- boolean outputStreamMissing = (userAgent.getRendererOverride() == null);
+ boolean outputStreamMissing = (userAgent.getRendererOverride() == null)
+ && (userAgent.getDocumentHandlerOverride() == null);
if (rendMaker == null) {
documentHandlerMaker = getDocumentHandlerMaker(outputFormat);
if (documentHandlerMaker != null) {
@@ -299,6 +300,7 @@ public class RendererFactory {
}
if (userAgent.getRendererOverride() != null
|| rendMaker != null
+ || userAgent.getDocumentHandlerOverride() != null
|| documentHandlerMaker != null) {
if (outputStreamMissing) {
throw new FOPException(
@@ -418,7 +420,8 @@ public class RendererFactory {
Iterator providers = Service.providers(IFDocumentHandler.class);
if (providers != null) {
while (providers.hasNext()) {
- AbstractIFDocumentHandlerMaker maker = (AbstractIFDocumentHandlerMaker)providers.next();
+ AbstractIFDocumentHandlerMaker maker
+ = (AbstractIFDocumentHandlerMaker)providers.next();
try {
if (log.isDebugEnabled()) {
log.debug("Dynamically adding maker for IFDocumentHandler: "
diff --git a/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java b/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java
index b788a1011..e0b13d979 100644
--- a/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java
+++ b/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java
@@ -24,7 +24,6 @@ import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Intermediate format document handler factory for AFP output.
@@ -52,9 +51,4 @@ public class AFPDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker {
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return new AFPRendererConfigurator(userAgent);
- }
-
}
diff --git a/src/java/org/apache/fop/render/bitmap/TIFFDocumentHandlerMaker.java b/src/java/org/apache/fop/render/bitmap/TIFFDocumentHandlerMaker.java
index 230ff49a3..4a6c9cbb7 100644
--- a/src/java/org/apache/fop/render/bitmap/TIFFDocumentHandlerMaker.java
+++ b/src/java/org/apache/fop/render/bitmap/TIFFDocumentHandlerMaker.java
@@ -24,7 +24,6 @@ import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Document handler factory for TIFF output.
@@ -51,9 +50,4 @@ public class TIFFDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker {
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return new TIFFRendererConfigurator(userAgent);
- }
-
}
diff --git a/src/java/org/apache/fop/render/intermediate/AbstractIFDocumentHandlerMaker.java b/src/java/org/apache/fop/render/intermediate/AbstractIFDocumentHandlerMaker.java
index f163c3776..7162a976c 100644
--- a/src/java/org/apache/fop/render/intermediate/AbstractIFDocumentHandlerMaker.java
+++ b/src/java/org/apache/fop/render/intermediate/AbstractIFDocumentHandlerMaker.java
@@ -45,14 +45,6 @@ public abstract class AbstractIFDocumentHandlerMaker {
public abstract String[] getSupportedMimeTypes();
/**
- * Returns a configurator object that can be used to
- * configure the document handler.
- * @param userAgent the user agent
- * @return a configurator object that can be used to configure the document handler
- */
- public abstract IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent);
-
- /**
* Indicates whether a specific MIME type is supported by this document handler.
* @param mimeType the MIME type (ex. "application/pdf")
* @return true if the MIME type is supported
diff --git a/src/java/org/apache/fop/render/intermediate/IFParser.java b/src/java/org/apache/fop/render/intermediate/IFParser.java
index 61d1838bc..92e71d105 100644
--- a/src/java/org/apache/fop/render/intermediate/IFParser.java
+++ b/src/java/org/apache/fop/render/intermediate/IFParser.java
@@ -79,15 +79,29 @@ public class IFParser implements IFConstants {
* @param documentHandler the intermediate format document handler used to process the IF events
* @param userAgent the user agent
* @throws TransformerException if an error occurs while parsing the area tree XML
+ * @throws IFException if an IF-related error occurs inside the target document handler
*/
public void parse(Source src, IFDocumentHandler documentHandler, FOUserAgent userAgent)
- throws TransformerException {
- Transformer transformer = tFactory.newTransformer();
- transformer.setErrorListener(new DefaultErrorListener(log));
-
- SAXResult res = new SAXResult(getContentHandler(documentHandler, userAgent));
-
- transformer.transform(src, res);
+ throws TransformerException, IFException {
+ try {
+ Transformer transformer = tFactory.newTransformer();
+ transformer.setErrorListener(new DefaultErrorListener(log));
+
+ SAXResult res = new SAXResult(getContentHandler(documentHandler, userAgent));
+
+ transformer.transform(src, res);
+ } catch (TransformerException te) {
+ //Unpack original IFException if applicable
+ if (te.getCause() instanceof SAXException) {
+ SAXException se = (SAXException)te.getCause();
+ if (se.getCause() instanceof IFException) {
+ throw (IFException)se.getCause();
+ }
+ } else if (te.getCause() instanceof IFException) {
+ throw (IFException)te.getCause();
+ }
+ throw te;
+ }
}
/**
diff --git a/src/java/org/apache/fop/render/intermediate/IFRenderer.java b/src/java/org/apache/fop/render/intermediate/IFRenderer.java
index 03ec6a4c0..558ddfab8 100644
--- a/src/java/org/apache/fop/render/intermediate/IFRenderer.java
+++ b/src/java/org/apache/fop/render/intermediate/IFRenderer.java
@@ -176,12 +176,7 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
if (this.documentHandler == null) {
this.documentHandler = createDefaultDocumentHandler();
}
- IFDocumentHandlerConfigurator configurator = this.documentHandler.getConfigurator();
- if (configurator != null) {
- configurator.setupFontInfo(documentHandler, inFontInfo);
- } else {
- this.documentHandler.setDefaultFontInfo(inFontInfo);
- }
+ IFUtil.setupFonts(this.documentHandler, inFontInfo);
this.fontInfo = inFontInfo;
}
diff --git a/src/java/org/apache/fop/render/intermediate/IFSerializer.java b/src/java/org/apache/fop/render/intermediate/IFSerializer.java
index e4aa86e9e..cccef80c6 100644
--- a/src/java/org/apache/fop/render/intermediate/IFSerializer.java
+++ b/src/java/org/apache/fop/render/intermediate/IFSerializer.java
@@ -38,6 +38,7 @@ import org.apache.xmlgraphics.util.QName;
import org.apache.xmlgraphics.util.XMLizable;
import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.render.PrintRendererConfigurator;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.intermediate.extensions.AbstractAction;
import org.apache.fop.render.intermediate.extensions.Bookmark;
@@ -91,7 +92,7 @@ public class IFSerializer extends AbstractXMLWritingIFDocumentHandler
if (this.mimicHandler != null) {
return getMimickedDocumentHandler().getConfigurator();
} else {
- return new IFSerializerConfiguration(getUserAgent());
+ return new PrintRendererConfigurator(getUserAgent());
}
}
@@ -128,12 +129,16 @@ public class IFSerializer extends AbstractXMLWritingIFDocumentHandler
/** {@inheritDoc} */
public void setFontInfo(FontInfo fontInfo) {
- //nop, not used
+ if (this.mimicHandler != null) {
+ this.mimicHandler.setFontInfo(fontInfo);
+ }
}
/** {@inheritDoc} */
public void setDefaultFontInfo(FontInfo fontInfo) {
- //nop, not used
+ if (this.mimicHandler != null) {
+ this.mimicHandler.setDefaultFontInfo(fontInfo);
+ }
}
/** {@inheritDoc} */
diff --git a/src/java/org/apache/fop/render/intermediate/IFSerializerConfiguration.java b/src/java/org/apache/fop/render/intermediate/IFSerializerConfiguration.java
deleted file mode 100644
index 8f47c5511..000000000
--- a/src/java/org/apache/fop/render/intermediate/IFSerializerConfiguration.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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$ */
-
-package org.apache.fop.render.intermediate;
-
-import java.util.List;
-
-import org.apache.avalon.framework.configuration.Configuration;
-
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.fonts.CustomFontCollection;
-import org.apache.fop.fonts.FontCollection;
-import org.apache.fop.fonts.FontEventAdapter;
-import org.apache.fop.fonts.FontEventListener;
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.FontManager;
-import org.apache.fop.fonts.FontResolver;
-import org.apache.fop.fonts.base14.Base14FontCollection;
-import org.apache.fop.render.DefaultFontResolver;
-import org.apache.fop.render.PrintRendererConfigurator;
-
-/**
- * Configurator for the IFSerializer.
- */
-public class IFSerializerConfiguration extends PrintRendererConfigurator
- implements IFDocumentHandlerConfigurator {
-
- /**
- * Default constructor
- * @param userAgent user agent
- */
- public IFSerializerConfiguration(FOUserAgent userAgent) {
- super(userAgent);
- }
-
- /** {@inheritDoc} */
- public void configure(IFDocumentHandler documentHandler) throws FOPException {
- //nothing to do here
- }
-
- /** {@inheritDoc} */
- public void setupFontInfo(IFDocumentHandler documentHandler, FontInfo fontInfo)
- throws FOPException {
- FontManager fontManager = userAgent.getFactory().getFontManager();
- List fontCollections = new java.util.ArrayList();
- fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled()));
-
- Configuration cfg = super.getRendererConfig(documentHandler.getMimeType());
- if (cfg != null) {
- FontResolver fontResolver = new DefaultFontResolver(userAgent);
- FontEventListener listener = new FontEventAdapter(
- userAgent.getEventBroadcaster());
- List fontList = buildFontList(cfg, fontResolver, listener);
- fontCollections.add(new CustomFontCollection(fontResolver, fontList));
- }
-
- fontManager.setup(fontInfo,
- (FontCollection[])fontCollections.toArray(
- new FontCollection[fontCollections.size()]));
- documentHandler.setFontInfo(fontInfo);
- }
-
-}
diff --git a/src/java/org/apache/fop/render/intermediate/IFRendererMaker.java b/src/java/org/apache/fop/render/intermediate/IFSerializerMaker.java
index eb70f3028..699fd0549 100644
--- a/src/java/org/apache/fop/render/intermediate/IFRendererMaker.java
+++ b/src/java/org/apache/fop/render/intermediate/IFSerializerMaker.java
@@ -21,36 +21,27 @@ package org.apache.fop.render.intermediate;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.MimeConstants;
-import org.apache.fop.render.AbstractRendererMaker;
-import org.apache.fop.render.PrintRendererConfigurator;
-import org.apache.fop.render.Renderer;
-import org.apache.fop.render.RendererConfigurator;
/**
- * RendererMaker for the Intermediate Format Renderer.
+ * Intermediate format document handler factory for intermediate format XML output.
*/
-public class IFRendererMaker extends AbstractRendererMaker {
+public class IFSerializerMaker extends AbstractIFDocumentHandlerMaker {
- private static final String[] MIMES = new String[] {MimeConstants.MIME_FOP_IF};
-
- /**{@inheritDoc} */
- public Renderer makeRenderer(FOUserAgent userAgent) {
- return new IFRenderer();
- }
-
- /**{@inheritDoc} */
- public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
- return new PrintRendererConfigurator(userAgent);
+ /** {@inheritDoc} */
+ public IFDocumentHandler makeIFDocumentHandler(FOUserAgent ua) {
+ IFSerializer handler = new IFSerializer();
+ handler.setContext(new IFContext(ua));
+ return handler;
}
/** {@inheritDoc} */
public boolean needsOutputStream() {
- return false;
+ return true;
}
/** {@inheritDoc} */
public String[] getSupportedMimeTypes() {
- return MIMES;
+ return new String[] {MimeConstants.MIME_FOP_IF};
}
}
diff --git a/src/java/org/apache/fop/render/intermediate/IFUtil.java b/src/java/org/apache/fop/render/intermediate/IFUtil.java
index 513e1c786..2654eb2a3 100644
--- a/src/java/org/apache/fop/render/intermediate/IFUtil.java
+++ b/src/java/org/apache/fop/render/intermediate/IFUtil.java
@@ -22,6 +22,9 @@ package org.apache.fop.render.intermediate;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.fonts.FontInfo;
import org.apache.fop.util.DecimalFormatCache;
/**
@@ -137,4 +140,36 @@ public class IFUtil {
return sb.toString();
}
+ /**
+ * Sets up the fonts on a document handler. If the document handler provides a configurator
+ * object the configuration from the {@link FopFactory} will be used. Otherwise,
+ * a default font configuration will be set up.
+ * @param documentHandler the document handler
+ * @param fontInfo the font info object (may be null)
+ * @throws FOPException if an error occurs while setting up the fonts
+ */
+ public static void setupFonts(IFDocumentHandler documentHandler, FontInfo fontInfo)
+ throws FOPException {
+ if (fontInfo == null) {
+ fontInfo = new FontInfo();
+ }
+ IFDocumentHandlerConfigurator configurator = documentHandler.getConfigurator();
+ if (configurator != null) {
+ configurator.setupFontInfo(documentHandler, fontInfo);
+ } else {
+ documentHandler.setDefaultFontInfo(fontInfo);
+ }
+ }
+
+ /**
+ * Sets up the fonts on a document handler. If the document handler provides a configurator
+ * object the configuration from the {@link FopFactory} will be used. Otherwise,
+ * a default font configuration will be set up.
+ * @param documentHandler the document handler
+ * @throws FOPException if an error occurs while setting up the fonts
+ */
+ public static void setupFonts(IFDocumentHandler documentHandler) throws FOPException {
+ setupFonts(documentHandler, null);
+ }
+
}
diff --git a/src/java/org/apache/fop/render/intermediate/util/IFConcatenator.java b/src/java/org/apache/fop/render/intermediate/util/IFConcatenator.java
new file mode 100644
index 000000000..4b0a3fe68
--- /dev/null
+++ b/src/java/org/apache/fop/render/intermediate/util/IFConcatenator.java
@@ -0,0 +1,182 @@
+/*
+ * 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$ */
+
+package org.apache.fop.render.intermediate.util;
+
+
+import java.awt.Dimension;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+
+import org.apache.xmlgraphics.xmp.Metadata;
+
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFDocumentNavigationHandler;
+import org.apache.fop.render.intermediate.IFException;
+import org.apache.fop.render.intermediate.IFParser;
+
+/**
+ * This class allows to concatenate multiple intermediate format files to a single output file
+ * in the final format. It is based on the SAX API and is therefore very fast and does not
+ * require to load the individual documents into memory as DOM documents, for example.
+ * <p>
+ * Note: This class will filter/ignore any document navigation events. Support for this may be
+ * added later.
+ */
+public class IFConcatenator {
+
+ private IFDocumentHandler targetHandler;
+
+ private int nextPageIndex = 0;
+
+ /**
+ * Creates a new IF concatenator.
+ * @param targetHandler the target document handler
+ * @param metadata the metadata object for the generated file (may be null)
+ * @throws IFException if an IF-related error occurs
+ */
+ public IFConcatenator(IFDocumentHandler targetHandler, Metadata metadata) throws IFException {
+ this.targetHandler = targetHandler;
+ startDocument(metadata);
+ }
+
+ private void startDocument(Metadata metadata) throws IFException {
+ this.targetHandler.startDocument();
+ this.targetHandler.startDocumentHeader();
+ if (metadata != null) {
+ this.targetHandler.handleExtensionObject(metadata);
+ }
+ this.targetHandler.endDocumentHeader();
+ }
+
+ private void endDocument() throws IFException {
+ this.targetHandler.startPageTrailer();
+ this.targetHandler.endPageTrailer();
+ this.targetHandler.endDocument();
+ }
+
+ /**
+ * Returns the target document handler.
+ * @return the target document handler
+ */
+ protected IFDocumentHandler getTargetHandler() {
+ return this.targetHandler;
+ }
+
+ /**
+ * Properly finishes the current output file by creating an empty document trailer and calling
+ * {@link IFDocumentHandler#endDocument()}.
+ * @throws IFException if an IF-related error occurs
+ */
+ public void finish() throws IFException {
+ endDocument();
+ }
+
+ /**
+ * Appends another intermediate format document to the current output file. All document-level
+ * content (i.e. the document header and trailer) is ignored. This method shall not be called
+ * after {@link #finish()} has been called.
+ * @param src the JAXP Source identifying the input document
+ * @throws TransformerException if an XML-related exception occurs during
+ * @throws IFException if an IF-related error occurs
+ */
+ public void appendDocument(Source src) throws TransformerException, IFException {
+ IFParser parser = new IFParser();
+ parser.parse(src, new IFPageSequenceFilter(getTargetHandler()),
+ getTargetHandler().getContext().getUserAgent());
+ }
+
+ private class IFPageSequenceFilter extends IFDocumentHandlerProxy {
+
+ private boolean inPageSequence = false;
+
+ public IFPageSequenceFilter(IFDocumentHandler delegate) {
+ super(delegate);
+ }
+
+ /** {@inheritDoc} */
+ public void startDocument() throws IFException {
+ //ignore
+ }
+
+ /** {@inheritDoc} */
+ public void startDocumentHeader() throws IFException {
+ //ignore
+ }
+
+ /** {@inheritDoc} */
+ public void endDocumentHeader() throws IFException {
+ //ignore
+ }
+
+ /** {@inheritDoc} */
+ public void startPageSequence(String id) throws IFException {
+ assert !this.inPageSequence;
+ this.inPageSequence = true;
+
+ super.startPageSequence(id);
+ }
+
+ /** {@inheritDoc} */
+ public void startPage(int index, String name, String pageMasterName, Dimension size)
+ throws IFException {
+ //Adjust page indices
+ super.startPage(nextPageIndex, name, pageMasterName, size);
+ nextPageIndex++;
+ }
+
+ /** {@inheritDoc} */
+ public void endPageSequence() throws IFException {
+ super.endPageSequence();
+
+ assert this.inPageSequence;
+ this.inPageSequence = false;
+ }
+
+ /** {@inheritDoc} */
+ public void startDocumentTrailer() throws IFException {
+ //ignore
+ }
+
+ /** {@inheritDoc} */
+ public void endDocumentTrailer() throws IFException {
+ //ignore
+ }
+
+ /** {@inheritDoc} */
+ public void endDocument() throws IFException {
+ //ignore
+ }
+
+ /** {@inheritDoc} */
+ public void handleExtensionObject(Object extension) throws IFException {
+ if (inPageSequence) {
+ //Only pass through when inside page-sequence
+ super.handleExtensionObject(extension);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public IFDocumentNavigationHandler getDocumentNavigationHandler() {
+ return null; //Document Navigation is filtered!!!
+ }
+
+ }
+}
diff --git a/src/java/org/apache/fop/render/intermediate/util/IFDocumentHandlerProxy.java b/src/java/org/apache/fop/render/intermediate/util/IFDocumentHandlerProxy.java
new file mode 100644
index 000000000..3d89e812e
--- /dev/null
+++ b/src/java/org/apache/fop/render/intermediate/util/IFDocumentHandlerProxy.java
@@ -0,0 +1,187 @@
+/*
+ * 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$ */
+
+package org.apache.fop.render.intermediate.util;
+
+import java.awt.Dimension;
+
+import javax.xml.transform.Result;
+
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.render.intermediate.IFContext;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
+import org.apache.fop.render.intermediate.IFDocumentNavigationHandler;
+import org.apache.fop.render.intermediate.IFException;
+import org.apache.fop.render.intermediate.IFPainter;
+
+/**
+ * This class is a simple proxy that delegates all method calls to another {@link IFDocumentHandler}
+ * instance.
+ */
+public class IFDocumentHandlerProxy implements IFDocumentHandler {
+
+ /** the delegate IFDocumentHandler */
+ protected IFDocumentHandler delegate;
+
+ /**
+ * Creates a new proxy instance.
+ * @param delegate the delegate instance
+ */
+ public IFDocumentHandlerProxy(IFDocumentHandler delegate) {
+ this.delegate = delegate;
+ }
+
+ /** {@inheritDoc} */
+ public boolean supportsPagesOutOfOrder() {
+ return this.delegate.supportsPagesOutOfOrder();
+ }
+
+ /** {@inheritDoc} */
+ public String getMimeType() {
+ return this.delegate.getMimeType();
+ }
+
+ /** {@inheritDoc} */
+ public void setContext(IFContext context) {
+ this.delegate.setContext(context);
+ }
+
+ /** {@inheritDoc} */
+ public IFContext getContext() {
+ return this.delegate.getContext();
+ }
+
+ /** {@inheritDoc} */
+ public FontInfo getFontInfo() {
+ return this.delegate.getFontInfo();
+ }
+
+ /** {@inheritDoc} */
+ public void setFontInfo(FontInfo fontInfo) {
+ this.delegate.setFontInfo(fontInfo);
+ }
+
+ /** {@inheritDoc} */
+ public void setDefaultFontInfo(FontInfo fontInfo) {
+ this.delegate.setDefaultFontInfo(fontInfo);
+ }
+
+ /** {@inheritDoc} */
+ public IFDocumentHandlerConfigurator getConfigurator() {
+ return this.delegate.getConfigurator();
+ }
+
+ /** {@inheritDoc} */
+ public IFDocumentNavigationHandler getDocumentNavigationHandler() {
+ return this.delegate.getDocumentNavigationHandler();
+ }
+
+ /** {@inheritDoc} */
+ public void setResult(Result result) throws IFException {
+ this.delegate.setResult(result);
+ }
+
+ /** {@inheritDoc} */
+ public void startDocument() throws IFException {
+ this.delegate.startDocument();
+ }
+
+ /** {@inheritDoc} */
+ public void startDocumentHeader() throws IFException {
+ this.delegate.startDocumentHeader();
+ }
+
+ /** {@inheritDoc} */
+ public void endDocumentHeader() throws IFException {
+ this.delegate.endDocumentHeader();
+ }
+
+ /** {@inheritDoc} */
+ public void startPageSequence(String id) throws IFException {
+ this.delegate.startPageSequence(id);
+ }
+
+ /** {@inheritDoc} */
+ public void startPage(int index, String name, String pageMasterName, Dimension size)
+ throws IFException {
+ this.delegate.startPage(index, name, pageMasterName, size);
+ }
+
+ /** {@inheritDoc} */
+ public void startPageHeader() throws IFException {
+ this.delegate.startPageHeader();
+ }
+
+ /** {@inheritDoc} */
+ public void endPageHeader() throws IFException {
+ this.delegate.endPageHeader();
+ }
+
+ /** {@inheritDoc} */
+ public IFPainter startPageContent() throws IFException {
+ return this.delegate.startPageContent();
+ }
+
+ /** {@inheritDoc} */
+ public void endPageContent() throws IFException {
+ this.delegate.endPageContent();
+ }
+
+ /** {@inheritDoc} */
+ public void startPageTrailer() throws IFException {
+ this.delegate.startPageTrailer();
+ }
+
+ /** {@inheritDoc} */
+ public void endPageTrailer() throws IFException {
+ this.delegate.endPageTrailer();
+ }
+
+ /** {@inheritDoc} */
+ public void endPage() throws IFException {
+ this.delegate.endPage();
+ }
+
+ /** {@inheritDoc} */
+ public void endPageSequence() throws IFException {
+ this.delegate.endPageSequence();
+ }
+
+ /** {@inheritDoc} */
+ public void startDocumentTrailer() throws IFException {
+ this.delegate.startDocumentTrailer();
+ }
+
+ /** {@inheritDoc} */
+ public void endDocumentTrailer() throws IFException {
+ this.delegate.endDocumentTrailer();
+ }
+
+ /** {@inheritDoc} */
+ public void endDocument() throws IFException {
+ this.delegate.endDocument();
+ }
+
+ /** {@inheritDoc} */
+ public void handleExtensionObject(Object extension) throws IFException {
+ this.delegate.handleExtensionObject(extension);
+ }
+
+} \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/pcl/PCLDocumentHandlerMaker.java b/src/java/org/apache/fop/render/pcl/PCLDocumentHandlerMaker.java
index 62c2a4e77..db47c9712 100644
--- a/src/java/org/apache/fop/render/pcl/PCLDocumentHandlerMaker.java
+++ b/src/java/org/apache/fop/render/pcl/PCLDocumentHandlerMaker.java
@@ -24,7 +24,6 @@ import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Document handler factory for PCL output.
@@ -51,9 +50,4 @@ public class PCLDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker {
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return new PCLRendererConfigurator(userAgent);
- }
-
}
diff --git a/src/java/org/apache/fop/render/pdf/PDFDocumentHandlerMaker.java b/src/java/org/apache/fop/render/pdf/PDFDocumentHandlerMaker.java
index fa0a49ee7..532b50f80 100644
--- a/src/java/org/apache/fop/render/pdf/PDFDocumentHandlerMaker.java
+++ b/src/java/org/apache/fop/render/pdf/PDFDocumentHandlerMaker.java
@@ -24,7 +24,6 @@ import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Intermediate format document handler factory for PDF output.
@@ -51,9 +50,4 @@ public class PDFDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker {
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return new PDFRendererConfigurator(userAgent);
- }
-
}
diff --git a/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java b/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
index fccba1c25..f3511298e 100644
--- a/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
+++ b/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
@@ -27,34 +27,23 @@ import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.fonts.CustomFontCollection;
-import org.apache.fop.fonts.FontCollection;
-import org.apache.fop.fonts.FontEventAdapter;
-import org.apache.fop.fonts.FontEventListener;
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.FontManager;
-import org.apache.fop.fonts.FontResolver;
-import org.apache.fop.fonts.base14.Base14FontCollection;
import org.apache.fop.pdf.PDFAMode;
import org.apache.fop.pdf.PDFEncryptionParams;
import org.apache.fop.pdf.PDFFilterList;
import org.apache.fop.pdf.PDFXMode;
-import org.apache.fop.render.DefaultFontResolver;
import org.apache.fop.render.PrintRendererConfigurator;
import org.apache.fop.render.Renderer;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
import org.apache.fop.util.LogUtil;
/**
* PDF renderer configurator.
*/
-public class PDFRendererConfigurator extends PrintRendererConfigurator
- implements IFDocumentHandlerConfigurator {
+public class PDFRendererConfigurator extends PrintRendererConfigurator {
/**
* Default constructor
- *
+ *
* @param userAgent user agent
*/
public PDFRendererConfigurator(FOUserAgent userAgent) {
@@ -65,7 +54,7 @@ public class PDFRendererConfigurator extends PrintRendererConfigurator
* Configure the PDF renderer.
* Get the configuration to be used for pdf stream filters,
* fonts etc.
- *
+ *
* @param renderer pdf renderer
* @throws FOPException fop exception
*/
@@ -155,7 +144,7 @@ public class PDFRendererConfigurator extends PrintRendererConfigurator
/**
* Builds a filter map from an Avalon Configuration object.
- *
+ *
* @param cfg the Configuration object
* @return Map the newly built filter map
* @throws ConfigurationException if a filter list is defined twice
@@ -214,26 +203,4 @@ public class PDFRendererConfigurator extends PrintRendererConfigurator
}
}
- /** {@inheritDoc} */
- public void setupFontInfo(IFDocumentHandler documentHandler, FontInfo fontInfo)
- throws FOPException {
- FontManager fontManager = userAgent.getFactory().getFontManager();
- List fontCollections = new java.util.ArrayList();
- fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled()));
-
- Configuration cfg = super.getRendererConfig(documentHandler.getMimeType());
- if (cfg != null) {
- FontResolver fontResolver = new DefaultFontResolver(userAgent);
- FontEventListener listener = new FontEventAdapter(
- userAgent.getEventBroadcaster());
- List fontList = buildFontList(cfg, fontResolver, listener);
- fontCollections.add(new CustomFontCollection(fontResolver, fontList));
- }
-
- fontManager.setup(fontInfo,
- (FontCollection[])fontCollections.toArray(
- new FontCollection[fontCollections.size()]));
- documentHandler.setFontInfo(fontInfo);
- }
-
}
diff --git a/src/java/org/apache/fop/render/ps/PSDocumentHandlerMaker.java b/src/java/org/apache/fop/render/ps/PSDocumentHandlerMaker.java
index e105ac836..eb085c0a4 100644
--- a/src/java/org/apache/fop/render/ps/PSDocumentHandlerMaker.java
+++ b/src/java/org/apache/fop/render/ps/PSDocumentHandlerMaker.java
@@ -24,7 +24,6 @@ import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Intermediate format document handler factory for PostScript output.
@@ -52,9 +51,4 @@ public class PSDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker {
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return new PSRendererConfigurator(userAgent);
- }
-
}
diff --git a/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java b/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java
index 7ea4fe547..0f880a928 100644
--- a/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java
+++ b/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java
@@ -19,23 +19,12 @@
package org.apache.fop.render.ps;
-import java.util.List;
-
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.xmlgraphics.ps.PSGenerator;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.fonts.CustomFontCollection;
-import org.apache.fop.fonts.FontCollection;
-import org.apache.fop.fonts.FontEventAdapter;
-import org.apache.fop.fonts.FontEventListener;
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.FontManager;
-import org.apache.fop.fonts.FontResolver;
-import org.apache.fop.fonts.base14.Base14FontCollection;
-import org.apache.fop.render.DefaultFontResolver;
import org.apache.fop.render.PrintRendererConfigurator;
import org.apache.fop.render.Renderer;
import org.apache.fop.render.intermediate.IFDocumentHandler;
@@ -99,25 +88,4 @@ public class PSRendererConfigurator extends PrintRendererConfigurator
}
- /** {@inheritDoc} */
- public void setupFontInfo(IFDocumentHandler documentHandler, FontInfo fontInfo)
- throws FOPException {
- FontManager fontManager = userAgent.getFactory().getFontManager();
- List fontCollections = new java.util.ArrayList();
- fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled()));
-
- Configuration cfg = super.getRendererConfig(documentHandler.getMimeType());
- if (cfg != null) {
- FontResolver fontResolver = new DefaultFontResolver(userAgent);
- FontEventListener listener = new FontEventAdapter(
- userAgent.getEventBroadcaster());
- List fontList = buildFontList(cfg, fontResolver, listener);
- fontCollections.add(new CustomFontCollection(fontResolver, fontList));
- }
-
- fontManager.setup(fontInfo,
- (FontCollection[])fontCollections.toArray(
- new FontCollection[fontCollections.size()]));
- documentHandler.setFontInfo(fontInfo);
- }
}
diff --git a/src/sandbox/org/apache/fop/render/svg/SVGDocumentHandlerMaker.java b/src/sandbox/org/apache/fop/render/svg/SVGDocumentHandlerMaker.java
index c24a5af61..1f2120234 100644
--- a/src/sandbox/org/apache/fop/render/svg/SVGDocumentHandlerMaker.java
+++ b/src/sandbox/org/apache/fop/render/svg/SVGDocumentHandlerMaker.java
@@ -23,7 +23,6 @@ import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Document handler factory for SVG output.
@@ -49,9 +48,4 @@ public class SVGDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker {
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return null;
- }
-
}
diff --git a/src/sandbox/org/apache/fop/render/svg/SVGPrintDocumentHandlerMaker.java b/src/sandbox/org/apache/fop/render/svg/SVGPrintDocumentHandlerMaker.java
index 8da7032aa..8e212dfde 100644
--- a/src/sandbox/org/apache/fop/render/svg/SVGPrintDocumentHandlerMaker.java
+++ b/src/sandbox/org/apache/fop/render/svg/SVGPrintDocumentHandlerMaker.java
@@ -23,7 +23,6 @@ import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
-import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
/**
* Document handler factory for SVG Print output.
@@ -49,9 +48,4 @@ public class SVGPrintDocumentHandlerMaker extends AbstractIFDocumentHandlerMaker
return MIMES;
}
- /** {@inheritDoc} */
- public IFDocumentHandlerConfigurator getConfigurator(FOUserAgent userAgent) {
- return null;
- }
-
}