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