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();
}
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();
}
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"));
}
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"));
}
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"));
}
Aggregations