为什么这个PDF在福昕阅读器中显示签名而不是Adobe Reader?
以下是用于生成它的Syncfusion PDF library代码(另请参阅有关signing an existing document的文档):
var signature = new PdfSignature(loadedDocument, page, certificate, "Signature");
signature.Certificate = certificate;
signature.Bounds = new RectangleF(100, 100, 200, 200);
signature.Appearence.Normal.Graphics.DrawRectangle(PdfBrushes.Red, new RectangleF(0, 0, 200, 200));
当我在现有PDF上使用它时,福昕阅读器中会识别出签名:
但不是在Adobe Reader中:
以下是用于分析的resulting PDF。
这是为什么?我有什么办法可以解决这个问题,以便Adobe能够识别它吗?
修改
在完成任何操作之前,这是original PDF。
解
我使用了来自Syncfusion's own Nuget server的Nuget包,这是最新的(Nuget.org上没有)。
答案 0 :(得分:5)
这个答案集中在第一个问题:
为什么会这样?
由于我对Syncfusion PDF库没有任何经验,我不知道具体是什么
可以解决此问题,以便Adobe识别它。
在上面的屏幕截图中,可以看到 AcroForm 字典中的 Fields 数组只有一个条目,字段对象12 0
。
字段对象12 0
只有一个本地名称(值 T :“签名”)和一个包含单个后代的 Kids 后代字段对象数组条目,字段对象9 0
。
字段对象9 0
也有一个本地名称(也是“签名”;因此其完全限定的字段名称为Signature.Signature
)和许多其他条目,其中大部分都可用于签名字段和窗口小部件。它没有父条目。
根据PDF规范,字段中的父条目为
如果此字段是字段层次结构中另一个字段的子项,则为必需
(ISO 32000-1,表220 - 所有字段词典共有的条目)
Annots 引用中的单个文档页面(对象5 0
)引用字段对象9 0
作为窗口小部件注释。
因此,来自 AcroForm 字典字段数组,字段对象9 0
是另一个字段的后代,并具有完全限定名称{{1 }}
但是通过 Annots 来自页面,字段对象Signature.Signature
没有父对象,因此显示为具有完全限定名称{{1}的根字段}。
因此,签名字段的身份不清楚。
此外,在上面的对象结构中,在 AcroForm 字典中, NeedAppearances 标志设置为9 0
。
这会询问PDF查看器
为文档中的所有窗口小部件注释构建外观流和外观词典。
(ISO 32000-1,表218 - 交互式表格字典中的条目)
在此过程中,Adobe Reader会删除结构破坏的注释。如上所述,签名字段的字段结构已损坏。
签名字段的一些条目有些奇怪:
显然应该清理错误和特点。如上所述,我对Syncfusion PDF库没有任何经验,所以我不能告诉你如何做到这一点。
但有一点提示:我怀疑Syncfusion PDF库在创建签名时经常会产生这样的废话,因此您想要签名的文档很可能有些特殊,请检查一下。例如。如果原始文档已包含名为“签名”的表单字段,则破坏的结构可能是某些Syncfusion代码尝试将新签名字段与旧字段合并的结果。
答案 1 :(得分:1)
我们已经在旧版本中遇到过这种问题。现在我们在最新版本中解决了这个问题。 Click here to download the latest version
答案 2 :(得分:0)
我们已经使用样本检查了数据文件。该问题已在最新版本中修复。您正在使用的Nuget Package被认为是旧版本。找到以下链接下载最新的nuget包。
尝试使用最新版本的示例。