]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Added document-trailer element to the IF (for example for the bookmark tree).
authorJeremias Maerki <jeremias@apache.org>
Wed, 13 Aug 2008 07:13:52 +0000 (07:13 +0000)
committerJeremias Maerki <jeremias@apache.org>
Wed, 13 Aug 2008 07:13:52 +0000 (07:13 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign@685472 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
src/java/org/apache/fop/render/intermediate/IFConstants.java
src/java/org/apache/fop/render/intermediate/IFPainter.java
src/java/org/apache/fop/render/intermediate/IFParser.java
src/java/org/apache/fop/render/intermediate/IFRenderer.java
src/java/org/apache/fop/render/intermediate/IFSerializer.java
src/java/org/apache/fop/render/pdf/PDFPainter.java
src/sandbox/org/apache/fop/render/svg/SVGPainter.java

index c7d6a578bf6b5034065cdfeb94c9ff508d6ddfce..5f904858faf81290a309c14c767e4362a23978c0 100644 (file)
@@ -83,6 +83,46 @@ public abstract class AbstractIFPainter implements IFPainter {
         return this.userAgent;
     }
 
+    /** {@inheritDoc} */
+    public void startDocumentHeader() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void endDocumentHeader() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void startDocumentTrailer() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void endDocumentTrailer() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void startPageHeader() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void endPageHeader() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void startPageTrailer() throws IFException {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public void endPageTrailer() throws IFException {
+        //nop
+    }
+
     private AffineTransform combine(AffineTransform[] transforms) {
         AffineTransform at = new AffineTransform();
         for (int i = 0, c = transforms.length; i < c; i++) {
index 60870fbd84be9d826969fffcb421dcde324f03f4..2ea97a2310e077e91e96c61029f727ae4533ef5f 100644 (file)
@@ -35,6 +35,7 @@ public interface IFConstants extends XMLConstants {
 
     String EL_DOCUMENT = "document";
     String EL_HEADER = "header";
+    String EL_TRAILER = "trailer";
     String EL_PAGE_SEQUENCE = "page-sequence";
     String EL_PAGE = "page";
     String EL_PAGE_HEADER = "page-header";
index 5181d15c0aa58a53b364759a2aba586df128a7e3..026f43a8e8b3449b4e06e6e31c8f625ad07747ed 100644 (file)
@@ -60,6 +60,9 @@ import org.apache.fop.fonts.FontInfo;
  *     ]*
  *   endPageSequence()
  *   ]*
+ *   startDocumentTrailer()
+ *   [handleExtension()]*
+ *   endDocumentTrailer()
  * endDocument()
  *
  * #box:
@@ -148,6 +151,23 @@ public interface IFPainter {
      */
     void endDocumentHeader() throws IFException;
 
+    /**
+     * Indicates the start of the document trailer. This method is called after the last
+     * page sequence. Extensions sent to the painter between
+     * {@code #startDocumentTrailer()} and {@code #endDocumentTrailer()} apply to the document as
+     * a whole and is used for document-level content that is only known after all pages have
+     * been rendered (like named destinations or the bookmark tree).
+     * @throws IFException if an error occurs while handling this event
+     */
+    void startDocumentTrailer() throws IFException;
+
+    /**
+     * Indicates the end of the document trailer. This method is called right before the
+     * {@code #endDocument()} method.
+     * @throws IFException if an error occurs while handling this event
+     */
+    void endDocumentTrailer() throws IFException;
+
     /**
      * Indicates the start of a new page sequence.
      * @param id the page sequence's identifier (or null if none is available)
index 6545371fd33a0f908ae3de2e0ab585b002fab58f..9c615427f9ab2a5331fa4fd1f50554e92e7e09b8 100644 (file)
@@ -124,6 +124,7 @@ public class IFParser implements IFConstants {
             this.elementMappingRegistry = elementMappingRegistry;
             elementHandlers.put(EL_DOCUMENT, new DocumentHandler());
             elementHandlers.put(EL_HEADER, new DocumentHeaderHandler());
+            elementHandlers.put(EL_TRAILER, new DocumentTrailerHandler());
             elementHandlers.put(EL_PAGE_SEQUENCE, new PageSequenceHandler());
             elementHandlers.put(EL_PAGE, new PageHandler());
             elementHandlers.put(EL_PAGE_HEADER, new PageHeaderHandler());
@@ -293,6 +294,18 @@ public class IFParser implements IFConstants {
 
         }
 
+        private class DocumentTrailerHandler extends AbstractElementHandler {
+
+            public void startElement(Attributes attributes) throws IFException {
+                painter.startDocumentTrailer();
+            }
+
+            public void endElement() throws IFException {
+                painter.endDocumentTrailer();
+            }
+
+        }
+
         private class PageSequenceHandler extends AbstractElementHandler {
 
             public void startElement(Attributes attributes) throws IFException {
index 703b035d1435124a03b45fabdd80b403aba786c6..e5dcccf620f111d0e7aa1adc93188385786c6241 100644 (file)
@@ -232,10 +232,12 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
                 painter.endPageSequence();
                 this.inPageSequence = false;
             }
+            painter.startDocumentTrailer();
             finishOpenGoTos();
             if (this.bookmarkTree != null) {
                 painter.handleExtensionObject(this.bookmarkTree);
             }
+            painter.endDocumentTrailer();
             painter.endDocument();
         } catch (IFException e) {
             handleIFExceptionWithIOException(e);
index 3cd57435dcb13a60ee0ed2216c5c0261ab7d92b5..9ca242fb9cb44757f189b1053f73c16ac6d81303 100644 (file)
@@ -98,6 +98,24 @@ public class IFSerializer extends AbstractXMLWritingIFPainter implements IFConst
         }
     }
 
+    /** {@inheritDoc} */
+    public void startDocumentTrailer() throws IFException {
+        try {
+            startElement(EL_TRAILER);
+        } catch (SAXException e) {
+            throw new IFException("SAX error in startDocumentTrailer()", e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    public void endDocumentTrailer() throws IFException {
+        try {
+            endElement(EL_TRAILER);
+        } catch (SAXException e) {
+            throw new IFException("SAX error in startDocumentTrailer()", e);
+        }
+    }
+
     /** {@inheritDoc} */
     public void endDocument() throws IFException {
         try {
index 1f087058e20b61c3760c845e09190c79505c4fe4..5e57946fb95e7768d42031d2c55ba6298afd8932 100644 (file)
@@ -146,10 +146,6 @@ public class PDFPainter extends AbstractBinaryWritingIFPainter {
         }
     }
 
-    /** {@inheritDoc} */
-    public void startDocumentHeader() throws IFException {
-    }
-
     /** {@inheritDoc} */
     public void endDocumentHeader() throws IFException {
         pdfUtil.generateDefaultXMPMetadata();
@@ -207,14 +203,6 @@ public class PDFPainter extends AbstractBinaryWritingIFPainter {
         generator.concatenate(basicPageTransform);
     }
 
-    /** {@inheritDoc} */
-    public void startPageHeader() throws IFException {
-    }
-
-    /** {@inheritDoc} */
-    public void endPageHeader() throws IFException {
-    }
-
     /** {@inheritDoc} */
     public void startPageContent() throws IFException {
         this.state = IFState.create();
@@ -225,14 +213,6 @@ public class PDFPainter extends AbstractBinaryWritingIFPainter {
         assert this.state.pop() == null;
     }
 
-    /** {@inheritDoc} */
-    public void startPageTrailer() throws IFException {
-    }
-
-    /** {@inheritDoc} */
-    public void endPageTrailer() throws IFException {
-    }
-
     /** {@inheritDoc} */
     public void endPage() throws IFException {
         try {
index 112144e73a725e1e06d3c9d844011bc7a428021f..7f92de7ed8d1a2739ebfed3736d4adabc3f53507 100644 (file)
@@ -117,6 +117,7 @@ public class SVGPainter extends AbstractSVGPainter {
 
     /** {@inheritDoc} */
     public void endDocument() throws IFException {
+        //nop
     }
 
     /** {@inheritDoc} */
@@ -218,14 +219,6 @@ public class SVGPainter extends AbstractSVGPainter {
         }
     }
 
-    /** {@inheritDoc} */
-    public void startPageHeader() throws IFException {
-    }
-
-    /** {@inheritDoc} */
-    public void endPageHeader() throws IFException {
-    }
-
     /** {@inheritDoc} */
     public void startPageContent() throws IFException {
         super.startPageContent();
@@ -246,14 +239,6 @@ public class SVGPainter extends AbstractSVGPainter {
         super.endPageContent();
     }
 
-    /** {@inheritDoc} */
-    public void startPageTrailer() throws IFException {
-    }
-
-    /** {@inheritDoc} */
-    public void endPageTrailer() throws IFException {
-    }
-
     /** {@inheritDoc} */
     public void endPage() throws IFException {
         try {