PDFBox - Crittografia di un documento PDF

Nel capitolo precedente abbiamo visto come inserire un'immagine in un documento PDF. In questo capitolo, discuteremo come crittografare un documento PDF.

Crittografia di un documento PDF

È possibile crittografare un documento PDF utilizzando i metodi forniti da StandardProtectionPolicy e AccessPermission classes.

Il AccessPermissionclass viene utilizzata per proteggere il documento PDF assegnandogli i permessi di accesso. Utilizzando questa classe, è possibile impedire agli utenti di eseguire le seguenti operazioni.

  • Stampa il documento
  • Modifica il contenuto del documento
  • Copia o estrai il contenuto del documento
  • Aggiungi o modifica annotazioni
  • Compila i campi del modulo interattivo
  • Estrai testo e grafica per l'accessibilità alle persone con problemi di vista
  • Assembla il documento
  • Stampa in qualità degradata

Il StandardProtectionPolicy class viene utilizzata per aggiungere una protezione basata su password a un documento.

Di seguito sono riportati i passaggi per crittografare un documento PDF esistente.

Passaggio 1: caricamento di un documento PDF esistente

Carica un documento PDF esistente utilizzando il metodo statico load() del PDDocumentclasse. Questo metodo accetta un oggetto file come parametro, poiché si tratta di un metodo statico, è possibile richiamarlo utilizzando il nome della classe come mostrato di seguito.

File file = new File("path of the document") 
PDDocument document = PDDocument.load(file);

Passaggio 2: creazione dell'oggetto autorizzazione di accesso

Istanziare il file AccessPermission classe come mostrato di seguito.

AccessPermission accessPermission = new AccessPermission();

Passaggio 3: creazione dell'oggetto StandardProtectionPolicy

Istanziare il file StandardProtectionPolicy class passando la password del proprietario, la password dell'utente e il file AccessPermission oggetto come mostrato di seguito.

StandardProtectionPolicy spp = new StandardProtectionPolicy("1234","1234",accessPermission);

Passaggio 4: impostazione della lunghezza della chiave di crittografia

Impostare la lunghezza della chiave di crittografia utilizzando il setEncryptionKeyLength() metodo come mostrato di seguito.

spp.setEncryptionKeyLength(128);

Passaggio 5: impostazione delle autorizzazioni

Imposta le autorizzazioni utilizzando il setPermissions()metodo della classe StandardProtectionPolicy. Questo metodo accetta un fileAccessPermission oggetto come parametro.

spp.setPermissions(accessPermission);

Passaggio 6: protezione del documento

Puoi proteggere il tuo documento usando il protect() metodo del PDDocumentclasse come mostrato di seguito. Passa ilStandardProtectionPolicy oggetto come parametro di questo metodo.

document.protect(spp);

Passaggio 7: salvataggio del documento

Dopo aver aggiunto il contenuto richiesto, salvare il documento PDF utilizzando il file save() metodo del PDDocument class come mostrato nel seguente blocco di codice.

document.save("Path");

Passaggio 8: chiusura del documento

Infine, chiudi il documento usando close() metodo di PDDocument classe come mostrato di seguito.

document.close();

Esempio

Supponiamo di avere un documento PDF denominato sample.pdf, nel percorso C:/PdfBox_Examples/ con pagine vuote come mostrato di seguito.

Questo esempio mostra come crittografare il documento PDF sopra menzionato. Qui, caricheremo il documento PDF denominatosample.pdfe crittografalo. Salva questo codice in un file con nomeEncriptingPDF.java.

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 EncriptingPDF {
  
   public static void main(String args[]) throws Exception {
      //Loading an existing document
      File file = new File("C:/PdfBox_Examples/sample.pdf");
      PDDocument document = PDDocument.load(file);
   
      //Creating access permission object
      AccessPermission ap = new AccessPermission();         

      //Creating StandardProtectionPolicy object
      StandardProtectionPolicy spp = new StandardProtectionPolicy("1234", "1234", ap);

      //Setting the length of the encryption key
      spp.setEncryptionKeyLength(128);

      //Setting the access permissions
      spp.setPermissions(ap);

      //Protecting the document
      document.protect(spp);

      System.out.println("Document encrypted");

      //Saving the document
      document.save("C:/PdfBox_Examples/sample.pdf");
      //Closing the document
      document.close();

   }
}

Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi.

javac EncriptingPDF.java
java EncriptingPDF

Al momento dell'esecuzione, il programma di cui sopra crittografa il documento PDF fornito visualizzando il seguente messaggio.

Document encrypted

Se provi ad aprire il documento sample.pdf, non è possibile, poiché è crittografato. Invece, richiede di digitare la password per aprire il documento come mostrato di seguito.