Example usage for org.apache.pdfbox.cos COSName K

List of usage examples for org.apache.pdfbox.cos COSName K

Introduction

In this page you can find the example usage for org.apache.pdfbox.cos COSName K.

Prototype

COSName K

To view the source code for org.apache.pdfbox.cos COSName K.

Click Source Link

Usage

From source file:org.apache.fop.render.pdf.PageParentTreeFinderTestCase.java

License:Apache License

@Test
public void testGetPageParentTreeArray() throws IOException {
    File resource = new File(getClass().getResource(LINK).getFile());
    PDDocument doc = PDDocument.load(resource);
    PDPage srcPage = doc.getPage(0);/*from   w  ww.j  av a2  s .c o m*/
    PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
    COSArray markedContentParents = finder.getPageParentTreeArray(doc);
    Assert.assertEquals(markedContentParents.size(), 3);
    COSObject firstObj = (COSObject) markedContentParents.get(0);
    COSObject secObj = (COSObject) markedContentParents.get(1);
    COSArray firstKids = (COSArray) firstObj.getDictionaryObject(COSName.K);
    COSDictionary firstKid = (COSDictionary) firstKids.get(0);
    int test = firstKid.getInt("MCID");
    int expected = 0;
    Assert.assertEquals(test, expected);
    COSDictionary firstKidBrother = (COSDictionary) firstKids.get(2);
    test = firstKidBrother.getInt("MCID");
    expected = 2;
    Assert.assertEquals(test, expected);
    COSArray secKidsArray = (COSArray) secObj.getDictionaryObject(COSName.K);
    COSDictionary secondKid = (COSDictionary) secKidsArray.get(0);
    test = secondKid.getInt("MCID");
    expected = 1;
    Assert.assertEquals(test, expected);
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

public void createDirectDescendants(COSBase base, PDFStructElem parent) throws IOException {
    if (base instanceof COSDictionary) {
        COSDictionary baseDict = (COSDictionary) base;
        if (baseDict.keySet().contains(COSName.K)) {
            createDirectDescendants(baseDict.getItem(COSName.K), parent);
        }//from ww w .  j  a  v a  2 s  .  c  om
    } else if (base instanceof COSArray) {
        COSArray array = (COSArray) base;
        for (int i = 0; i < array.size(); i++) {
            createDirectDescendants(array.get(i), parent);
        }
    } else {
        assert base instanceof COSObject;
        COSObject obj = (COSObject) base;
        createAndRegisterStructElem(obj);
        PDFStructElem elem = structElemCache.get((int) obj.getObjectNumber());
        copyElemEntries(obj, elem);
        parent.addKid(elem);
        elem.setParent(parent);
        COSBase objKid = obj.getItem(COSName.K);
        if (objKid != null) {
            createDirectDescendants(objKid, elem);
        }
    }
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

private PDFStructElem createPageStructElements(COSObject entry) throws IOException {
    int objID = (int) entry.getObjectNumber();
    if (structElemCache.containsKey(objID)) {
        return null;
    }//from  w w  w  .  ja  v  a 2  s.c om
    PDFStructElem elem = createAndRegisterStructElem(entry);
    copyElemEntries(entry, elem);
    COSDictionary baseDict = (COSDictionary) entry.getObject();
    COSBase kid = baseDict.getItem(COSName.K);
    createKids(kid, baseDict, elem, false);
    return elem;
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

private void createParents(COSObject cosElem, COSObject cosParentElem, PDFStructElem elem) throws IOException {
    int elemObjectID = (int) cosParentElem.getObjectNumber();
    COSDictionary parentElemDictionary = (COSDictionary) cosParentElem.getObject();
    PDFStructElem elemParent = structElemCache.get(elemObjectID);
    if (isStructureTreeRoot(parentElemDictionary)) {
        elem.setParent(currentSessionElem);
        currentSessionElem.addKid(elem);
        topElems.add(cosElem);/*from   w  w  w  .  ja  va2  s.  c o m*/
    } else if (elemParent != null) {
        if (!checkIfStructureTypeIsPresent(parentElemDictionary, StandardStructureTypes.TR)) {
            elem.setParent(elemParent);
            int position = StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
            elemParent.addKidInSpecificOrder(position, elem);
        }
    } else if (!checkIfStructureTypeIsPresent(parentElemDictionary, StandardStructureTypes.DOCUMENT)) {
        elemParent = createAndRegisterStructElem(cosParentElem);
        copyElemEntries(cosParentElem, elemParent);
        elem.setParent(elemParent);
        fillKidsWithNull(elemParent, (COSDictionary) cosParentElem.getObject());
        if (((COSName) parentElemDictionary.getDictionaryObject(COSName.S)).getName()
                .equals(StandardStructureTypes.TR)) {
            COSBase rowKids = parentElemDictionary.getItem(COSName.K);
            createKids(rowKids, parentElemDictionary, elemParent, true);
        } else {
            int position = StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
            elemParent.addKidInSpecificOrder(position, elem);
        }
        COSObject parentObj = (COSObject) parentElemDictionary.getItem(COSName.P);
        createParents(cosParentElem, parentObj, elemParent);
    } else {
        elem.setParent(currentSessionElem);
        int position = StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
        currentSessionElem.addKidInSpecificOrder(position, elem);
        topElems.add(cosElem);
    }
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

private void createkidEntryFromCosObjectForRow(COSObject entree, PDFStructElem parent) throws IOException {
    int entreeObjID = (int) entree.getObjectNumber();
    PDFStructElem elemRef = structElemCache.get(entreeObjID);
    if (elemRef == null) {
        elemRef = createAndRegisterStructElem(entree);
        copyElemEntries(entree, elemRef);
        COSDictionary baseDict = (COSDictionary) entree.getObject();
        COSBase kid = baseDict.getItem(COSName.K);
        createKids(kid, baseDict, elemRef, true);
        parent.addKid(elemRef);//from   w w  w . j a  va 2  s. c  o m
    } else {
        parent.addKid(elemRef);
    }
    elemRef.setParent(parent);
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

private void findLeafNodesInPageFromStructElemObjects(COSBase entry) throws IOException {
    if (entry instanceof COSObject) {
        COSObject entryObj = (COSObject) entry;
        COSDictionary structElemDictionary = (COSDictionary) entryObj.getObject();
        COSBase kid = structElemDictionary.getItem(COSName.K);
        findLeafKids(kid, entryObj);//from   w  w  w .jav  a 2 s  . c o  m
    }
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

private void findLeafKids(COSBase kid, COSObject parent) throws IOException {
    if (kid instanceof COSArray) {
        COSArray arrayKid = (COSArray) kid;
        for (COSBase arrayEntry : arrayKid) {
            findLeafKids(arrayEntry, parent);
        }/* ww w  . j  a v  a2  s .c o m*/
    } else if (kid instanceof COSObject) {
        COSObject kidObject = (COSObject) kid;
        COSBase base = kidObject.getObject();
        COSDictionary temp = (COSDictionary) base;
        if (temp.getDictionaryObject(COSName.S) != null && temp.getItem(COSName.K) != null) {

            COSBase tempKids = temp.getItem(COSName.K);
            findLeafKids(tempKids, kidObject);
        } else {
            findLeafKids(temp, parent);
        }
    } else if (kid instanceof COSDictionary) {
        COSDictionary kidDictionary = (COSDictionary) kid;
        COSDictionary parentDict = (COSDictionary) parent.getObject();
        if (isElementFromSourcePage(kidDictionary, parentDict)) {
            PDFStructElem elem = structElemCache.get((int) parent.getObjectNumber());
            if (elem == null) {
                elem = createAndRegisterStructElem(parent);
                copyElemEntries(parent, elem);
                extra.add(parent);
                createKids(kid, parentDict, elem, false);
            }
        }
    } else {
        assert kid instanceof COSInteger;
        COSDictionary parentDict = (COSDictionary) parent.getObject();
        if (checkPageEntryInAncestorsRecursively(parentDict)) {
            PDFStructElem elem = structElemCache.get((int) parent.getObjectNumber());
            if (elem == null) {
                elem = createAndRegisterStructElem(parent);
                copyElemEntries(parent, elem);
                createKids(kid, parentDict, elem, false);
            }
        }
    }
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMerger.java

License:Apache License

private void fillKidsWithNull(PDFStructElem elem, COSDictionary baseElem) {
    COSBase baseArray = baseElem.getItem(COSName.K);
    if (baseArray instanceof COSArray) {
        COSArray array = (COSArray) baseArray;
        int size = array.size();
        for (int i = 0; i < size; i++) {
            elem.addKid(null);/* w  ww  . ja v  a  2  s . co m*/
        }
    }
}

From source file:org.apache.fop.render.pdf.pdfbox.StructureTreeMergerUtil.java

License:Apache License

public static int findObjectPositionInKidsArray(COSObject kid) {
    COSObject parent = (COSObject) kid.getItem(COSName.P);
    COSBase kids = parent.getItem(COSName.K);
    if (kids instanceof COSArray) {
        COSArray kidsArray = (COSArray) kids;
        return kidsArray.indexOfObject(kid);
    } else {/*from  w  w  w .j  a  va2  s  .  c  om*/
        return 0;
    }
}

From source file:org.apache.fop.render.pdf.StructureTreeMergerTestCase.java

License:Apache License

@Test
public void testCheckNullCOSObject() throws IOException {
    setUp();/*from   ww w.j  av a 2  s  .  c o m*/
    PDDocument doc = PDDocument.load(new File(getClass().getResource(BrokenLink).getFile()));
    PDPage srcPage = doc.getPage(0);
    PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
    COSArray markedContentParents = finder.getPageParentTreeArray(doc);
    COSObject nullObj = new COSObject(null);
    nullObj.setObjectNumber(100);
    nullObj.setGenerationNumber(0);
    PDFStructElem elem = new PDFStructElem();
    elem.setObjectNumber(2);
    COSObject parent = (COSObject) markedContentParents.get(1);
    COSArray kids = (COSArray) parent.getDictionaryObject(COSName.K);
    COSDictionary kid = (COSDictionary) kids.get(1);
    kid.setItem(COSName.OBJ, nullObj);
    adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
    PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
    StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
    merger.copyStructure(markedContentParents);
    PDFArray array = handler.getPageParentTree();
    PDFStructElem parentElem = (PDFStructElem) array.get(1);
    PDFDictionary objrDict = (PDFDictionary) parentElem.getKids().get(1);
    Assert.assertNull(objrDict.get("Obj"));
}