Search in sources :

Example 96 with PDDocument

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

the class TestSymmetricKeyEncryption method testSymmEncrForKeySizeInner.

private void testSymmEncrForKeySizeInner(int keyLength, boolean preferAES, int sizePriorToEncr, byte[] inputFileWithEmbeddedFileAsByteArray, File embeddedFilePriorToEncryption, String userpassword, String ownerpassword) throws IOException {
    PDDocument document = PDDocument.load(inputFileWithEmbeddedFileAsByteArray);
    PDDocument encryptedDoc = encrypt(keyLength, preferAES, sizePriorToEncr, document, "ContainsEmbedded-", permission, userpassword, ownerpassword);
    File decryptedFile = new File(testResultsDir, "DecryptedContainsEmbedded-" + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + ".pdf");
    encryptedDoc.setAllSecurityToBeRemoved(true);
    encryptedDoc.save(decryptedFile);
    File extractedEmbeddedFile = extractEmbeddedFile(new FileInputStream(decryptedFile), "decryptedInnerFile-" + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + ".pdf");
    assertEquals(keyLength + "-bit " + (preferAES ? "AES" : "RC4") + " decrypted inner attachment pdf should have same size as plain one", embeddedFilePriorToEncryption.length(), extractedEmbeddedFile.length());
    // compare the two embedded files
    Assert.assertArrayEquals(getFileAsByteArray(embeddedFilePriorToEncryption), getFileAsByteArray(extractedEmbeddedFile));
    encryptedDoc.close();
}
Also used : PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) PDEmbeddedFile(com.tom_roush.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile) File(java.io.File) FileInputStream(java.io.FileInputStream)

Example 97 with PDDocument

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

the class TestSymmetricKeyEncryption method testSymmEncrForKeySize.

private void testSymmEncrForKeySize(int keyLength, boolean preferAES, int sizePriorToEncr, byte[] inputFileAsByteArray, String userpassword, String ownerpassword, AccessPermission permission) throws IOException {
    PDDocument document = PDDocument.load(inputFileAsByteArray);
    String prefix = "Simple-";
    int numSrcPages = document.getNumberOfPages();
    PDFRenderer pdfRenderer = new PDFRenderer(document);
    List<Bitmap> srcImgTab = new ArrayList<Bitmap>();
    List<byte[]> srcContentStreamTab = new ArrayList<byte[]>();
    for (int i = 0; i < numSrcPages; ++i) {
        srcImgTab.add(pdfRenderer.renderImage(i));
        InputStream unfilteredStream = document.getPage(i).getContents();
        byte[] bytes = IOUtils.toByteArray(unfilteredStream);
        unfilteredStream.close();
        srcContentStreamTab.add(bytes);
    }
    PDDocument encryptedDoc = encrypt(keyLength, preferAES, sizePriorToEncr, document, prefix, permission, userpassword, ownerpassword);
    assertEquals(numSrcPages, encryptedDoc.getNumberOfPages());
    pdfRenderer = new PDFRenderer(encryptedDoc);
    for (int i = 0; i < encryptedDoc.getNumberOfPages(); ++i) {
        // compare rendering
        Bitmap bim = pdfRenderer.renderImage(i);
        ValidateXImage.checkIdent(bim, srcImgTab.get(i));
        // compare content streams
        InputStream unfilteredStream = encryptedDoc.getPage(i).getContents();
        byte[] bytes = IOUtils.toByteArray(unfilteredStream);
        unfilteredStream.close();
        Assert.assertArrayEquals("content stream of page " + i + " not identical", srcContentStreamTab.get(i), bytes);
    }
    File pdfFile = new File(testResultsDir, prefix + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + "-decrypted.pdf");
    encryptedDoc.setAllSecurityToBeRemoved(true);
    encryptedDoc.save(pdfFile);
    encryptedDoc.close();
}
Also used : Bitmap(android.graphics.Bitmap) ByteArrayInputStream(java.io.ByteArrayInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) ArrayList(java.util.ArrayList) PDEmbeddedFile(com.tom_roush.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile) File(java.io.File) PDFRenderer(com.tom_roush.pdfbox.rendering.PDFRenderer)

Example 98 with PDDocument

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

the class PDFMergerUtilityTest method testStructureTreeMerge7.

/**
 * PDFBOX-4423: test merging a PDF where a widget has no StructParent.
 *
 * @throws IOException
 */
@Test
public void testStructureTreeMerge7() throws IOException {
    File inputPdf = TestResourceGenerator.downloadTestResource(TARGETPDFDIR, "PDFBOX-4423-000746.pdf", "https://issues.apache.org/jira/secure/attachment/12953866/000746.pdf");
    assumeTrue(inputPdf.exists());
    PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
    PDDocument src = PDDocument.load(inputPdf);
    PDStructureTreeRoot structureTreeRoot = src.getDocumentCatalog().getStructureTreeRoot();
    PDNumberTreeNode parentTree = structureTreeRoot.getParentTree();
    Map<Integer, COSObjectable> numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree);
    assertEquals(33, numberTreeAsMap.size());
    assertEquals(64, Collections.max(numberTreeAsMap.keySet()) + 1);
    assertEquals(31, (int) Collections.min(numberTreeAsMap.keySet()));
    assertEquals(126, structureTreeRoot.getParentTreeNextKey());
    PDDocument dst = new PDDocument();
    pdfMergerUtility.appendDocument(dst, src);
    src.close();
    dst.save(new File(TARGETTESTDIR, "PDFBOX-4423-merged.pdf"));
    dst.close();
    dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4423-merged.pdf"));
    checkWithNumberTree(dst);
    checkForPageOrphans(dst);
    structureTreeRoot = dst.getDocumentCatalog().getStructureTreeRoot();
    parentTree = structureTreeRoot.getParentTree();
    numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree);
    assertEquals(33, numberTreeAsMap.size());
    assertEquals(64, Collections.max(numberTreeAsMap.keySet()) + 1);
    assertEquals(31, (int) Collections.min(numberTreeAsMap.keySet()));
    assertEquals(64, structureTreeRoot.getParentTreeNextKey());
    dst.close();
    checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4423-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)

