Значения XFA изначально невидимы, когда установлены значения AcroForm

Я хочу автоматически заполнить двойную форму PDF AcroForm/XFA. Я включил пакет набора данных XFA, и все значения появились в Adobe Reader. Я установил ключ V= в записях AcroForms на новое значение, и все значения показали альтернативные программы чтения PDF.

Однако, когда я открываю PDF-файл с записями XFA и AcroForm V= в Adobe Reader, отображается только значение выбранного в данный момент текстового поля:

Текст отображается только в выбранном поле

Я не могу найти упоминания в PDF спецификация специального флага для установки при наличии AcroForms и XFA. Я предположил, что порядок клавиш XFA и Field может быть важен, но это тоже не так.

Как изменить мой файл PDF, чтобы значения отображались в Adobe Reader при запуске , и в программах чтения PDF, которые поддерживают только AcroForms, а не XFA?


person phihag    schedule 24.11.2015    source источник
comment
У меня возникли проблемы с обработкой вашего образца PDF. Мне пришлось дважды вставить «›», чтобы сделать поток XFA действительным: ‹/template и ‹/xfa:datasets   -  person rhens    schedule 27.11.2015
comment
@rhens Спасибо и за эту заметку! Я посмотрю на это.   -  person phihag    schedule 27.11.2015


Ответы (1)


Нужно ответить на 2 вопроса:

  1. Почему Adobe Reader отображает значение поля только тогда, когда поле выбрано?
  2. Как определить, используется ли AcroForm или XFA?

1. Отображаемые значения полей

В некоторых случаях Adobe Reader/Acrobat будет отображать поле формы по-разному в зависимости от того, выбрано оно или нет. Это типично для поля, которое имеет определенный внешний вид, отличающийся от того, как Reader/Acrobat будет отображать поле на основе его значения (и, возможно, некоторых настроек внешнего вида).

Если поле не выбрано, будет отображаться определенный внешний вид. Когда поле выбрано, отображается предварительный просмотр того, как Reader/Acrobat будет отображать его.

Немного фона:

Поле формы состоит из логической части (имя поля, значение поля и т. д.), называемой словарь поля, и части визуализации, называемой аннотацией виджета. Аннотация виджета может дополнительно содержать запись AP, содержащую потоки внешнего вида, которые определяют его визуализацию. См. Спецификация PDF, 1.7, таблица 8.15:

AP – словарь. Словарь внешнего вида, указывающий, как аннотация визуально представлена ​​на странице.

В образце PDF нет записей AP, то есть пустых визуализаций. Это то, что отображается для всех полей. При выборе поля вы видите предварительный просмотр Reader/Acrobat в зависимости от значения поля.

Вы можете проверить это, изменив значение поля вручную с помощью Reader/Acrobat. В этом случае будет сгенерирован и сохранен новый внешний вид. Теперь это поле будет отображаться одинаково, независимо от того, выбрано оно или нет.

Два варианта предотвращения этих «пустых» полей в Reader/Acrobat:

  • Создавайте потоки появления для всех полей формы. Я сделал это для одного поля (просто переустановив его значение с помощью iText, который автоматически генерирует поток появления).

    Результат: внешний вид

    Внутренняя структура PDF:

    АП-РУПС

  • #P14# <блочная цитата> #P15# #P16#

2. AcroForm или XFA?

Как правило, средство просмотра с поддержкой XFA будет отображать форму XFA. Программа просмотра без поддержки XFA будет использовать AcroForm. Вы можете убедиться в этом, задав разные значения для соответствующих полей AcroForm и XFA. Вот результат: встроенная в Chrome программа просмотра PDF слева (без поддержки XFA), Acrobat справа: acro-vs-xfa

Зная, что Reader/Acrobat использует форму XFA, почему мы по-прежнему видим пустые поля (см. вопрос 1)?

Похоже, что когда значения поля XFA и соответствующего ему поля AcroForm совпадают, Reader/Acrobat также использует некоторую информацию из AcroForm и т.д. информация о его внешнем виде. Когда значение XFA отличается от значения AcroForm, кажется, что поле AcroForm полностью игнорируется.

TL;DR Установите для параметра NeedAppearances значение true, чтобы заполнить пустые поля. Зрители, не поддерживающие XFA, автоматически вернутся к AcroForm.

(Мои тесты основаны на Adobe Acrobat X.)

person rhens    schedule 27.11.2015
comment
Вау, большое спасибо за отличный ответ! Я присужу тебе награду, как только смогу. - person phihag; 27.11.2015