如何标记和签署pdf ALREADY签名而不会使之前的签名无效

Ric*_*ard 3 pdf sign signature itextsharp

一些插件和程序可以做到这一点; 是否有任何示例或教程如何使用.net和itextSharp?

我需要签名pdf并在所有页面上标记图像,并添加另一个签名.打开文件时,文档上的第一个签名必须有效.

提前致谢.

mkl*_*mkl 8

当您要求打开文件时文档上第一个签名必须有效时,我假设您最初谈的是在当前的Adobe Reader版本中打开.

在这种情况下,您首先必须意识到允许和不允许的更改取决于第一个签名本身.请查看此答案,了解Adobe自Acrobat和Reader版本9以来考虑的"允许和禁止更改"的信息.

因此,要签名pdf并在所有页面上标记图像,并添加另一个签名,并且不会使(在Adobe软件的眼中)无效的过程中的初始签名,签署的pdf必须

  • 要么未经认证(即初始签名仅仅是批准签名)

  • 或者通过注释,表单填写和数字签名认证(即初始签名是允许这些类型的更改的证书签名),并且有一个空的签名字段供您签名.

如果签名的pdf已包含多个签名,则它们都不会通过锁定信息添加任何其他限制.

(此外,我假设PDF既未加密也未包含动态XFA表单;这会使事情更复杂.)

如果满足这些要求,则可以使用PdfStamper静态PdfStamper方法检索

public static PdfStamper CreateSignature(PdfReader reader, Stream os, char pdfVersion, string tempFile, bool append)
Run Code Online (Sandbox Code Playgroud)

最终bool参数值必须在哪里true(即您必须在追加模式下工作以使初始签名无效).

使用此功能,PdfStamper您可以通过注释在文档页面上添加图像.iText的在行动-第二版样品TimetableAnnotations3.java/TimetableAnnotations3.cs说明如何添加注解与PdfStampers.

然后像往常一样添加签名,创建新签名字段或使用空签名字段.您可以在白皮书PDF文档的数字签名中找到有关签名过程的详细信息; 可以在sourceforge上找到与该白皮书中的Java样本等效的C#样本.

PS:我在这篇文章中总是强调Adobe软件的眼睛.在谈论经过认证的PDF时,Adobe非常接近PDF标准.对于已签名但未经证明的PDF,Adobe应用类似于为认证文档指定的规则.