Почему pikepdf заполняет некоторые поля PDF, но не заполняет другие в PDF-файле, созданном с помощью Acrobat DC

У меня есть PDF-файл с полями формы, созданный моим клиентом в Acrobat DC. Используя Python pikepdf, я заполняю эти поля программно. Странная проблема в том, что одни поля заполнены, другие нет. Я проверил и дважды перепроверил с Acrobat DC: все поля имеют одинаковые свойства текстового поля, причем имена явно уникальны. Код Python обращается к полям с их правильными именами. Поэтому я подозреваю, что проблема может быть связана с тем, как мой клиент создавал поля. Используя Acrobat DC, я удалил ошибочные поля и создал новые с теми же свойствами текстового поля, что и поля, которые отображаются как заполненные, - безрезультатно.

Теперь я проверил сгенерированный pikepdf PDF-файл с помощью Acrobat Reader, и все заполненные поля отображают свое значение, вздох! Однако ни одна из программ просмотра PDF в Linux не отображает содержимое полей, вызывающих нарушение, при отображении содержимого некоторых других полей. Я пробовал Okular, Atril, средство просмотра документов XFCE4 и LibreOffice Draw. Похоже, это указывает на то, что проблема связана с Acrobat. Любые идеи?

2 ответа

Решение

Я по глупости передал INT pikepdfпри заполнении полей; передача строки решила проблему. Более того: средства просмотра Linux не требуют наличия флага NeedAppearances для отображения заполненных значений, в то время как Acrobat Reader этот флаг нужен.

@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 создает потоки внешнего вида для одних полей, но не для других.

Другие вопросы по тегам