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

时间:2017-08-02 04:26:23

标签: pdf adobe syncfusion adobe-reader foxit

为什么这个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上使用它时,福昕阅读器中会识别出签名:

enter image description here

但不是在Adobe Reader中:

enter image description here

以下是用于分析的resulting PDF

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

修改

在完成任何操作之前,这是original PDF

我使用了来自Syncfusion's own Nuget server的Nuget包,这是最新的(Nuget.org上没有)。

3 个答案:

答案 0 :(得分:5)

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

  

为什么会这样?

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

  

可以解决此问题,以便Adobe识别它。

PDF对象结构

Screenshot of Catalog contents

破碎的字段层次结构

在上面的屏幕截图中,可以看到 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会删除结构破坏的注释。如上所述,签名字段的字段结构已损坏。

进一步的特点

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

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

怎么做

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

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

答案 1 :(得分:1)

我们已经在旧版本中遇到过这种问题。现在我们在最新版本中解决了这个问题。 Click here to download the latest version

Here is the sample to sign an existing PDF

答案 2 :(得分:0)

我们已经使用样本检查了数据文件。该问题已在最新版本中修复。您正在使用的Nuget Package被认为是旧版本。找到以下链接下载最新的nuget包。

Click here to download

尝试使用最新版本的示例。