Author: jeremias
Date: Wed Jan  9 23:38:47 2008
New Revision: 610704

URL: http://svn.apache.org/viewvc?rev=610704&view=rev
Log:
Added basic support for PDF page labels.

Added:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumsArray.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFPageLabels.java
Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNames.java   (props 
changed)
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFRoot.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java
    xmlgraphics/fop/trunk/status.xml

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java?rev=610704&r1=610703&r2=610704&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java Wed 
Jan  9 23:38:47 2008
@@ -101,16 +101,26 @@
      */
     protected void writeDictionary(StringBuffer sb) {
         sb.append("<<");
+        boolean compact = (this.order.size() <= 2);
         Iterator iter = this.order.iterator();
         while (iter.hasNext()) {
             String key = (String)iter.next();
-            sb.append("\n  /");
-            sb.append(key);
-            sb.append(" ");
+            if (compact) {
+                sb.append(' ');
+            } else {
+                sb.append("\n  ");
+            }
+            sb.append('/').append(key);
+            sb.append(' ');
             Object obj = this.entries.get(key);
             formatObject(obj, sb);
         }
-        sb.append("\n>>\n");
+        if (compact) {
+            sb.append(' ');
+        } else {
+            sb.append('\n');
+        }
+        sb.append(">>\n");
     }
 
 }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java?rev=610704&r1=610703&r2=610704&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java Wed Jan  
