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 2018/12/30 04:09:12 UTC
svn commit: r1849950 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
Author: tilman
Date: Sun Dec 30 04:09:12 2018
New Revision: 1849950
URL: http://svn.apache.org/viewvc?rev=1849950&view=rev
Log:
PDFBOX-4417: merge /K entries depending on whether they are COSArray or COSDictionary - this solves the double /StructTreeRoot problem
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java?rev=1849950&r1=1849949&r2=1849950&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java Sun Dec 30 04:09:12 2018
@@ -811,25 +811,49 @@ public class PDFMergerUtility
destStructTree.setParentTree(newParentTreeNode);
destStructTree.setParentTreeNextKey(destParentTreeNextKey);
- COSArray newKArray = new COSArray();
- if (srcStructTree.getK() != null)
+ mergeKEntries(cloner, srcStructTree, destStructTree);
+ mergeRoleMap(srcStructTree, destStructTree);
+ }
+ }
+
+ private void mergeKEntries(PDFCloneUtility cloner,
+ PDStructureTreeRoot srcStructTree,
+ PDStructureTreeRoot destStructTree) throws IOException
+ {
+ // make new /K with array that has the input /K entries
+ COSArray newKArray = new COSArray();
+ if (srcStructTree.getK() != null)
+ {
+ COSBase base = cloner.cloneForNewDocument(srcStructTree.getK());
+ if (base instanceof COSArray)
+ {
+ newKArray.addAll((COSArray) base);
+ }
+ else
{
- newKArray.add(cloner.cloneForNewDocument(srcStructTree.getK()));
+ newKArray.add(base);
}
- if (destStructTree.getK() != null)
+ }
+ if (destStructTree.getK() != null)
+ {
+ COSBase base = destStructTree.getK();
+ if (base instanceof COSArray)
{
- newKArray.add(destStructTree.getK());
+ newKArray.addAll((COSArray) base);
}
- if (newKArray.size() > 0)
+ else
{
- COSDictionary kDictLevel0 = new COSDictionary();
- kDictLevel0.setItem(COSName.K, newKArray);
- kDictLevel0.setItem(COSName.P, destStructTree);
- kDictLevel0.setItem(COSName.S, COSName.DOCUMENT);
- destStructTree.setK(kDictLevel0);
+ newKArray.add(base);
}
-
- mergeRoleMap(srcStructTree, destStructTree);
+ }
+ if (newKArray.size() > 0)
+ {
+ COSDictionary kDictLevel0 = new COSDictionary();
+ updateParentEntry(newKArray, kDictLevel0);
+ kDictLevel0.setItem(COSName.K, newKArray);
+ kDictLevel0.setItem(COSName.P, destStructTree);
+ kDictLevel0.setItem(COSName.S, COSName.DOCUMENT);
+ destStructTree.setK(kDictLevel0);
}
}