Why do I get a BouncyCastle NoClassDefFoundError?
Here is the code:
PdfReader reader = new PdfReader("my.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("new.pdf")); stamper.setEncryption("reader_password".getBytes(), "permission_password".getBytes(), PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128); stamper.close();
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable
Posted on StackOverflow on May 19, 2014 by wizclark99
When you look at the POM file for iText, you see the following dependencies:
org.bouncycastlebcprov-jdk15on1.49jarcompiletrueorg.bouncycastlebcpkix-jdk15on1.49jarcompiletrue
This means that you need the bcprov and the bcpkix jars version 1.49 from Bouncycastle. Please check your POM file.
In iText 7 PDF encryption should be done like this:
PdfReader reader = new PdfReader("my.pdf");
WriterProperties props = new WriterProperties()
.setStandardEncryption("reader_password".getBytes(), "permission_password".getBytes(), EncryptionConstants.ALLOW_PRINTING,
EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA);
PdfWriter writer = new PdfWriter(new FileOutputStream("new.pdf"), props);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
pdfDoc.close();