Hi All,
I am using PDFBox version 2.0.5 and looking for help to protect a PDF with
owner password.
Here is my test program which is trying to disable the printing option and
protect the document with an owner password.
However, if I use the resultant PDF and run the program again with a
DIFFERENT owner password then it ENABLE the printing option.
Basically I need to disable the printing option in PDF with an owner
password and the printing option cannot be enabled back without using the
original owner password.
Please advise if I am missing anything in my below testing programme.
*import* java.io.File;
*import* org.apache.pdfbox.pdmodel.PDDocument;
*import* org.apache.pdfbox.pdmodel.encryption.AccessPermission;
*import* org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
*public* *class* TestEncryptPDF {
*public* *static* *void* main(String[] args) {
String inputPdfFileName = "D:\\temp\\test-input.pdf";
String cannotPrintPdfFileName = inputPdfFileName.replace(
".pdf", "-cannotPrint.pdf");
String canPrintPdfFileName = inputPdfFileName.replace(".pdf",
"-cannPrint.pdf");
*setPdfPassword*(inputPdfFileName, cannotPrintPdfFileName,
"OwnerPassword1234", *false*);
*setPdfPassword*(cannotPrintPdfFileName, canPrintPdfFileName,
"BreakingOwnerPassworAndEnablingPrinting", *true*);
}
*private* *static* *void* setPdfPassword(String inputPdfFileName,
String outputPdfFileName, String ownerPassword,
*boolean* canPrint) {
*try* {
PDDocument pdfDoc = PDDocument.*load*(*new* File(
inputPdfFileName));
AccessPermission ap = *new* AccessPermission();
ap.setCanPrint(canPrint);
ap.setCanAssembleDocument(*false*);
ap.setCanExtractContent(*false*);
ap.setCanExtractForAccessibility(*false*);
ap.setCanFillInForm(*false*);
ap.setCanModify(*false*);
ap.setCanModifyAnnotations(*false*);
ap.setReadOnly();
// setting only owner *pwd*
StandardProtectionPolicy spp = *new*
StandardProtectionPolicy(
ownerPassword, *null*, ap);
spp.setPreferAES(*true*);
spp.setEncryptionKeyLength(128);
spp.setPermissions(ap);
pdfDoc.protect(spp);
pdfDoc.save(outputPdfFileName);
pdfDoc.close();
} *catch* (Exception e) {
e.printStackTrace();
}
}
}
regards
RJC