PDFBox: cifrado de un documento PDF

En el capítulo anterior, hemos visto cómo insertar una imagen en un documento PDF. En este capítulo, analizaremos cómo cifrar un documento PDF.

Cifrar un documento PDF

Puede cifrar un documento PDF utilizando los métodos proporcionados por StandardProtectionPolicy y AccessPermission classes.

los AccessPermissionLa clase se utiliza para proteger el documento PDF asignándole permisos de acceso. Con esta clase, puede restringir que los usuarios realicen las siguientes operaciones.

  • Imprime el documento
  • Modificar el contenido del documento
  • Copiar o extraer contenido del documento
  • Agregar o modificar anotaciones
  • Complete los campos del formulario interactivo
  • Extraer texto y gráficos para accesibilidad a personas con discapacidad visual.
  • Ensamblar el documento
  • Imprima con calidad degradada

los StandardProtectionPolicy La clase se usa para agregar una protección basada en contraseña a un documento.

A continuación se muestran los pasos para cifrar un documento PDF existente.

Paso 1: carga de un documento PDF existente

Cargue un documento PDF existente utilizando el método estático load() del PDDocumentclase. Este método acepta un objeto de archivo como parámetro, ya que este es un método estático, puede invocarlo usando el nombre de clase como se muestra a continuación.

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

Paso 2: crear un objeto de permiso de acceso

Instancia del AccessPermission clase como se muestra a continuación.

AccessPermission accessPermission = new AccessPermission();

Paso 3: Creación del objeto StandardProtectionPolicy

Instancia del StandardProtectionPolicy clase pasando la contraseña del propietario, la contraseña del usuario y la AccessPermission objeto como se muestra a continuación.

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

Paso 4: configuración de la longitud de la clave de cifrado

Establezca la longitud de la clave de cifrado mediante el setEncryptionKeyLength() método como se muestra a continuación.

spp.setEncryptionKeyLength(128);

Paso 5: configurar los permisos

Establezca los permisos usando el setPermissions()método de la clase StandardProtectionPolicy. Este método acepta unaAccessPermission objeto como parámetro.

spp.setPermissions(accessPermission);

Paso 6: protección del documento

Puede proteger su documento utilizando el protect() método del PDDocumentclase como se muestra a continuación. Pasa elStandardProtectionPolicy objeto como parámetro de este método.

document.protect(spp);

Paso 7: guardar el documento

Después de agregar el contenido requerido, guarde el documento PDF usando el save() método del PDDocument class como se muestra en el siguiente bloque de código.

document.save("Path");

Paso 8: cerrar el documento

Finalmente, cierre el documento usando close() método de PDDocument clase como se muestra a continuación.

document.close();

Ejemplo

Supongamos que tenemos un documento PDF llamado sample.pdf, en el camino C:/PdfBox_Examples/ con páginas vacías como se muestra a continuación.

Este ejemplo demuestra cómo cifrar el documento PDF mencionado anteriormente. Aquí cargaremos el documento PDF llamadosample.pdfy cifrarlo. Guarde este código en un archivo con nombreEncriptingPDF.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 y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos.

javac EncriptingPDF.java
java EncriptingPDF

Tras la ejecución, el programa anterior cifra el documento PDF dado que muestra el siguiente mensaje.

Document encrypted

Si intenta abrir el documento sample.pdf, no puede, ya que está encriptado. En su lugar, le solicita que escriba la contraseña para abrir el documento como se muestra a continuación.