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上没有).
这个答案集中在第一个问题上:
为什么是这样?
虽然我对Syncfusion PDF库没有任何经验,但我不知道具体是什么
可以做到解决这个问题,以便Adobe能够识别它.
在上面的屏幕截图中,我们可以看到,在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会删除结构破坏的注释.如上所述,您的签名字段的字段结构已被破坏.
签名字段的一些条目有点奇怪:
显然应该清除错误和特点.如上所述,我对Syncfusion PDF库没有任何经验,所以我无法告诉你如何做到这一点.
但有一点提示:我怀疑Syncfusion PDF库在创建签名时经常会产生这样的废话,因此您想要签名的文档很可能有些特殊,请检查一下.例如,如果原始文档已经包含名为"签名"的表单字段,则破坏的结构可能是某些Syncfusion代码尝试将新签名字段与旧字段合并的结果.
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |