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.