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
{