From 92456710eecabdc2cf6400e37c660e42a04b5c31 Mon Sep 17 00:00:00 2001 From: Bernhard Fey <43403851+bernhardf-ro@users.noreply.github.com> Date: Tue, 10 Jan 2023 12:32:44 +0100 Subject: [PATCH] Allow negative struct parent keys in PDFMergerUtility PDFMergerUtility expects structural parent tree keys to be non-negative. However, negative values don't seem to be forbidden by the specification and are accepted by validators. This patch adapts the class to handle negative struct parent keys correctly. --- .../java/org/apache/pdfbox/multipdf/PDFMergerUtility.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java index ea5d9cd0807..86997c347f7 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java @@ -795,6 +795,7 @@ else if (destOCP != null && srcOCP != null) if (!srcNumberTreeAsMap.isEmpty()) { mergeStructTree = true; + destParentTreeNextKey -= Collections.min(srcNumberTreeAsMap.keySet()); // allow for negative struct parent values } } } @@ -1498,8 +1499,8 @@ private void updateStructParentEntries(PDPage page, int structParentOffset) thro List newannots = new ArrayList<>(annots.size()); annots.forEach(annot -> { - int structParent = annot.getStructParent(); - if (structParent >= 0) + int structParent = annot.getCOSObject().getInt(COSName.STRUCT_PARENT, Integer.MIN_VALUE); // allow for negative struct parent values + if (structParent > Integer.MIN_VALUE) // allow for negative struct parent values { annot.setStructParent(structParent + structParentOffset); }