1

我有一个 PDF,其中包含我的客户使用 Acrobat DC 创建的表单域。使用 Python pikepdf 我以编程方式填充这些字段。奇怪的问题是某些字段已填写,而其他字段未填写。我用 Acrobat DC 检查并再次检查:所有字段都具有完全相同的文本字段属性,名称显然是唯一的。Python 代码使用正确的名称对字段进行寻址。所以我怀疑这个问题可能与我的客户创建字段的方式有关。使用 Acrobat DC,我删除了有问题的字段并创建了具有与显示为已填写的字段相同的文本字段属性的全新字段——但无济于事。

现在我用 Acrobat Reader 检查了 pikepdf 生成的 PDF,所有填写的字段都显示了它们的值,sigh!但是,所有 Linux PDF 查看器都不会在显示其他一些字段的内容时显示违规字段的内容。我尝试了 Okular、Atril、XFCE4 的文档查看器和 LibreOffice Draw。这似乎表明了 Acrobat 方面的问题。有任何想法吗?

4

2 回答 2

0

@joelgeraci:你说得对,pikepdf 不会生成外观流。奇怪的是,像 XFCE4 Document Viewer 这样的查看器会显示某些字段的填充值,但不会显示其他字段。这是 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-03T15:23:41.347 回答
0

解决方案

pikepdf我在填写字段时愚蠢地传递了一个 INT ;传递一个字符串解决了这个问题。更重要的是:Linux 查看器不需要“NeedAppearances”标志来显示填充的值,而 Acrobat Reader 确实需要这个标志。

于 2020-02-04T16:08:59.180 回答