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

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

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

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Решение

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

0 голосов
/ 03 февраля 2020

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

...