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 06:54:14 UTC

svn commit: r1938941 - pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf

Author: tilman
Date: Fri Oct  9 06:54:14 2026
New Revision: 1938941

Log:
PDFBOX-6277: refactor

Modified:
   pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java	Fri Oct  9 06:54:11 2026	(r1938940)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java	Fri Oct  9 06:54:14 2026	(r1938941)
@@ -642,46 +642,7 @@ public class PDFMergerUtility
             destCatalog.setPageMode(srcPageMode);
         }
 
-        COSDictionary srcLabels = srcCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);
-        if (srcLabels != null)
-        {
-            int destPageCount = destination.getNumberOfPages();
-            COSDictionary destLabels = destCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);
-            if (destLabels == null)
-            {
-                // PDFBOX-6277: create a mandatory 0 entry
-                PDPageLabels pageLabels = new PDPageLabels(destination);
-                PDPageLabelRange pageLabelRange = new PDPageLabelRange();
-                pageLabels.setLabelItem(0, pageLabelRange);
-                destCatalog.setPageLabels(pageLabels);
-                destLabels = destCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);
-            }
-            COSArray destNums = destLabels.getCOSArray(COSName.NUMS);
-            COSArray srcNums = srcLabels.getCOSArray(COSName.NUMS);
-            if (srcNums != null)
-            {
-                int startSize = destNums.size();
-                for (int i = 0; i < srcNums.size(); i += 2)
-                {
-                    COSBase base = srcNums.getObject(i);
-                    if (!(base instanceof COSNumber))
-                    {
-                        LOG.error("page labels ignored, index {} should be a number, but is {}", i,
-                                base);
-                        // remove what we added
-                        while (destNums.size() > startSize)
-                        {
-                            destNums.remove(startSize);
-                        }
-                        break;
-                    }
-                    COSNumber labelIndex = (COSNumber) base;
-                    long labelIndexValue = labelIndex.intValue();
-                    destNums.add(COSInteger.get(labelIndexValue + destPageCount));
-                    destNums.add(cloner.cloneForNewDocument(srcNums.getObject(i + 1)));
-                }
-            }
-        }
+        mergePageLabels(destination, srcCatalog, destCatalog, cloner);
 
         COSStream destMetadata = destCatalog.getCOSObject().getCOSStream(COSName.METADATA);
         COSStream srcMetadata = srcCatalog.getCOSObject().getCOSStream(COSName.METADATA);
@@ -852,6 +813,50 @@ public class PDFMergerUtility
         }
     }
 
+    private void mergePageLabels(PDDocument destination, PDDocumentCatalog srcCatalog, PDDocumentCatalog destCatalog, PDFCloneUtility cloner) throws IOException
+    {
+        COSDictionary srcLabels = srcCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);
+        if (srcLabels != null)
+        {
+            int destPageCount = destination.getNumberOfPages();
+            COSDictionary destLabels = destCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);
+            if (destLabels == null)
+            {
+                // PDFBOX-6277: create a mandatory 0 entry
+                PDPageLabels pageLabels = new PDPageLabels(destination);
+                PDPageLabelRange pageLabelRange = new PDPageLabelRange();
+                pageLabels.setLabelItem(0, pageLabelRange);
+                destCatalog.setPageLabels(pageLabels);
+                destLabels = destCatalog.getCOSObject().getCOSDictionary(COSName.PAGE_LABELS);
+            }
+            COSArray destNums = destLabels.getCOSArray(COSName.NUMS);
+            COSArray srcNums = srcLabels.getCOSArray(COSName.NUMS);
+            if (srcNums != null)
+            {
+                int startSize = destNums.size();
+                for (int i = 0; i < srcNums.size(); i += 2)
+                {
+                    COSBase base = srcNums.getObject(i);
+                    if (!(base instanceof COSNumber))
+                    {
+                        LOG.error("page labels ignored, index {} should be a number, but is {}", i,
+                                base);
+                        // remove what we added
+                        while (destNums.size() > startSize)
+                        {
+                            destNums.remove(startSize);
+                        }
+                        break;
+                    }
+                    COSNumber labelIndex = (COSNumber) base;
+                    long labelIndexValue = labelIndex.intValue();
+                    destNums.add(COSInteger.get(labelIndexValue + destPageCount));
+                    destNums.add(cloner.cloneForNewDocument(srcNums.getObject(i + 1)));
+                }
+            }
+        }
+    }
+
     private void mergeOpenAction(PDDocumentCatalog srcCatalog, PDDocumentCatalog dstCatalog,
             PDFCloneUtility cloner) throws IOException
     {