我有一个PDF与表单域创建与Acrobat DC由我的客户。使用Python pikepdf,我以编程方式填充这些字段。奇怪的问题是,一些字段被填充了,而另一些字段没有。我用Acrobat DC一遍又一遍地检查:所有字段都有完全相同的文本字段属性,名称显然是唯一的。Python代码使用字段的正确名称对其进行寻址。所以我怀疑这个问题可能与我的客户创建字段的方式有关。使用Acrobat DC,我删除了有问题的字段,并使用与显示为已填写字段相同的文本字段属性创建了全新的字段--但无济于事。
现在我用Acrobat Reader检查了pikepdf生成的PDF,所有填写的字段都显示了它们的值,叹息!但是,没有一个Linux PDF查看器显示违规字段的内容,而显示其他一些字段的内容。我尝试了Okular、Atril、XFCE4的文档查看器和LibreOffice Draw。这似乎表明了Acrobat方面的问题。有什么想法吗?
发布于 2020-02-03 23:23:41
@joelgeraci :你说得对,pikepdf不会生成外观流。奇怪的是,像XFCE4文档查看器这样的查看器会显示某些字段的填充值,但不会显示其他字段的填充值。以下是pikepdf生成的页面转储的一部分:
<pikepdf.Dictionary(type_="/Page")({
"/Annots": [ {
"/DA": "/HeBo 14 Tf 0 g",
"/F": 4,
"/FT": "/Tx",
"/Ff": 12582912,
"/MK": {
},
"/P": <.get_object(785, 0)>,
"/Q": 1,
"/Rect": [ Decimal('134.783'), Decimal('432.837'), Decimal('205.463'), Decimal('458.588') ],
"/StructParent": 201,
"/Subtype": "/Widget",
"/T": "Number_01",
"/Type": "/Annot"
}, {
"/DA": "/HeBo 14 Tf 0 g",
"/F": 4,
"/FT": "/Tx",
"/Ff": 12582912,
"/MK": {
},
"/P": <.get_object(785, 0)>,
"/Q": 1,
"/Rect": [ Decimal('590.089'), Decimal('430.645'), Decimal('660.768'), Decimal('455.76') ],
"/StructParent": 202,
"/Subtype": "/Widget",
"/T": "Units_01",
"/Type": "/Annot"
} ],
...
})>字段"Number_01“显示为已填充,而字段"Units_01”则不显示,尽管这两个字段都没有外观流。尽管pikepdf不能更新外观流,但是其他字段确实有一个外观流,并且填充的值也会显示出来。我也想知道为什么Acrobat DC会为一些字段创建外观流,而不是为其他字段创建外观流。
发布于 2020-02-05 00:08:59
解决方案
在填充字段时,我愚蠢地向pikepdf传递了一个整数;传递一个字符串解决了这个问题。更重要的是: Linux查看器不需要'NeedAppearances‘标志来显示填充值,而Acrobat Reader需要这个标志。
https://stackoverflow.com/questions/59992748
复制相似问题