Search in sources :

Example 1 with PDStructureElementNameTreeNode

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
}
Also used : PDStructureElementNameTreeNode(com.tom_roush.pdfbox.pdmodel.PDStructureElementNameTreeNode) COSDictionary(com.tom_roush.pdfbox.cos.COSDictionary) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) PDStructureElement(com.tom_roush.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement)

Aggregations

COSDictionary (com.tom_roush.pdfbox.cos.COSDictionary)1 PDStructureElementNameTreeNode (com.tom_roush.pdfbox.pdmodel.PDStructureElementNameTreeNode)1 PDStructureElement (com.tom_roush.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1