PDFBox - Criptografando um documento PDF

No capítulo anterior, vimos como inserir uma imagem em um documento PDF. Neste capítulo, discutiremos como criptografar um documento PDF.

Criptografar um documento PDF

Você pode criptografar um documento PDF usando os métodos fornecidos por StandardProtectionPolicy e AccessPermission classes.

o AccessPermissionclasse é usada para proteger o documento PDF atribuindo permissões de acesso a ele. Usando esta classe, você pode impedir que os usuários realizem as seguintes operações.

  • Imprima o documento
  • Modifique o conteúdo do documento
  • Copie ou extraia o conteúdo do documento
  • Adicionar ou modificar anotações
  • Preencha os campos do formulário interativo
  • Extraia texto e gráficos para acessibilidade a pessoas com deficiência visual
  • Monte o documento
  • Impressão com qualidade degradada

o StandardProtectionPolicy classe é usada para adicionar uma proteção baseada em senha a um documento.

A seguir estão as etapas para criptografar um documento PDF existente.

Etapa 1: Carregando um documento PDF existente

Carregue um documento PDF existente usando o método estático load() do PDDocumentclasse. Este método aceita um objeto de arquivo como parâmetro, uma vez que é um método estático, você pode invocá-lo usando o nome da classe, conforme mostrado abaixo.

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

Etapa 2: Criação de objeto de permissão de acesso

Instancie o AccessPermission classe como mostrado abaixo.

AccessPermission accessPermission = new AccessPermission();

Etapa 3: Criação do objeto StandardProtectionPolicy

Instancie o StandardProtectionPolicy classe passando a senha do proprietário, a senha do usuário e o AccessPermission objeto como mostrado abaixo.

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

Etapa 4: Definir o comprimento da chave de criptografia

Defina o comprimento da chave de criptografia usando o setEncryptionKeyLength() método conforme mostrado abaixo.

spp.setEncryptionKeyLength(128);

Etapa 5: Definir as permissões

Defina as permissões usando o setPermissions()método da classe StandardProtectionPolicy. Este método aceita umAccessPermission objeto como parâmetro.

spp.setPermissions(accessPermission);

Etapa 6: Protegendo o Documento

Você pode proteger seu documento usando o protect() método do PDDocumentclasse como mostrado abaixo. Passe oStandardProtectionPolicy objeto como parâmetro para este método.

document.protect(spp);

Etapa 7: Salvar o documento

Depois de adicionar o conteúdo necessário, salve o documento PDF usando o save() método do PDDocument classe conforme mostrado no seguinte bloco de código.

document.save("Path");

Etapa 8: Fechando o Documento

Por fim, feche o documento usando close() método de PDDocument classe como mostrado abaixo.

document.close();

Exemplo

Suponha que temos um documento PDF chamado sample.pdf, no caminho C:/PdfBox_Examples/ com páginas vazias como mostrado abaixo.

Este exemplo demonstra como criptografar o documento PDF mencionado acima. Aqui, vamos carregar o documento PDF chamadosample.pdfe criptografá-lo. Salve este código em um arquivo com o 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();

   }
}

Compile e execute o arquivo Java salvo no prompt de comando usando os comandos a seguir.

javac EncriptingPDF.java
java EncriptingPDF

Após a execução, o programa acima criptografa o documento PDF fornecido exibindo a seguinte mensagem.

Document encrypted

Se você tentar abrir o documento sample.pdf, você não pode, uma vez que é criptografado. Em vez disso, ele solicita a digitação da senha para abrir o documento, conforme mostrado abaixo.