A assinatura digital em PDF permite proteger o documento antes de ser compartilhado com as partes interessadas. A falsificação no conteúdo de um documento PDF assinado digitalmente pode ser facilmente detectada e verificada. Para assinar digitalmente os documentos PDF de forma programática, mostrarei como adicionar e verificar assinaturas digitais em PDF usando Java. Abordaremos os seguintes cenários relacionados a assinaturas digitais em PDFs.

Biblioteca Java para assinar digitalmente PDF

Para adicionar e verificar assinaturas digitais em PDF, usaremos Aspose.PDF for Java. Junto com outros recursos de manipulação de PDF, o Aspose.PDF para Java permite adicionar e verificar assinaturas digitais em PDFs sem problemas. Você pode baixar o JAR da API ou instalá-lo em seu aplicativo baseado em Maven.

Repositório:

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

Dependência:

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

Adicionar assinatura digital a um PDF usando Java

A seguir estão as etapas para adicionar uma assinatura digital a um documento PDF usando o Aspose.PDF para Java.

  • Crie uma instância da classe Document e inicialize-a com o caminho do documento PDF.
  • Inicialize a classe PdfFileSignature e passe para ela o objeto Document.
  • Crie uma instância da classe PKCS7 e inicialize-a com o caminho de um certificado e a senha.
  • Inicialize a classe DocMDPSignature para o tipo de assinatura MDP.
  • Defina um Retângulo para colocar a assinatura na página do documento.
  • Assine digitalmente o documento PDF usando o método PdfFileSignature.Certify().
  • Salve o PDF assinado usando o método PdfFileSignature.Save().

O exemplo de código a seguir mostra como assinar digitalmente um PDF usando Java.

// Criar um objeto 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);
// Definir aparência da assinatura
signature.setSignatureAppearance("aspose-logo.png"); 
// Crie qualquer um dos três tipos de assinatura
signature.certify(1, "Signature Reason", "Contact", "Location", true, rect, docMdpSignature);
// Salvar arquivo PDF assinado digitalmente
signature.save("Digitally Signed PDF.pdf");

Assinar PDF digitalmente com um servidor de carimbo de data/hora usando Java

O Aspose.PDF para Java também permite adicionar assinaturas digitais ao PDF com o servidor TimeStamp. A classe TimestampSettings é usada para esta finalidade. O exemplo de código a seguir mostra como adicionar assinatura digital a um PDF com um servidor TimeStamp usando Java.

// Criar um objeto 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);
// Definir aparência da assinatura
signature.setSignatureAppearance("aspose-logo.png"); 
// Crie qualquer um dos três tipos de assinatura
signature.sign(1, "Signature Reason", "Contact", "Location", true, rect, pkcs);
// Salvar arquivo PDF assinado digitalmente
signature.save("Digitally Signed PDF.pdf");

Verificar assinatura digital em um PDF usando Java

Quando você recebe um PDF assinado digitalmente, pode verificar sua assinatura com bastante facilidade. A seguir estão as etapas para verificar um PDF assinado digitalmente.

O exemplo de código a seguir mostra como verificar um documento PDF assinado digitalmente usando Java.

// Criar assinatura de arquivo PDF
PdfFileSignature pdfSign = new PdfFileSignature();
// Vincular PDF
pdfSign.bindPdf("Digitally Signed PDF.pdf");
// Verifique a assinatura usando o nome da assinatura
if (pdfSign.verifySigned("Signature1"))
{
	if (pdfSign.isCertified()) // Certified?
	{
		if (pdfSign.getAccessPermissions() == DocMDPAccessPermissions.FillingInForms) // Get access permission
		{
			// Faça alguma coisa
		}
	} 
}

Conclusão

Neste artigo, você aprendeu como adicionar assinatura digital a um PDF usando Java. Além disso, vimos como verificar um arquivo PDF assinado digitalmente em algumas etapas. Você pode aprender mais sobre Java PDF API usando a documentação, bem como os exemplos de código-fonte hospedados no GitHub.

Veja também