Hello

I've managed to somehow hardcode the security settings:

On Mon, Jul 27, 2015 at 2:23 PM, Roberto Nibali <[email protected]> wrote:

> Hi
>
> I'm trying to replicate the document security settings using PDFBox and
> can't seem to get it working at all. This is the code I use:
>
> private static PDDocument srcDoc;
> private static PDDocument tplDoc;
>
> @Test
> public static void SimpleTest() throws IOException {
>     String ownerPassword = "12345";
>     srcDoc = PDDocument.load(new File("./ccalt.pdf"), ownerPassword);
>     tplDoc = PDDocument.load(new File("./cctemp.pdf"), ownerPassword);
>     tplDoc.setAllSecurityToBeRemoved(true);
>     applyDocPermissions(ownerPassword, "");
>     srcDoc.close();
>     tplDoc.getDocumentCatalog().getAcroForm().setNeedAppearances(true);
>     tplDoc.save("ccmig.pdf");
>     tplDoc.close();
> }
> public static void applyDocPermissions(String ownerPassword, String 
> userPassword) throws IOException {
>     int encKeyLen;
>     AccessPermission srcDocAP = srcDoc.getCurrentAccessPermission();
>     AccessPermission destDocAP = new AccessPermission();
>     destDocAP.setCanAssembleDocument(srcDocAP.canAssembleDocument());
>     destDocAP.setCanExtractContent(srcDocAP.canExtractContent());
>     
> destDocAP.setCanExtractForAccessibility(srcDocAP.canExtractForAccessibility());
>     destDocAP.setCanFillInForm(srcDocAP.canFillInForm());
>     destDocAP.setCanModify(srcDocAP.canModify());
>     destDocAP.setCanModifyAnnotations(srcDocAP.canModifyAnnotations());
>     destDocAP.setCanPrint(srcDocAP.canPrint());
>     destDocAP.setCanPrintDegraded(srcDocAP.canPrintDegraded());
>     StandardProtectionPolicy policy = new 
> StandardProtectionPolicy(ownerPassword, userPassword, destDocAP);
>     encKeyLen = srcDoc.getEncryption().getLength();
>     policy.setEncryptionKeyLength(encKeyLen);
>     tplDoc.setAllSecurityToBeRemoved(false);
>     tplDoc.protect(policy);
> }
>
>
Using the following function, it works:

public static void applyDocPermissionsHardcoded(String ownerPassword,
String userPassword) throws IOException {
    int encKeyLen;

    AccessPermission srcDocAP = srcDoc.getCurrentAccessPermission();
    AccessPermission destDocAP = new AccessPermission();
    destDocAP.setCanPrint(true);
    //destDocAP.setCanPrintDegraded(false);
    destDocAP.setCanModify(false);
    destDocAP.setCanAssembleDocument(false);
    destDocAP.setCanExtractContent(false);
    destDocAP.setCanExtractForAccessibility(true);
    //Page Extraction = false
    destDocAP.setCanModifyAnnotations(false);
    destDocAP.setCanFillInForm(true);
    //Signing = true
    //Creation of Template Pages = true
    StandardProtectionPolicy policy = new
StandardProtectionPolicy(ownerPassword, userPassword, destDocAP);
    encKeyLen = srcDoc.getEncryption().getLength();
    policy.setEncryptionKeyLength(encKeyLen);
    tplDoc.setAllSecurityToBeRemoved(false);
    tplDoc.protect(policy);
}

Let's hope all documents I need to migrate have the same security settings.
For now, this issue does not need to be looked at anymore. What's
funny is that using PDFBox, I cannot modify the
 page extraction, signing or the creation of template pages bits in
the security settings. Is this missing in the implementation?

Cheers

Roberto

Reply via email to