La firma digital en PDF le permite proteger el documento antes de que se comparta con las partes interesadas. La falsificación del contenido de un documento PDF firmado digitalmente se puede detectar y verificar fácilmente. Para firmar digitalmente los documentos PDF mediante programación, le mostraré cómo agregar y verificar firmas digitales en PDF usando Java. Cubriremos los siguientes escenarios relacionados con las firmas digitales en archivos PDF.

Biblioteca Java para firmar PDF digitalmente

Para agregar y verificar firmas digitales en PDF, usaremos Aspose.PDF for Java. Junto con otras funciones de manipulación de PDF, Aspose.PDF for Java le permite agregar y verificar firmas digitales en archivos PDF sin problemas. Puede descargar el JAR de la API o instalarlo en su aplicación basada en Maven.

Repositorio:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

Dependencia:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>20.6</version>
</dependency>

Agregar firma digital a un PDF usando Java

Los siguientes son los pasos para agregar una firma digital a un documento PDF utilizando Aspose.PDF for Java.

  • Cree una instancia de la clase Document e inicialícela con la ruta del documento PDF.
  • Inicialice la clase PdfFileSignature y pásele el objeto Documento.
  • Cree una instancia de la clase PKCS7 e inicialícela con la ruta del certificado y la contraseña.
  • Inicialice la clase DocMDPSignature para el tipo de firma MDP.
  • Defina un Rectangle para colocar la firma en la página del documento.
  • Firme digitalmente un documento PDF utilizando el método PdfFileSignature.Certify().
  • Guarde el PDF firmado usando el método PdfFileSignature.Save().

El siguiente ejemplo de código muestra cómo firmar digitalmente un PDF usando Java.

// Crear un objeto de documento
Document doc = new Document("input.pdf");
PdfFileSignature signature = new PdfFileSignature(doc);
PKCS7 pkcs = new PKCS7("certificate.pfx", "1234567890"); // Use PKCS7/PKCS7Detached objects
DocMDPSignature docMdpSignature = new DocMDPSignature(pkcs, DocMDPAccessPermissions.FillingInForms);
Rectangle rect = new Rectangle(100, 600, 400, 100);
// Establecer la apariencia de la firma
signature.setSignatureAppearance("aspose-logo.png"); 
// Crea cualquiera de los tres tipos de firma
signature.certify(1, "Signature Reason", "Contact", "Location", true, rect, docMdpSignature);
// Guardar archivo PDF firmado digitalmente
signature.save("Digitally Signed PDF.pdf");

Firme digitalmente PDF con un servidor de marca de tiempo usando Java

Aspose.PDF for Java también le permite agregar firmas digitales a PDF con el servidor TimeStamp. La clase TimestampSettings se utiliza para este fin. El siguiente ejemplo de código muestra cómo agregar una firma digital a un PDF con un servidor TimeStamp usando Java.

// Crear un objeto de documento
Document doc = new Document("input.pdf");
PdfFileSignature signature = new PdfFileSignature(doc);
PKCS7 pkcs = new PKCS7("certificate.pfx", "1234567890"); // Use PKCS7/PKCS7Detached objects
TimestampSettings timestampSettings = new TimestampSettings("https:\\your_timestamp_settings", "user:password"); // User/Password can be omitted
pkcs.setTimestampSettings(timestampSettings); 
Rectangle rect = new Rectangle(100, 600, 400, 100);
// Establecer la apariencia de la firma
signature.setSignatureAppearance("aspose-logo.png"); 
// Crea cualquiera de los tres tipos de firma
signature.sign(1, "Signature Reason", "Contact", "Location", true, rect, pkcs);
// Guardar archivo PDF firmado digitalmente
signature.save("Digitally Signed PDF.pdf");

Verificar firma digital en un PDF usando Java

Cuando recibe un PDF firmado digitalmente, puede verificar su firma con bastante facilidad. Los siguientes son los pasos para verificar un PDF firmado digitalmente.

El siguiente ejemplo de código muestra cómo verificar un documento PDF firmado digitalmente mediante Java.

// Crear firma de archivo PDF
PdfFileSignature pdfSign = new PdfFileSignature();
// Enlazar PDF
pdfSign.bindPdf("Digitally Signed PDF.pdf");
// Verificar la firma usando el nombre de la firma
if (pdfSign.verifySigned("Signature1"))
{
	if (pdfSign.isCertified()) // Certified?
	{
		if (pdfSign.getAccessPermissions() == DocMDPAccessPermissions.FillingInForms) // Get access permission
		{
			// Hacer algo
		}
	} 
}

Conclusión

En este artículo, aprendió cómo agregar una firma digital a un PDF usando Java. Además, hemos visto cómo verificar un archivo PDF firmado digitalmente en unos pocos pasos. Puede obtener más información sobre la API PDF de Java utilizando la documentación, así como los ejemplos de código fuente alojados en GitHub.

Ver también