use of com.tom_roush.pdfbox.pdmodel.PDStructureElementNameTreeNode in project PdfBox-Android by TomRoush.
the class PDFMergerUtility method mergeIDTree.
private void mergeIDTree(PDFCloneUtility cloner, PDStructureTreeRoot srcStructTree, PDStructureTreeRoot destStructTree) throws IOException {
PDNameTreeNode<PDStructureElement> srcIDTree = srcStructTree.getIDTree();
PDNameTreeNode<PDStructureElement> destIDTree = destStructTree.getIDTree();
if (srcIDTree == null) {
return;
}
if (destIDTree == null) {
destIDTree = new PDStructureElementNameTreeNode();
}
Map<String, PDStructureElement> srcNames = getIDTreeAsMap(srcIDTree);
Map<String, PDStructureElement> destNames = getIDTreeAsMap(destIDTree);
for (Map.Entry<String, PDStructureElement> entry : srcNames.entrySet()) {
if (destNames.containsKey(entry.getKey())) {
Log.w("PdfBox-Android", "key " + entry.getKey() + " already exists in destination IDTree");
} else {
destNames.put(entry.getKey(), new PDStructureElement((COSDictionary) cloner.cloneForNewDocument(entry.getValue().getCOSObject())));
}
}
destIDTree = new PDStructureElementNameTreeNode();
destIDTree.setNames(destNames);
destStructTree.setIDTree(destIDTree);
// Note that all elements are stored flatly. This could become a problem for large files
// when these are opened in a viewer that uses the tagging information.
// If this happens, then PDNameTreeNode should be improved with a convenience method that
// stores the map into a B+Tree, see https://en.wikipedia.org/wiki/B+_tree
}
Aggregations