You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2026/10/09 12:44:31 UTC

svn commit: r1938948 - in pdfbox/branches/3.0/pdfbox/src: main/java/org/apache/pdfbox/multipdf test/java/org/apache/pdfbox/multipdf

Author: tilman
Date: Fri Oct  9 12:44:31 2026
New Revision: 1938948

Log:
PDFBOX-6277: force decimal, add test

Modified:
   pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
   pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java

Modified: pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java	Fri Oct  9 12:10:04 2026	(r1938947)
+++ pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java	Fri Oct  9 12:44:31 2026	(r1938948)
@@ -825,6 +825,7 @@ public class PDFMergerUtility
                 // PDFBOX-6277: create a mandatory 0 entry
                 PDPageLabels pageLabels = new PDPageLabels(destination);
                 PDPageLabelRange pageLabelRange = new PDPageLabelRange();
+                pageLabelRange.setStyle(PDPageLabelRange.STYLE_DECIMAL);
                 pageLabels.setLabelItem(0, pageLabelRange);
                 destCatalog.setPageLabels(pageLabels);
                 destLabels = destCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);

Modified: pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java	Fri Oct  9 12:10:04 2026	(r1938947)
+++ pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java	Fri Oct  9 12:44:31 2026	(r1938948)
@@ -22,6 +22,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Files;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -33,6 +34,7 @@ import org.apache.pdfbox.Loader;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.io.IOUtils;
@@ -47,6 +49,8 @@ import org.apache.pdfbox.pdmodel.PDResou
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDNameTreeNode;
 import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode;
+import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
+import org.apache.pdfbox.pdmodel.common.PDPageLabels;
 import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDMarkedContentReference;
 import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDObjectReference;
 import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDParentTreeValue;
@@ -655,6 +659,46 @@ class PDFMergerUtilityTest
         }
     }
 
+    /**
+     * PDFBOX-6277: check that index 0 is present despite missing page labels in destination.
+     */
+    @Test
+    void testPageLabels() throws IOException
+    {
+        try (PDDocument doc1 = new PDDocument();
+             PDDocument doc2 = new PDDocument())
+        {
+            doc1.addPage(new PDPage());
+            doc1.addPage(new PDPage());
+            doc1.addPage(new PDPage());
+            PDPageLabels pageLabels = new PDPageLabels(doc1);
+            PDPageLabelRange pageLabelRange1 = new PDPageLabelRange();
+            pageLabelRange1.setPrefix("RO ");
+            pageLabelRange1.setStart(3);
+            pageLabelRange1.setStyle(PDPageLabelRange.STYLE_ROMAN_UPPER);
+            pageLabels.setLabelItem(0, pageLabelRange1);
+            PDPageLabelRange pageLabelRange2 = new PDPageLabelRange();
+            pageLabelRange2.setStart(1);
+            pageLabelRange2.setStyle(PDPageLabelRange.STYLE_DECIMAL);
+            pageLabels.setLabelItem(2, pageLabelRange2);
+            doc1.getDocumentCatalog().setPageLabels(pageLabels);
+
+            doc2.addPage(new PDPage());
+            doc2.addPage(new PDPage());
+            doc2.addPage(new PDPage());
+
+            PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
+            pdfMergerUtility.appendDocument(doc2, doc1);
+
+            COSArray array = doc2.getDocumentCatalog().getCOSObject().getCOSDictionary(COSName.PAGE_LABELS).getCOSArray(COSName.NUMS);
+            assertEquals(COSInteger.ZERO, array.getObject(0));
+            assertTrue(array.getObject(1) instanceof COSDictionary);
+
+            String[] labels = doc2.getDocumentCatalog().getPageLabels().getLabelsByPageIndices();
+            assertEquals("[1, 2, 3, RO III, RO IV, 1]", Arrays.toString(labels));
+        }
+    }
+
     /**
      * PDFBOX-4408: Check that /StructParents values from pages and /StructParent values from
      * annotations are found in the /ParentTree.