在 PDF 文件中添加签名
Contents
[
Hide
]
在 PDF 文件中添加数字签名(facades)
PdfFileSignature 类允许您在 PDF 文件中添加签名。您需要使用输入和输出 PDF 文件创建 PdfFileSignature 类的对象。您还需要创建一个矩形对象以添加签名,并且为了设置外观,您可以使用 PdfFileSignature 对象的 setSignatureAppearance 属性指定图像。
Aspose.Pdf.Facades 还提供不同类型的签名,如 PKCS#1、PKCS#7 和 PKCS#7Detached。 为了创建特定类型的签名,您需要使用证书文件和密码创建特定类的对象,例如 PKCS1、PKCS7 或 PKCS7Detached。
一旦创建了特定签名类型的对象,您可以使用 PdfFileSignature 类的 sign 方法来签署 PDF,并将特定的签名对象传递给此类。您还可以为此方法指定其他属性。最后,您需要使用 PdfFileSignature 类的 save 方法保存已签名的 PDF。以下代码片段向您展示如何在 PDF 文件中添加签名。
public static void AddPdfFileSignature() {
PdfFileSignature pdfSign = new PdfFileSignature();
pdfSign.bindPdf(_dataDir + "sample01.pdf");
// 为签名位置创建一个矩形
java.awt.Rectangle rect = new java.awt.Rectangle(10, 10, 300, 50);
// 设置签名外观
pdfSign.setSignatureAppearance(_dataDir + "aspose-logo.png");
// 创建三种签名类型中的任意一种
PKCS1 signature = new PKCS1(_dataDir + "test01.pfx", "Aspose2021"); // PKCS#1
pdfSign.sign(1, "我是文档作者", "test01@aspose-pdf-demo.local", "Aspose Pdf Demo, Australia", true, rect,
signature);
// 保存输出 PDF 文件
pdfSign.save(_dataDir + "DigitallySign.pdf");
}
以下代码示例展示了我们用两个签名签署文档的能力。在我们的示例中,我们将第一个签名放在第一页,第二个签名放在第二页。您可以指定您需要的页面。
public static void AddTwoSignature() {
PdfFileSignature pdfSign = new PdfFileSignature();
// 使用第一个签名签署
pdfSign.bindPdf(_dataDir + "sample01.pdf");
// 创建第一个签名位置的矩形
java.awt.Rectangle rect1 = new java.awt.Rectangle(10, 10, 300, 50);
// 创建第一个签名对象
PKCS1 signature1 = new PKCS1(_dataDir + "test01.pfx", "Aspose2021"); // PKCS#1
pdfSign.sign(1, "我是文档作者", "test@aspose-pdf-demo.local", "Aspose Pdf Demo, Australia", true, rect1,
signature1);
pdfSign.save(_dataDir + "DigitallySign.pdf");
// 使用第二个签名签署
pdfSign.bindPdf(_dataDir + "DigitallySign.pdf");
// 创建第二个签名位置的矩形
java.awt.Rectangle rect2 = new java.awt.Rectangle(10, 10, 300, 50);
// 创建第二个签名对象
PKCS1 signature2 = new PKCS1(_dataDir + "test02.pfx", "Aspose2021"); // PKCS#1
pdfSign.sign(2, "我是文档审阅者", "test02@aspose-pdf-demo.local", "Aspose Pdf Demo, Australia", true,
rect2, signature2);
// 保存输出PDF文件
pdfSign.save(_dataDir + "DigitallySign.pdf");
}
对于需要签名的带有表单或acroforms的文档,请参见以下示例。您需要使用输入和输出PDF文件创建PdfFileSignature类的对象。使用bindPdf进行绑定。创建一个能够添加所需属性的签名。在我们的示例中,它们是“Reason”和“CustomAppearance”。
public static void AddPdfFileSignatureField() {
PdfFileSignature pdfSign = new PdfFileSignature();
pdfSign.bindPdf(_dataDir + "sample02.pdf");
// 创建任意三种签名类型之一
PKCS1 signature = new PKCS1(_dataDir + "test02.pfx", "Aspose2021");
signature.setReason("签署作为作者");
SignatureCustomAppearance sca = new SignatureCustomAppearance();
signature.setCustomAppearance(sca);
sca.setFontSize(6);
sca.setFontFamilyName("Calibri");
// PKCS#1
pdfSign.sign("Signature1", signature);
// 保存输出PDF文件
pdfSign.save(_dataDir + "DigitallySign.pdf");
}
如果我们的文档有两个字段,那么签署它的算法与第一个例子类似。
public static void AddPdfFileSignatureField2() {
PdfFileSignature pdfSign = new PdfFileSignature();
pdfSign.bindPdf(_dataDir + "sample03.pdf");
// 创建三种签名类型中的任何一种
PKCS1 signature1 = new PKCS1(_dataDir + "test01.pfx", "Aspose2021");
SignatureCustomAppearance sca = new SignatureCustomAppearance();
signature1.setCustomAppearance(sca);
sca.setFontSize(6);
sca.setFontFamilyName("Calibri");
signature1.setReason("作为作者签名"); // PKCS#1
pdfSign.sign("Signature1", signature1);
// 保存输出的 PDF 文件
pdfSign.save(_dataDir + "DigitallySign.pdf");
pdfSign.bindPdf(_dataDir + "DigitallySign.pdf");
// 创建三种签名类型中的任何一种
PKCS1 signature2 = new PKCS1(_dataDir + "test02.pfx", "Aspose2021");
signature2.setReason("作为审阅者签名"); // PKCS#1
signature2.setCustomAppearance(sca);
pdfSign.sign("Signature2", signature2);
// 保存输出的 PDF 文件
pdfSign.save(_dataDir + "DigitallySign.pdf");
}