3

为什么此 PDF 在 Foxit Reader 中显示签名,而不在 Adob​​e 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));

当我在现有 PDF 上使用它时,在 Foxit Reader 中会识别出一个签名:

在此处输入图像描述

但不是在 Adob​​e Reader 中:

在此处输入图像描述

这是生成的 PDF用于分析。

为什么是这样?我能做些什么来解决这个问题,以便 Adob​​e 能够识别它吗?

编辑

这是在对它进行任何操作之前的原始 PDF 。

解决方案

我使用了来自Syncfusion 自己的 Nuget 服务器的 Nuget 包,它是最新的(Nuget.org 上的包不是)。

4

3 回答 3

6

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

为什么是这样?

但是,由于我对 Syncfusion PDF 库没有任何经验,所以我无法告诉您具体是什么

可以解决此问题,以便 Adob​​e 能够识别它。

PDF 对象结构

目录内容截图

损坏的字段层次结构

在上面的屏幕截图中,可以看到AcroForm字典中的Fields数组有一个条目, field object 12 0

Field 对象12 0只有一个本地名称(T的值:“Signature”)和一个包含单个后代条目 field object 的后代字段对象的Kids9 0数组。

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

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

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

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

其注释引用中的文档(对象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 库在创建签名时经常会创建这样的废话,因此您要签名的文档很可能有一些特别之处,请检查一下。例如,如果原始文档已经包含一个名为“Signature”的表单字段,则损坏的结构可能是某些 Syncfusion 代码试图将新签名字段与旧字段合并的结果。

于 2017-08-02T10:42:12.153 回答
1

We have already faced this kind of issue in our side with the older version. Now we have fixed this issue in our latest version. Click here to download the latest version

Here is the sample to sign an existing PDF

于 2017-08-03T11:25:24.723 回答
0

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

点击这里下载

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

于 2017-08-09T10:53:05.670 回答