Загляните внутрь PDF-формы, а не только на её поверхность
Заполняемый PDF кажется простым и почти никогда таким не является. За каждой рамкой стоит поле AcroForm с именем, вложенным на три уровня, целое число /Ff, биты которого означают разное в зависимости от типа поля, экспортное значение, которое почти никогда не совпадает с надписью рядом, и поток внешнего вида, который одни просмотрщики перестраивают, а другие нет. Инспектор полей PDF-формы открывает всё это.
Что он показывает
- Полное имя —
/T, собранное по цепочке/Parent, так чтоaddress.cityпоказывается какaddress.city, а не как одинокоеcity, к которому не обратиться. - Настоящий тип — текст, многострочный, гребёнка, пароль, флажок, группа переключателей, кнопка, раскрывающийся список, список или подпись, выведенный из
/FTи битов флагов. - Каждый бит
/Ff, расшифрованный для нужного типа. Бит 26 — это RichText у текстового поля и RadiosInUnison у кнопки; расшифровка без учёта/FTдаёт бессмыслицу. - Экспортные значения. Ключ словаря
/AP /Nкаждого виджета — это то, что отправляет флажок или переключатель. Часто это1,Onили код товара, а вовсе неYes. /MaxLen,/Opt, шрифт и кегль из/DA, выравнивание/Q, подсказка/TU, значение/DVи любые дополнительные действия/AA.- Координаты — исходный
/Rectв пользовательском пространстве снизу вверх и та же рамка в координатах страницы сверху вниз, плюс позиция обхода внутри/Annots.
Какие проблемы он находит
Повторяющиеся полные имена (две рамки, одно значение). Виджеты без потока внешнего вида, которые пусты в строгих просмотрщиках и ломают сведение. Виджеты за пределами CropBox — есть, заполнены, не видны. Осиротевшие виджеты, не принадлежащие ни одному полю. Установленный /NeedAppearances, который на практике означает, что значения видны лишь в просмотрщике, который их перестраивает.
Чего он не может
Он читает сохранённую структуру. Он не выполняет JavaScript формы, поэтому вычисляемое поле показывает последнее сохранённое значение, а не то, что вернул бы сценарий. Он также не проверяет форму на соответствие какому-либо стандарту.
Приватность
PDF разбирается в вашем браузере средствами pdf-lib и pdf.js. Ничего никуда не отправляется, а экспорт в JSON и CSV формируется локально.
Tiny Online Tools







