- IronPDF
- 操作指南
- 签署PDF文件
对 PDF 文档进行数字签名
View the article in
English您的企业在PDF安全性和合规性的年度订阅上花费过多。 考虑
IronSecureDoc,提供了管理SaaS服务的解决方案,如数字签名、编辑、加密和保护,且仅需一次性付款。
立即试用重要消歧义:签署PDF
开发者经常询问如何使用IronPDF通过编程方式向PDF文档添加签名。 通常来说,签名对不同的开发者有不同的含义:
- 使用证书对 PDF 文档进行数字签名,以确保文档不会被篡改。
- 从图像文件向现有 PDF 添加图形手写签名图像。
- 在 PDF 文件上加盖证书图像。
在 PDF 中添加签名表单域,某些阅览器会提示签名。
安装使用 NuGet
nuget.org/packages/IronPdf/
安装使用 NuGet
nuget.org/packages/IronPdf/
开始在您的项目中使用IronPDF,并立即获取免费试用。
查看 IronPDF 上 Nuget 用于快速安装和部署。它有超过800万次下载,正在使用C#改变PDF。
考虑安装 IronPDF DLL 直接。下载并手动安装到您的项目或GAC表单中: IronPdf.zip
手动安装到你的项目中
下载DLL
使用数字证书签署PDF文件
IronPDF支持多种使用.pfx
和.p12
格式的数字签名证书来签署PDF的方法。 在这份操作指南中,您将了解用于数字签署PDF文档的三种主要方法。
签署方法 | 说明 |
---|
标志 | 标志 a PDF with a Pdf标志ature object |
标志WithFile | 标志 PDF with a digital signature certificate(.pfx or .p12) on disk |
标志WithStore | 标志s the PDF with digital signature extracted from your computer's signature storage. 基于拇指指纹识别 |
### 支持的数字签名证书文件 我们正式遵守`X509Certificate2`标准,并支持`.pfx`和`.p12`签名。 如果您的签名无法直接在IronPDF的签名方法中应用,您将需要创建一个`X509Certificate2`证书,相关指南可以在[微软文档](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509certificate2.-ctor). ### 标志:从 X509Certificate2 创建 PdfSignature IronPDF的签名方法将接受设置了**X509KeyStorageFlags**为**Exportable**的`X509Certificate2`对象。- IronPDF仅支持**X509KeyStorageFlags.Exportable**。 一些证书默认设置为可导出的KeyStorageFlags。 尝试使用不同的 KeyStorageFlags 将导致异常 => Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException:'不支持请求的操作。'
```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-X509Certificate2-with-privatekey.cs ``` ### 标志:为 PdfSignature 添加细粒度详情 在实例化PdfSignature或实例化后,可以向PdfSignature对象添加有用的信息,包括日期、签名联系人、位置、签名原因、时间戳以及在PDF文档上添加图像作为视觉外观。支持需要 SHA256 和 SHA512 的时间戳服务器
```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-add-granular-information.cs ``` ### 演示您可能会看到感叹号或警告标志,而不是勾选标记。 这是因为Adobe无法确认文件的真实性和完整性,因为证书不存在。 要获取复选标记,请将证书添加到Adobe并重新打开文档。 ### 添加图片的不同方法 图像可以通过多种方式包含进来: - 将 **SignatureImage** 属性设置为一个新的 PdfSignatureImage 对象。 - 使用 `LoadSignatureImageFromFile` 方法从文件中加载图像。LoadSignatureImageFromFile 支持多种图像格式。 - 使用 `LoadSignatureImageFromStream` 方法从流中加载图像。 图像流可以来自其他库,只要它的格式是TGA、PBM、TIFF、BMP、GIF、PNG、JPEG、Webp。 ```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-add-image.cs ``` ### 签名权限 您可以明确指定使您的证书保持有效的条件。 如果您希望在签名无效时进行更改,或仅允许表单字段更改等,请使用以下表格查看选项:PdfDocument.SignaturePermissions | 定义 |
---|
不允许更改 | 不得更改 |
允许填写表格 | 允许更改表单字段值 |
允许填写表格和注释 | 允许更改表单字段值和修改注释 |
该参数为可选参数,不设置该参数将应用认证特定修订版的签名,且该签名不可失效。 ### 保存并签署PDF修订版本迭代 在以下示例中,我们打开一个PDF文件,进行各种编辑,然后在保存之前将其签名。 对于签名权限,我们只允许表格填写作为未来的编辑,否则任何其他编辑都将导致签名失效。 然后我们将调用 `SaveAsRevision` 来将修订版保存到历史记录中,然后将新文档保存到磁盘上。 ```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-revision.cs ``` ### 了解签名的增量保存方式 虽然某些浏览器如Chrome浏览器只显示一个版本,PDF文件具有存储文档的早期版本的能力,类似于Git提交历史。 您将在更高级的PDF查看器中看到这一点,例如Adobe Acrobat。 在处理PDF签名时,了解这一点很重要,因为对PDF的签名操作仅适用于PDF的当前版本。 您的PDF可能包含旧版本的签名,或者可能有几个未签名的版本。 我们可以像以下示例一样进行可视化:PDF 文档迭代 | 证书 A | 证书 B | 证书 C | 证书 D |
---|
0 (第一次保存) | ✅ | | | |
1 | | | | |
2 | | | | |
3 | ✅ (仅限表格字段编辑) | ✅ (仅限表格字段编辑) | | |
4 (仅编辑表格字段) | | | ✅ | |
5 | ✅ (不允许进一步编辑) | ✅ (不允许进一步编辑) | | ✅ (不允许进一步编辑) |
上面的文档经过了六次不同的迭代。 此文件可能在公司各部门之间流传,并在第3次迭代时得到批准并最终确定。在此迭代中,甲方和乙方在设置了“仅表单字段编辑”权限的情况下签署了该文件。 这意味着可以填写PDF文档中的表单字段,但任何对文档的其他更改将使它们的签名无效。 在上面的例子中,我们可以假设C是填写表格并将其发送回给A、B和D的人,他们都在文档上最后签字,并设置了“禁止编辑”的权限。 由于在此文件中未执行任何使其无效的操作,当我们运行IronPDF的签名方法时,我们将得到**true**。 ### 回滚到旧版本 要回滚到 PDF 的上一个版本,您可以使用 `GetRevision` 方法。 这将忽略自该版本以来所做的任何更改,包括较新的签名。 要做到这一点,请使用: ```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-revert-revision.cs ``` ### 移除签名 IronPDF 有一个 `RemoveSignatures` 方法,可以删除 PDF 文档每个修订版本的所有签名。 用法如下: ```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-remove-signature.cs ``` ### 验证 PDF 中的所有签名 调用 PDF 文档上的验证签名方法将查看所有文档版本的所有签名,并验证它们是否仍然有效。 这将返回一个`bool`值,如果全部有效则为`true`。 ```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-verify-signatures.cs ``` ## 将签名盖章到PDF上 首先,我将从我想要签名的PDF开始。 我将使用此示例发票:我们将在PDF上应用一种以`.png`图片形式存在的手写签名。 这可能是手写签名或用于创建证书文件时使用的图像。这是我们将使用的样本签名: ### 代码 为了将手写签名作为水印添加到PDF中,我们将使用以下代码: ```cs :path=/static-assets/pdf/content-code-examples/how-to/signing-handwritten.cs ``` ### 输出结果 运行此代码后,我们将获得一个输出文件,文件底部右侧带有我们的签名。## 向PDF添加一个未签名的签名字段 目前尚未支持此功能。 您可以在[以编程方式在C#中填写PDF表单](/blog/using-ironpdf/programmatically-fill-pdf-form-csharp/)文章