PDF显示福昕阅读器中的签名,但不显示Adobe Reader

Sco*_*y H 3 pdf adobe syncfusion foxit adobe-reader

为什么这个PDF在Foxit Reader中显示签名而不是Adobe Reader?

以下是用于生成它的Syncfusion PDF库中的代码(另请参阅有关签署现有文档的文档):

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));
Run Code Online (Sandbox Code Playgroud)

当我在现有PDF上使用它时,福昕阅读器中会识别出一个签名:

在此输入图像描述

但不是在Adobe Reader中:

在此输入图像描述

以下是生成的PDF分析.

为什么是这样?我有什么办法可以解决这个问题,以便Adobe能够识别它吗?

编辑

在完成任何操作之前,这是原始PDF.

我使用了Syncfusion 自己的Nuget服务器中的Nuget包,这是最新的(Nuget.org上没有).

mkl*_*mkl 5

这个答案集中在第一个问题上:

为什么是这样?

虽然我对Syncfusion PDF库没有任何经验,但我不知道具体是什么

可以做到解决这个问题,以便Adobe能够识别它.

PDF对象结构

目录内容的屏幕截图

破碎的字段层次

在上面的屏幕截图中,我们可以看到,在AcroForm字典中,Fields数组有一个条目,字段对象12 0.

Field对象12 0只有一个本地名称(值为T:"Signature")和一个子级数组,后代字段对象包含一个后代条目,field对象9 0.

Field对象9 0还有一个本地名称(也是"Signature";因此它的完全限定字段名称Signature.Signature)和许多其他条目,其中大部分都可用于签名字段和小部件.它没有条目.

根据PDF规范,字段中的条目是

如果此字段是字段层次结构中另一个字段的子项,则为必需

(ISO 32000-1,表220 - 所有字段字典共有的条目)

Annots引用中的文档(对象5 0)的单个页面将其作为窗口小部件注释的角色引用.9 0

因此,来自AcroForm字典Fields数组,字段对象9 0是另一个字段的后代,并具有完全限定名称Signature.Signature.

但是通过Annots从页面进入,字段对象9 0没有父对象,因此显示为具有完全限定名称的根字段Signature.

因此,签名字段的身份不清楚.

请求重绘

此外,在上面的对象结构中可以看到,在AcroForm字典中,NeedAppearances标志被设置为true.

这会询问PDF查看器

为文档中的所有窗口小部件注释构造外观流和外观字典.

(ISO 32000-1,表218 - 交互式表格字典中的条目)

在此过程中,Adobe Reader会删除结构破坏的注释.如上所述,您的签名字段的字段结构已被破坏.

进一步的特点

签名字段的一些条目有点奇怪:

  • BSMK是用于为小部件生成标准外观的数据.通常情况下,可见签名会带来他们的自定义签名外观,您的也是如此.那么这些价值观是什么?
  • DA,默认外观字符串,用于格式化可变文本注释的文本,例如FreeText注释或文本字段,但为什么签名字段中的DA

该怎么办

显然应该清除错误和特点.如上所述,我对Syncfusion PDF库没有任何经验,所以我无法告诉你如何做到这一点.

但有一点提示:我怀疑Syncfusion PDF库在创建签名时经常会产生这样的废话,因此您想要签名的文档很可能有些特殊,请检查一下.例如,如果原始文档已经包含名为"签名"的表单字段,则破坏的结构可能是某些Syncfusion代码尝试将新签名字段与旧字段合并的结果.