9 23:38:47 2008
@@ -849,6 +849,17 @@
     }
 
     /**
+     * Make a names dictionary (the /PageLabels object).
+     * @return the new PDFPageLabels object
+     */
+    public PDFPageLabels makePageLabels() {
+        PDFPageLabels pageLabels = new PDFPageLabels();
+        getDocument().assignObjectNumber(pageLabels);
+        getDocument().addTrailerObject(pageLabels);
+        return pageLabels;
+    }
+
+    /**
      * Make a the head object of the name dictionary (the /Dests object).
      *
      * @param destinationList a list of PDFDestination instances

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNames.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java?rev=610704&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java 
(added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java 
Wed Jan  9 23:38:47 2008
@@ -0,0 +1,121 @@
+/*
+ * 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.pdf;
+
+/**
+ * Class representing a PDF number tree node.
+ */
+public class PDFNumberTreeNode extends PDFDictionary {
+
+    private static final String KIDS = "Kids";
+    private static final String NUMS = "Nums";
+    private static final String LIMITS = "Limits";
+
+    /**
+     * create a named destination
+     */
+    public PDFNumberTreeNode() {
+        /* generic creation of PDF object */
+        super();
+    }
+
+    /**
+     * Sets the Kids array.
+     * @param kids the Kids array
+     */
+    public void setKids(PDFArray kids) {
+        put(KIDS, kids);
+    }
+    
+    /**
+     * Returns the Kids array.
+     * @return the Kids array
+     */
+    public PDFArray getKids() {
+        return (PDFArray)get(KIDS);
+    }
+    
+    /**
+     * Sets the Nums array.
+     * @param nums the Nums array
+     */
+    public void setNums(PDFNumsArray nums) {
+        put(NUMS, nums);
+    }
+    
+    /**
+     * Returns the Nums array.
+     * @return the Nums array
+     */
+    public PDFNumsArray getNums() {
+        return (PDFNumsArray)get(NUMS);
+    }
+    
+    /**
+     * Sets the lower limit value of the Limits array.
+     * @param key the lower limit value
+     */
+    public void setLowerLimit(Integer key) {
+        PDFArray limits = prepareLimitsArray();
+        limits.set(0, key);
+    }
+
+    /**
+     * Returns the lower limit value of the Limits array.
+     * @return the lower limit value
+     */
+    public Integer getLowerLimit() {
+        PDFArray limits = prepareLimitsArray();
+        return (Integer)limits.get(0);
+    }
+
+    /**
+     * Sets the upper limit value of the Limits array.
+     * @param key the upper limit value
+     */
+    public void setUpperLimit(Integer key) {
+        PDFArray limits = prepareLimitsArray();
+        limits.set(1, key);
+    }
+
+    /**
+     * Returns the upper limit value of the Limits array.
+     * @return the upper limit value
+     */
+    public Integer getUpperLimit() {
+        PDFArray limits = prepareLimitsArray();
+        return (Integer)limits.get(1);
+    }
+
+
+    private PDFArray prepareLimitsArray() {
+        PDFArray limits = (PDFArray)get(LIMITS);
+        if (limits == null) {
+            limits = new PDFArray(new Object[2]);
+            put(LIMITS, limits);
+        }
+        if (limits.length() != 2) {
+            throw new IllegalStateException("Limits array must have 2 
entries");
+        }
+        return limits;
+    }
+    
+}
+

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumsArray.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumsArray.java?rev=610704&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumsArray.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFNumsArray.java Wed Jan 
 9 23:38:47 2008
@@ -0,0 +1,94 @@
+/*
+ * 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: PDFArray.java 588547 2007-10-26 07:48:14Z jeremias $ */
+ 
+package org.apache.fop.pdf;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedMap;
+
+/**
+ * Class representing an "Nums" array object (for Number Trees).
+ */
+public class PDFNumsArray extends PDFObject {
+    
+    /** Sorted Map holding the values of this array. */
+    protected SortedMap map = new java.util.TreeMap();
+
+    /**
+     * Create a new, empty array object
+     */
+    public PDFNumsArray() {
+        /* generic creation of PDF object */
+        super();
+    }
+
+    /**
+     * Returns the length of the array
+     * @return the length of the array
+     */
+    public int length() {
+        return this.map.size();
+    }
+    
+    /**
+     * Sets an entry.
+     * @param key the key of the value to set
+     * @param obj the new value
+     */
+    public void put(int key, Object obj) {
+        this.map.put(new Integer(key), obj);
+    }
+    
+    /**
+     * Gets an entry.
+     * @param key the key of requested value
+     * @return the requested value
+     */
+    public Object get(int key) {
+        return this.map.get(new Integer(key));
+    }
+    
+    /** [EMAIL PROTECTED] */
+    public String toPDFString() {
+        StringBuffer p = new StringBuffer(64);
+        if (hasObjectNumber()) {
+            p.append(getObjectID());
+        }
+        p.append("[");
+        boolean first = true;
+        Iterator iter = this.map.entrySet().iterator();
+        while (iter.hasNext()) {
+            Map.Entry entry = (Map.Entry)iter.next();
+            if (!first) {
+                p.append(" ");
+            }
+            first = false;
+            formatObject(entry.getKey(), p);
+            p.append(" ");
+            formatObject(entry.getValue(), p);
+        }
+        p.append("]");
+        if (hasObjectNumber()) {
+            p.append("\nendobj\n");
+        }
+        return p.toString();
+    }
+
+}

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFPageLabels.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFPageLabels.java?rev=610704&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFPageLabels.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFPageLabels.java Wed 
Jan  9 23:38:47 2008
@@ -0,0 +1,48 @@
+/*
+ * 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.pdf;
+
+/**
+ * Class representing a PDF /PageLabels dictionary.
+ */
+public class PDFPageLabels extends PDFNumberTreeNode {
+    
+    /**
+     * Create the /PageLabels dictionary
+     */
+    public PDFPageLabels() {
+        super();
+    }
+
+    /**
+     * Returns the Nums object
+     * @return the Nums object (an empty PDFNumsArray for the "/Nums" entry is 
created
+     *       if it doesn't exist)
+     */
+    public PDFNumsArray getNums() {
+        PDFNumsArray nums = super.getNums();
+        if (nums == null) {
+            nums = new PDFNumsArray();
+            setNums(nums);
+        }
+        return nums;
+    }
+    
+}

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFRoot.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFRoot.java?rev=610704&r1=610703&r2=610704&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFRoot.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFRoot.java Wed Jan  9 
23:38:47 2008
@@ -19,12 +19,10 @@
  
 package org.apache.fop.pdf;
 
-import java.util.List;
-
 /**
- * class representing a Root (/Catalog) object
+ * Class representing a Root (/Catalog) object.
  */
-public class PDFRoot extends PDFObject {
+public class PDFRoot extends PDFDictionary {
 
     /**
      * Use no page mode setting, default
@@ -46,27 +44,13 @@
      */
     public static final int PAGEMODE_FULLSCREEN = 3;
 
-    /**
-     * the /Pages object that is root of the Pages hierarchy
-     */
-    protected PDFPages rootPages;
-
-    /**
-     * Root outline object
-     */
-    private PDFOutline outline;
-
-    /** Optional Metadata object */
-    private PDFMetadata metadata;
+    private static final PDFName[] PAGEMODE_NAMES = new PDFName[] {
+        new PDFName("UseNone"),
+        new PDFName("UseOutlines"),
+        new PDFName("UseThumbs"),
+        new PDFName("FullScreen"),
+    };
     
-    /** The array of OutputIntents */
-    private List outputIntents;
-    
-    /** the /Dests object, if this PDF has a Names Dictionary */
-    private PDFNames names;
-
-    private int pageMode = PAGEMODE_USENONE;
-
     /**
      * create a Root (/Catalog) object. NOTE: The PDFRoot
      * object must be created before the PDF document is
@@ -80,25 +64,45 @@
     public PDFRoot(int objnum, PDFPages pages) {
         super();
         setObjectNumber(objnum);
+        put("Type", new PDFName("Catalog"));
         setRootPages(pages);
     }
 
     /**
      * Set the page mode for the PDF document.
      *
-     * @param mode the page mode
+     * @param mode the page mode (one of PAGEMODE_*)
      */
     public void setPageMode(int mode) {
-        pageMode = mode;
+        put("PageMode", PAGEMODE_NAMES[mode]);
     }
 
     /**
+     * Returns the currently active /PageMode.
+     * @return the /PageMode (one of PAGEMODE_*)
+     */
+    public int getPageMode() {
+        PDFName mode = (PDFName)get("PageMode");
+        if (mode != null) {
+            for (int i = 0; i < PAGEMODE_NAMES.length; i++) {
+                if (PAGEMODE_NAMES[i].equals(mode)) {
+                    return i;
+                }
+            }
+            throw new IllegalStateException("Unknown /PageMode encountered: " 
+ mode);
+        } else {
+            return PAGEMODE_USENONE;
+        }
+    }
+    
+    /**
      * add a /Page object to the root /Pages object
      *
      * @param page the /Page object to add
      */
     public void addPage(PDFPage page) {
-        this.rootPages.addPage(page);
+        PDFPages pages = getRootPages();
+        pages.addPage(page);
     }
 
     /**
@@ -107,16 +111,50 @@
      * @param pages the /Pages object to set as root
      */
     public void setRootPages(PDFPages pages) {
-        this.rootPages = pages;
+        put("Pages", pages.makeReference());
     }
 
     /**
+     * Returns the /PageLabels object.
+     * @return the /PageLabels object if set, null otherwise.
+     * @since PDF 1.3
+     */
+    public PDFPages getRootPages() {
+        PDFReference ref = (PDFReference)get("Pages");
+        return (ref != null ? (PDFPages)ref.getObject() : null);
+    }
+    
+    /**
+     * Sets the /PageLabels object.
+     * @param pageLabels the /PageLabels object
+     */
+    public void setPageLabels(PDFPageLabels pageLabels) {
+        put("PageLabels", pageLabels.makeReference());
+    }
+    
+    /**
+     * Returns the /PageLabels object.
+     * @return the /PageLabels object if set, null otherwise.
+     * @since PDF 1.3
+     */
+    public PDFPageLabels getPageLabels() {
+        PDFReference ref = (PDFReference)get("PageLabels");
+        return (ref != null ? (PDFPageLabels)ref.getObject() : null);
+    }
+    
+    /**
      * Set the root outline for the PDF document.
      *
      * @param out the root PDF Outline
      */
     public void setRootOutline(PDFOutline out) {
-        outline = out;
+        put("Outlines", out.makeReference());
+        
+        //Set /PageMode to /UseOutlines by default if no other mode has been 
set
+        PDFName mode = (PDFName)get("PageMode");
+        if (mode == null) {
+            setPageMode(PAGEMODE_USEOUTLINES);
+        }
     }
 
     /**
@@ -125,24 +163,27 @@
      * @return the root PDF Outline
      */
     public PDFOutline getRootOutline() {
-        return outline;
+        PDFReference ref = (PDFReference)get("Outlines");
+        return (ref != null ? (PDFOutline)ref.getObject() : null);
     }
     
     /**
-     * Set the Names object.
+     * Set the /Names object.
      * @param names the Names object
      * @since PDF 1.2
      */
     public void setNames(PDFNames names) {
-        this.names = names;
+        put("Names", names.makeReference());
     }
     
     /**
+     * Returns the /Names object.
      * @return the Names object if set, null otherwise.
      * @since PDF 1.2
      */
     public PDFNames getNames() {
-        return this.names;
+        PDFReference ref = (PDFReference)get("Names");
+        return (ref != null ? (PDFNames)ref.getObject() : null);
     }
     
     /**
@@ -151,78 +192,44 @@
      * @since PDF 1.4
      */
     public void setMetadata(PDFMetadata meta) {
-        this.metadata = meta;
+        if (getDocumentSafely().getPDFVersion() >= 
PDFDocument.PDF_VERSION_1_4) {
+            put("Metadata", meta.makeReference());
+        }
     }
     
     /**
-     * @return the Metadata object if set, null otherwise.
+     * Returns the /Metadata object
+     * @return the /Metadata object if set, null otherwise.
      * @since PDF 1.4
      */
     public PDFMetadata getMetadata() {
-        return this.metadata;
+        PDFReference ref = (PDFReference)get("Metadata");
+        return (ref != null ? (PDFMetadata)ref.getObject() : null);
     }
 
     /**
-     * Adds an OutputIntent to the PDF
-     * @param outputIntent the OutputIntent dictionary
+     * Returns the /OutputIntents array.
+     * @return the /OutputIntents array or null if it doesn't exist
+     * @since PDF 1.4
      */
-    public void addOutputIntent(PDFOutputIntent outputIntent) {
-        if (this.outputIntents == null) {
-            this.outputIntents = new java.util.ArrayList();
-        }
-        this.outputIntents.add(outputIntent);
+    public PDFArray getOutputIntents() {
+        return (PDFArray)get("OutputIntents");
     }
     
     /**
-     * [EMAIL PROTECTED]
+     * Adds an OutputIntent to the PDF
+     * @param outputIntent the OutputIntent dictionary
+     * @since PDF 1.4
      */
-    public String toPDFString() {
-        StringBuffer p = new StringBuffer(128);
-        p.append(getObjectID());
-        p.append("<< /Type /Catalog\n /Pages "
-                + this.rootPages.referencePDF()
-                + "\n");
-        if (outline != null) {
-            p.append(" /Outlines " + outline.referencePDF() + "\n");
-            p.append(" /PageMode /UseOutlines\n");
-        } else {
-            switch (pageMode) {
-                case PAGEMODE_USEOUTLINES:
-                    p.append(" /PageMode /UseOutlines\n");
-                break;
-                case PAGEMODE_USETHUMBS:
-                    p.append(" /PageMode /UseThumbs\n");
-                break;
-                case PAGEMODE_FULLSCREEN:
-                    p.append(" /PageMode /FullScreen\n");
-                break;
-                case PAGEMODE_USENONE:
-                default:
-                break;
-            }
-        }
-        if (getDocumentSafely().hasDestinations() && getNames() != null) {
-            p.append(" /Names " + getNames().referencePDF() + "\n");
-        }
-        if (getMetadata() != null 
-                && getDocumentSafely().getPDFVersion() >= 
PDFDocument.PDF_VERSION_1_4) {
-            p.append(" /Metadata " + getMetadata().referencePDF() + "\n");
-        }
-        if (this.outputIntents != null 
-                && this.outputIntents.size() > 0
-                && getDocumentSafely().getPDFVersion() >= 
PDFDocument.PDF_VERSION_1_4) {
-            p.append(" /OutputIntents [");
-            for (int i = 0, c = this.outputIntents.size(); i < c; i++) {
-                PDFOutputIntent outputIntent = 
(PDFOutputIntent)this.outputIntents.get(i);
-                if (i > 0) {
-                    p.append(" ");
-                }
-                p.append(outputIntent.referencePDF());
+    public void addOutputIntent(PDFOutputIntent outputIntent) {
+        if (getDocumentSafely().getPDFVersion() >= 
PDFDocument.PDF_VERSION_1_4) {
+            PDFArray outputIntents = getOutputIntents(); 
+            if (outputIntents == null) {
+                outputIntents = new PDFArray();
+                put("OutputIntents", outputIntents);
             }
-            p.append("]\n");
+            outputIntents.add(outputIntent);
         }
-        p.append(">>\nendobj\n");
-        return p.toString();
     }
-
+    
 }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java?rev=610704&r1=610703&r2=610704&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java 
Wed Jan  9 23:38:47 2008
@@ -73,6 +73,7 @@
 import org.apache.fop.pdf.PDFAnnotList;
 import org.apache.fop.pdf.PDFColor;
 import org.apache.fop.pdf.PDFConformanceException;
+import org.apache.fop.pdf.PDFDictionary;
 import org.apache.fop.pdf.PDFDocument;
 import org.apache.fop.pdf.PDFEncryptionManager;
 import org.apache.fop.pdf.PDFEncryptionParams;
@@ -88,6 +89,7 @@
 import org.apache.fop.pdf.PDFOutline;
 import org.apache.fop.pdf.PDFOutputIntent;
 import org.apache.fop.pdf.PDFPage;
+import org.apache.fop.pdf.PDFPageLabels;
 import org.apache.fop.pdf.PDFResourceContext;
 import org.apache.fop.pdf.PDFResources;
 import org.apache.fop.pdf.PDFState;
@@ -715,6 +717,19 @@
             page.getPageIndex());
         pageReferences.put(page.getKey(), currentPage.referencePDF());
         pvReferences.put(page.getKey(), page);
+        
+        //Produce page labels
+        PDFPageLabels pageLabels = this.pdfDoc.getRoot().getPageLabels();
+        if (pageLabels == null) {
+            //Set up PageLabels
+            pageLabels = this.pdfDoc.getFactory().makePageLabels();
+            this.pdfDoc.getRoot().setPageLabels(pageLabels);
+        }
+        PDFDictionary dict = new PDFDictionary();
+        dict.put("P", page.getPageNumberString());
+        //TODO If the sequence of generated page numbers were inspected, this 
could be
+        //expressed in a more space-efficient way
+        pageLabels.getNums().put(page.getPageIndex(), dict);
     }
     
     /**

Modified: xmlgraphics/fop/trunk/status.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=610704&r1=610703&r2=610704&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Wed Jan  9 23:38:47 2008
@@ -28,6 +28,9 @@
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="add">
+        Added support for PDF page labels.
+      </action>
       <action context="Code" dev="JM" type="add" fixes-bug="44176" 
due-to="Patrick Jaromin">
         Added support for custom fonts in Java2DRenderer and derived renderers.
       </action>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to