Search in sources :

Example 6 with PDNumberTreeNode

use of com.tom_roush.pdfbox.pdmodel.common.PDNumberTreeNode in project PdfBox-Android by TomRoush.

the class PDFMergerUtilityTest method testStructureTreeMerge6.

/**
 * PDFBOX-4418: test merging PDFs where ParentTree have a hierarchy.
 *
 * @throws IOException
 */
@Test
public void testStructureTreeMerge6() throws IOException {
    File srcPdf = TestResourceGenerator.downloadTestResource(TARGETPDFDIR, "PDFBOX-4418-000671.pdf", "https://issues.apache.org/jira/secure/attachment/12953421/000671.pdf");
    assumeTrue(srcPdf.exists());
    PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
    PDDocument src = PDDocument.load(srcPdf);
    PDStructureTreeRoot structureTreeRoot = src.getDocumentCatalog().getStructureTreeRoot();
    PDNumberTreeNode parentTree = structureTreeRoot.getParentTree();
    Map<Integer, COSObjectable> numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree);
    assertEquals(381, numberTreeAsMap.size());
    assertEquals(743, Collections.max(numberTreeAsMap.keySet()) + 1);
    assertEquals(0, (int) Collections.min(numberTreeAsMap.keySet()));
    assertEquals(743, structureTreeRoot.getParentTreeNextKey());
    File dstPdf = TestResourceGenerator.downloadTestResource(TARGETPDFDIR, "PDFBOX-4418-000314.pdf", "https://issues.apache.org/jira/secure/attachment/12953423/000314.pdf");
    assumeTrue(dstPdf.exists());
    PDDocument dst = PDDocument.load(dstPdf);
    structureTreeRoot = dst.getDocumentCatalog().getStructureTreeRoot();
    parentTree = structureTreeRoot.getParentTree();
    numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree);
    assertEquals(7, numberTreeAsMap.size());
    assertEquals(328, Collections.max(numberTreeAsMap.keySet()) + 1);
    assertEquals(321, (int) Collections.min(numberTreeAsMap.keySet()));
    // ParentTreeNextKey should be 321 but PDF has a higher value
    assertEquals(408, structureTreeRoot.getParentTreeNextKey());
    pdfMergerUtility.appendDocument(dst, src);
    src.close();
    dst.save(new File(TARGETTESTDIR, "PDFBOX-4418-merged.pdf"));
    dst.close();
    dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4418-merged.pdf"));
    checkWithNumberTree(dst);
    checkForPageOrphans(dst);
    structureTreeRoot = dst.getDocumentCatalog().getStructureTreeRoot();
    parentTree = structureTreeRoot.getParentTree();
    numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree);
    assertEquals(381 + 7, numberTreeAsMap.size());
    assertEquals(408 + 743, Collections.max(numberTreeAsMap.keySet()) + 1);
    assertEquals(321, (int) Collections.min(numberTreeAsMap.keySet()));
    assertEquals(408 + 743, structureTreeRoot.getParentTreeNextKey());
    dst.close();
    checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4418-merged.pdf"));
}
Also used : PDNumberTreeNode(com.tom_roush.pdfbox.pdmodel.common.PDNumberTreeNode) COSObjectable(com.tom_roush.pdfbox.pdmodel.common.COSObjectable) PDStructureTreeRoot(com.tom_roush.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot) PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) File(java.io.File) Test(org.junit.Test)

Aggregations

COSObjectable (com.tom_roush.pdfbox.pdmodel.common.COSObjectable)6 PDNumberTreeNode (com.tom_roush.pdfbox.pdmodel.common.PDNumberTreeNode)6 PDStructureTreeRoot (com.tom_roush.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot)4 PDDocument (com.tom_roush.pdfbox.pdmodel.PDDocument)3 File (java.io.File)3 Test (org.junit.Test)3 COSInteger (com.tom_roush.pdfbox.cos.COSInteger)2 PDDocumentCatalog (com.tom_roush.pdfbox.pdmodel.PDDocumentCatalog)2 PDPage (com.tom_roush.pdfbox.pdmodel.PDPage)2 PDAnnotation (com.tom_roush.pdfbox.pdmodel.interactive.annotation.PDAnnotation)2 COSArray (com.tom_roush.pdfbox.cos.COSArray)1 COSBase (com.tom_roush.pdfbox.cos.COSBase)1 COSDictionary (com.tom_roush.pdfbox.cos.COSDictionary)1 COSName (com.tom_roush.pdfbox.cos.COSName)1 COSNumber (com.tom_roush.pdfbox.cos.COSNumber)1 COSStream (com.tom_roush.pdfbox.cos.COSStream)1 PDDocumentInformation (com.tom_roush.pdfbox.pdmodel.PDDocumentInformation)1 PDDocumentNameDestinationDictionary (com.tom_roush.pdfbox.pdmodel.PDDocumentNameDestinationDictionary)1 PDDocumentNameDictionary (com.tom_roush.pdfbox.pdmodel.PDDocumentNameDictionary)1 PDResources (com.tom_roush.pdfbox.pdmodel.PDResources)1