PDF 中的数字签名可让您在与利益相关者共享之前保护文档。伪造数字签名 PDF 文档的内容很容易被检测和验证。为了以编程方式对 PDF 文档进行数字签名,我将向您展示如何使用 Java 在 PDF 中添加和验证数字签名。我们将介绍以下与 PDF 中的数字签名相关的场景。

用于数字签名 PDF 的 Java 库

为了在 PDF 中添加和验证数字签名,我们将使用 Aspose.PDF for Java。与其他 PDF 操作功能一起,Aspose.PDF for Java 允许您在 PDF 中无缝添加和验证数字签名。您可以下载 API 的 JAR 或将其安装在基于 Maven 的应用程序中。

存储库:

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

依赖:

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

使用 Java 将数字签名添加到 PDF

以下是使用 Aspose.PDF for Java 向 PDF 文档添加数字签名的步骤。

以下代码示例展示了如何使用 Java 对 PDF 进行数字签名。

// 创建一个文档对象
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);
// 设置签名外观
signature.setSignatureAppearance("aspose-logo.png"); 
// 创建三种签名类型中的任何一种
signature.certify(1, "Signature Reason", "Contact", "Location", true, rect, docMdpSignature);
// 保存数字签名的 PDF 文件
signature.save("Digitally Signed PDF.pdf");

使用 Java 使用时间戳服务器对 PDF 进行数字签名

Aspose.PDF for Java 还允许您使用 TimeStamp 服务器将数字签名添加到 PDF。 TimestampSettings 类用于此目的。以下代码示例展示了如何使用 Java 将数字签名添加到带有时间戳服务器的 PDF。

// 创建一个文档对象
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);
// 设置签名外观
signature.setSignatureAppearance("aspose-logo.png"); 
// 创建三种签名类型中的任何一种
signature.sign(1, "Signature Reason", "Contact", "Location", true, rect, pkcs);
// 保存数字签名的 PDF 文件
signature.save("Digitally Signed PDF.pdf");

使用 Java 验证 PDF 中的数字签名

当您收到经过数字签名的 PDF 时,您可以很容易地验证其签名。以下是验证数字签名 PDF 的步骤。

以下代码示例显示了如何使用 Java 验证数字签名的 PDF 文档。

// 创建 PDF 文件签名
PdfFileSignature pdfSign = new PdfFileSignature();
// 绑定PDF
pdfSign.bindPdf("Digitally Signed PDF.pdf");
// 使用签名名称验证签名
if (pdfSign.verifySigned("Signature1"))
{
	if (pdfSign.isCertified()) // Certified?
	{
		if (pdfSign.getAccessPermissions() == DocMDPAccessPermissions.FillingInForms) // Get access permission
		{
			// 做一点事
		}
	} 
}

结论

在本文中,您学习了如何使用 Java 向 PDF 添加数字签名。此外,我们还了解了如何通过几个步骤验证数字签名的 PDF 文件。您可以使用 文档 以及 GitHub 上托管的源代码示例了解有关 Java PDF API 的更多信息。

也可以看看