Перейти к содержимому
pdftools.kz

Что такое AcroForm

AcroForm — механизм заполняемых форм в PDF. Он состоит из двух половин: поле хранит имя и значение, а виджет — прямоугольник на странице и поток внешнего вида, то есть готовый рисунок того, как это значение выглядит. У одного поля может быть несколько виджетов, если оно повторяется на разных страницах. Сведение формы переносит рисунок в содержимое страницы и снимает интерактивность.

Локально в браузеребез регистрации

Коротко о цифрах

Поле и виджет
значение хранится в поле, внешний вид — в виджете; виджетов может быть несколько
Сведение
внешний вид переносится в содержимое страницы, интерактивность снимается
Несведённые поля
возвращаются списком полных имён и остаются интерактивными
Аннотации
штампы и заметки запекаются и удаляются; ссылки остаются намеренно
Кириллица в значении
перерисовывается вшитым шрифтом, а не стандартным Helvetica

Поле, виджет и внешний вид

Поля образуют дерево с полными именами вида «Раздел.Фамилия»: так форма собирает связанные значения и так же на них ссылаются скрипты. Виджеты живут среди аннотаций страницы и отвечают за геометрию: где рамка, какого она размера, что нарисовано внутри. Пока эти половины связаны, программа-просмотрщик даёт вводить текст и ставить галочки.

Поток внешнего вида часто нарисован в собственной системе координат со своей рамкой и матрицей преобразования. Спецификация требует вписать преобразованную рамку в прямоугольник аннотации — иначе штампы и графические подписи при сведении уезжают или меняют масштаб. Это тонкость, которую легко не заметить, пока в документе только текстовые поля.

Что происходит при сведении

  • Внешний вид каждого поля рисуется прямо в содержимом страницы: значение остаётся видимым, но перестаёт быть значением.
  • Штампы, заметки и выделения запекаются так же и удаляются из файла — текст комментария исчезает из документа, а не прячется за картинкой самого себя.
  • Ссылки намеренно оставлены: у них нет внешнего вида, а удаление сломало бы навигацию без всякой пользы.
  • Поля, внешний вид которых разобрать не удалось, остаются интерактивными и возвращаются списком имён: тихо назвать документ сведённым значило бы обмануть.

Почему готовая функция библиотеки не используется

  • Она работает по принципу «всё или ничего»: падает на первом непонятном виджете, уже переписав страницы предыдущих полей, и один осиротевший виджет стоит всего документа.
  • Внешний вид она перерисовывает стандартным шрифтом с кодировкой WinAnsi — любое кириллическое значение немедленно даёт ошибку кодирования.
  • Она игнорирует собственную рамку и матрицу потока, а значит, портит именно штампы и графические подписи.
  • Наша реализация сначала разбирает поле целиком и применяет его, только если разобрались все виджеты; кириллицу повторно рисует вшитым шрифтом.

Частые вопросы

Зачем сводить форму, если она и так заполнена?

Чтобы значения нельзя было изменить и чтобы они одинаково выглядели везде. Незаполненная программа-просмотрщик может перерисовать поле по-своему, а в сведённом документе на странице лежит обычная графика.

Что будет с кириллическим значением поля?

Оно перерисовывается вшитым шрифтом с нужным набором глифов. Стандартный шрифт формы в такой ситуации бросил бы ошибку кодирования, и поле осталось бы пустым прямоугольником.

Можно ли вернуть форме интерактивность после сведения?

Нет. Поля и виджеты удалены, а на их месте лежит рисунок. Единственный путь назад — исходный файл до сведения, поэтому его стоит сохранять отдельно.

Почему часть полей осталась заполняемой?

Их внешний вид не удалось разобрать: виджет мог остаться без страницы или без потока рисования. Такие поля инструмент перечисляет по именам, чтобы вы решили, что с ними делать, вместо того чтобы молча испортить документ.

Рядом