Нужно ответить на 2 вопроса:
- Почему Adobe Reader отображает значение поля только тогда, когда поле выбрано?
- Как определить, используется ли 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:
![АП-РУПС](https://i.stack.imgur.com/wMTEX.jpg)
- #P14# <блочная цитата> #P15# блочная цитата> #P16#
2. AcroForm или XFA?
Как правило, средство просмотра с поддержкой XFA будет отображать форму XFA. Программа просмотра без поддержки XFA будет использовать AcroForm. Вы можете убедиться в этом, задав разные значения для соответствующих полей AcroForm и XFA. Вот результат: встроенная в Chrome программа просмотра PDF слева (без поддержки XFA), Acrobat справа: ![acro-vs-xfa](https://i.stack.imgur.com/gEHv0.png)
Зная, что 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