Example 99 with PDDocument

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

the class PDFMergerUtilityTest method testStructureTreeMerge3.

/**
 * PDFBOX-4408: Check that /StructParents values from pages and /StructParent values from
 * annotations are found in the /ParentTree.
 *
 * @throws IOException
 */
@Test
public void testStructureTreeMerge3() throws IOException {
    File inputPdf = TestResourceGenerator.downloadTestResource(TARGETPDFDIR, "PDFBOX-4408.pdf", "https://issues.apache.org/jira/secure/attachment/12952086/form.pdf");
    assumeTrue(inputPdf.exists());
    PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
    PDDocument src = PDDocument.load(inputPdf);
    ElementCounter elementCounter = new ElementCounter();
    elementCounter.walk(src.getDocumentCatalog().getStructureTreeRoot().getK());
    int singleCnt = elementCounter.cnt;
    int singleSetSize = elementCounter.set.size();
    assertEquals(25, singleCnt);
    assertEquals(25, singleSetSize);
    PDDocument dst = PDDocument.load(inputPdf);
    pdfMergerUtility.appendDocument(dst, src);
    src.close();
    dst.save(new File(TARGETTESTDIR, "PDFBOX-4408-merged.pdf"));
    dst.close();
    dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4408-merged.pdf"));
    // Assume that the merged tree has double element count
    elementCounter = new ElementCounter();
    elementCounter.walk(dst.getDocumentCatalog().getStructureTreeRoot().getK());
    assertEquals(singleCnt * 2, elementCounter.cnt);
    assertEquals(singleSetSize * 2, elementCounter.set.size());
    checkWithNumberTree(dst);
    checkForPageOrphans(dst);
    dst.close();
    checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4408-merged.pdf"));
}
Also used : PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) File(java.io.File) Test(org.junit.Test)

Example 100 with PDDocument

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

the class PDFMergerUtilityTest method testStructureTreeMerge4.

/**
 * PDFBOX-4417: Same as the previous tests, but this one failed when the previous tests
 * succeeded because of more bugs with cloning.
 *
 * @throws IOException
 */
@Test
public void testStructureTreeMerge4() throws IOException {
    PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
    PDDocument src = PDDocument.load(testContext.getAssets().open(SRCDIR + "/" + "PDFBOX-4417-001031.pdf"));
    ElementCounter elementCounter = new ElementCounter();
    elementCounter.walk(src.getDocumentCatalog().getStructureTreeRoot().getK());
    int singleCnt = elementCounter.cnt;
    int singleSetSize = elementCounter.set.size();
    assertEquals(104, singleCnt);
    assertEquals(104, singleSetSize);
    PDDocument dst = PDDocument.load(testContext.getAssets().open(SRCDIR + "/" + "PDFBOX-4417-001031.pdf"));
    pdfMergerUtility.appendDocument(dst, src);
    src.close();
    dst.save(new File(TARGETTESTDIR, "PDFBOX-4417-001031-merged.pdf"));
    dst.close();
    dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4417-001031-merged.pdf"));
    // Assume that the merged tree has double element count
    elementCounter = new ElementCounter();
    elementCounter.walk(dst.getDocumentCatalog().getStructureTreeRoot().getK());
    assertEquals(singleCnt * 2, elementCounter.cnt);
    assertEquals(singleSetSize * 2, elementCounter.set.size());
    checkWithNumberTree(dst);
    checkForPageOrphans(dst);
    dst.close();
    checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4417-001031-merged.pdf"));
}
Also used : PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) File(java.io.File) Test(org.junit.Test)

Aggregations

PDDocument (com.tom_roush.pdfbox.pdmodel.PDDocument)137 File (java.io.File)80 Test (org.junit.Test)69 PDPage (com.tom_roush.pdfbox.pdmodel.PDPage)37 PDPageContentStream (com.tom_roush.pdfbox.pdmodel.PDPageContentStream)22 InputStream (java.io.InputStream)21 Bitmap (android.graphics.Bitmap)18 IOException (java.io.IOException)14 PDResources (com.tom_roush.pdfbox.pdmodel.PDResources)11 PDFRenderer (com.tom_roush.pdfbox.rendering.PDFRenderer)11 ArrayList (java.util.ArrayList)11 PDDocumentCatalog (com.tom_roush.pdfbox.pdmodel.PDDocumentCatalog)10 ByteArrayOutputStream (java.io.ByteArrayOutputStream)9 FileInputStream (java.io.FileInputStream)9 FileOutputStream (java.io.FileOutputStream)9 COSArray (com.tom_roush.pdfbox.cos.COSArray)8 PDEmbeddedFile (com.tom_roush.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile)8 PDFont (com.tom_roush.pdfbox.pdmodel.font.PDFont)8 COSDictionary (com.tom_roush.pdfbox.cos.COSDictionary)7 Paint (android.graphics.Paint)6