Pdf.js: Поддержка интерактивных форм (AcroForm)

Созданный на 7 сент. 2016  ·  28Комментарии  ·  Источник: mozilla/pdf.js

_Это только проблема отслеживания, поэтому здесь не место для каких-либо других вопросов или обсуждений. Откройте для этого новый выпуск ._

Это мета-проблема для поддержки интерактивных форм (AcroForm) в соответствии с главой 12.7 справочника PDF (http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G11 .2110737). Сюда входят все элементы формы, кроме полей подписи, которые отслеживаются в # 1076. Цель состоит в том, чтобы получить https://github.com/mozilla/pdf.js/blob/master/test/pdfs/f1040.pdf.link для полного рендеринга, а также решить другие открытые проблемы и PR.

Общий

  • [x] Подготовьте ядро ​​и слой отображения для реализации элементов формы (# 7596)
  • [x] Эталонное тестирование (№ 7602)
  • [x] Предпочтение (# 7602)
  • [x] Удаление глобального использования PDFJS.renderInteractiveForms (# 7640)
  • [x] Рефакторинг кода построения имени поля в WidgetAnnotation (# 7775)
  • [x] Выполните рефакторинг или уточните, где отображаются аннотации.

    • В основном на уровне отображения, но аннотации текстовых виджетов с потоками внешнего вида отображаются на основном слое, что вызывает путаницу ...

  • [x] Появления
  • [x] Сохранение введенных значений, когда страница уничтожается, когда она не видна
  • [x] Печать введенных значений

    • Либо распечатайте элементы HTML, либо отобразите содержимое на холсте (используйте appendToOperatorList )

  • [x] Включено по умолчанию
  • [x] Обновите пример (# 8030)
  • [x] Добавьте параметр Firefox для включения / отключения форм (https://bugzilla.mozilla.org/show_bug.cgi?id=1652145)

Текстовые виджеты

  • [x] Отображение однострочных полей (# 7602)
  • [x] Максимальная длина ручки (# 7622)
  • [x] Флаги обработки: многострочные и только для чтения (# 7633)
  • [x] Флаги ручки: гребешок (# 7649)
  • [x] Выравнивание ручки (# 7622)
  • [x] Продезинфицируйте maxLen и textAlignment на основном уровне и модульные тесты для этого (# 7629)

Выбор виджетов

  • [x] Отображение полей со списком (# 7671)
  • [x] Отображение списков (# 7671)

Виджеты кнопок

  • [x] Отображение кнопок (# 9191)
  • [x] Отображение флажков (# 7898)
  • [x] Отображение переключателей (# 7898)
4-annotations 4-form-acroform

Самый полезный комментарий

Это проблема отслеживания (см. Https://github.com/mozilla/pdf.js/issues/7613#issuecomment-251895091), поэтому здесь не место для обсуждения или вопросов. Свяжитесь с нами по IRC, если у вас возникнут вопросы, или напишите отдельную проблему, если вы обнаружили ошибку. Спасибо.

_ (Я разблокирую беседу, чтобы пользователи могли использовать кнопку реакции для измерения интереса к этой функции, но нерелевантные комментарии будут удалены.) _

Все 28 Комментарий

Это мета-проблема для поддержки интерактивной формы отслеживания (AcroForm) в соответствии с главой 8.6 справочника PDF (https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7. pdf # page = 671 & zoom = auto, -246,244).

Было бы неплохо вместо этого основывать работу на последней версии спецификации PDF, на всякий случай, если есть какие-либо различия: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/ pdfs / PDF32000_2008.pdf # G11.2110737.

Кроме того, может быть, неплохо добавить пункт «Общие» TODO об обеспечении надлежащего покрытия тестами?

Оба вопроса были рассмотрены. Спасибо!

Я думаю, что нам также придется фактически анализировать содержимое словаря AcroForm , поскольку в противном случае мы не сможем, например, загрузить все необходимые ресурсы шрифтов.
Очевидно, что мы не можем использовать пользовательские шрифты на уровне отображения, но мы должны иметь возможность по крайней мере вывести правильное семейство шрифтов (и такие вещи, как, например, жирный / курсив), которые следует использовать, и передать эту информацию на слой отображения.

Кроме того, для печатных форм мы могли бы использовать (или развивать) уже существующую функциональность appendToOperatorList , но для этого определенно потребуется, чтобы ресурсы шрифта, присутствующие в словаре AcroForm , были загружены.

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

Наконец, общий вопрос: действительно ли мы сможем поддерживать формы значимым образом без частичной (и хорошо очищенной) поддержки скриптов?

Хорошие моменты. Я просто добавил их в список выше. Я не думаю, что нам действительно нужна поддержка скриптов, поскольку AcroForms обычно просто требует заполнения и печати. Скрипты AFAIK используются только для взаимодействия между элементами, но мы можем реализовать наиболее часто используемые функции самостоятельно (например, сбросить форму или действия кнопок для ее печати). Посмотрим, насколько широко используется такая функциональность скрипта.

Флаги обработки: многострочные и только для чтения

Есть и другие флаги, которые нам, возможно, придется попробовать и поддержать. Один из примеров - comb который управляет интервалом между символами в поле ввода. Он фактически используется на второй странице f1040.pdf , см. Поле «Персональный идентификационный номер (PIN)».

Звучит как хорошая идея. Я добавил его в список.

Вероятно, также было бы неплохо посмотреть, можно ли очистить или улучшить код WidgetAnnotation который строит свойство fullName , см. Https://github.com/mozilla/pdf.js /blob/6c263c19946af23b723f148d9f05118971e18b36/src/core/annotation.js#L640 -L670.

Кроме того, что касается WidgetAnnotation s, похоже, что разные типы могут иметь разные требования к записи V в словаре аннотаций, поэтому может быть лучше получить и проверить data.fieldValue в _each_ конкретный подкласс WidgetAnnotation .

Первый пункт теперь в списке, по которому у меня есть несколько идей. Я узнал о втором пункте в патче, который в настоящее время дорабатываю для аннотаций виджета выбора, так что он будет там рассмотрен.

Привет @timvandermeij
Когда эта функция будет доступна? Как я могу помочь?

В настоящее время мы находимся в процессе реализации этого, но это большая часть функциональности, которая потребует времени, прежде чем она будет завершена. Отмеченные выше поля показывают, какие элементы уже реализованы, а для других полей уже есть запросы на вытягивание, поэтому мы работаем с этой функцией. Не стесняйтесь протестировать его, используя ветку master и задав для параметра renderInteractiveForms значение true . По умолчанию он отключен, так как еще не готов.

Спасибо, Тим, что ты можешь сказать мне о цифровых подписях? Согласно этой ветке обсуждения, есть прогресс https://github.com/mozilla/pdf.js/issues/1076

Об этом сообщил пользователь: soa-x открыл этот выпуск 13 января 2012 г.

С момента появления сообщения прошло почти 5 лет.

Даже кто-то уже проделал большую часть реализации

viveksjain прокомментировал 22 февраля
@complience Привет, у меня есть доказательство концепции, работающее на https://github.com/viveksjain/pdf.js/tree/sig-verify-support. Вы можете попробовать это с помощью git clone --recursive https://github.com/viveksjain/pdf.js.git. Приложив немного больше работы, он должен быть готов к запросу на вытягивание в репозиторий esta, но у меня просто еще не было времени.

Вы знаете, были ли эти вакансии добавлены в последние версии pdf.js?

Re: https://github.com/mozilla/pdf.js/issues/7613#issuecomment -251692825

Подписи в файлах PDF - это большая и сложная тема, которая в некоторой степени ортогональна реализации базовой поддержки AcroForm (это именно то, что отслеживает эта конкретная проблема).

Текущая проблема - это просто проблема отслеживания для реализации основных функций AcroForm, подписи уже отслеживаются в другом месте (в # 1076, где эту функцию следует обсудить).

@lexcorp Пожалуйста, воздержитесь от публикации несвязанной информации и / или вопросов здесь, поскольку это умаляет цель этой проблемы (которая заключается в отслеживании поддержки основных функций AcroForm).
Кроме того, теперь вы разместили в основном ту же информацию в _три_ разных проблемах, пожалуйста, не спамите таким образом средство отслеживания проблем!

Привет @timvandermeij @Snuffleupagus ,
Нам очень нравится ваше решение для добавления поддержки полей AcroForm. Мы планируем использовать эти функции в приложении, которое мы сейчас разрабатываем. Мы были бы очень признательны, если бы вы могли предоставить нам ориентировочную дату, когда вы могли бы добавить поддержку для всех типов полей формы, таких как флажки и т. Д., И экспортировать заполненные данные в файл XFDF или любой другой формат. Спасибо.

@anujgeek Как я уже упоминал в https://github.com/mozilla/pdf.js/issues/7613#issuecomment -251699579, это проблема _tracking_ и не совсем подходящее место для такого рода общего обсуждения и / или задавая вопросы!

Осталось реализовать ряд довольно сложных TODO, см. Возможно неполный список выше, поэтому _не_ невозможно дать какую-либо оценку того, когда или даже будет ли эта функция будет полностью реализована.

Также обратите внимание, что до сих пор вся работа была проделана участниками, и, учитывая, что Mozilla заменяет PDF.js в Firefox (см. Https://wiki.mozilla.org/Mortar_Project), поддержка форм, скорее всего, займет некоторое время.

Это проблема отслеживания (см. Https://github.com/mozilla/pdf.js/issues/7613#issuecomment-251895091), поэтому здесь не место для обсуждения или вопросов. Свяжитесь с нами по IRC, если у вас возникнут вопросы, или напишите отдельную проблему, если вы обнаружили ошибку. Спасибо.

_ (Я разблокирую беседу, чтобы пользователи могли использовать кнопку реакции для измерения интереса к этой функции, но нерелевантные комментарии будут удалены.) _

Привет вместе!

Как обстоят дела с заполнением AcroForm?
Использованный пример https://www.irs.gov/pub/irs-pdf/f1040.pdf (и другие) по-прежнему не работает. Или он по умолчанию не настроен?
Упоминается какой-то базовый JavaScript, такой как установить поле (поля), очистить поле (поля), поддержку кнопки отправки?

Спасибо.

@ Alex-DE-74 Внимательно прочтите приведенные выше комментарии, в частности https://github.com/mozilla/pdf.js/issues/7613#issuecomment -251895091 и https://github.com/mozilla/pdf. js / issues / 7613 # issuecomment -287907674 актуальны.
Более того, вы уже задавали эти вопросы в # 9261 (где были даны ответы); пожалуйста, давайте постараемся избавить эту проблему отслеживания от такого рода общих обсуждений.

@Snuffleupagus

Извините, но для меня не совсем понятно по многим темам, какой элемент находится на какой стадии. А циклические ссылки совершенно бесполезны. С точки зрения https://github.com/mozilla/pdf.js/projects/1 мне ясно, какая часть AcroForms поддерживается сейчас (полностью) и что планируется. Более того, многие темы посвящены повторному использованию / просмотру, но ни слова об интерактивной функции заполнения / проверки / выбора / отправки и т. Д. Так, например, в части «Текстовые виджеты» выше ничего не говорится о «Типе текста». Тогда как, если "Словарь AcroForm" в настоящее время вообще не анализируется, как он может работать действительно хорошо?
Может быть, было бы полезно для «пользователей» увидеть простую таблицу, в которой перечислены функции AcroForm с их свойствами и состоянием полной / конкретной / запланированной поддержки. (почему это выделено жирным шрифтом = ?!)

PS Мне больно, я не эксперт по JS / HTML5, но много чего делал на другом сайте (создавал PDF на C #) и знаком с другими языками программирования. Стоит ли мне пытаться понять текущий код, чтобы обеспечить более интерактивную поддержку и помочь в разработке этого проекта? Или это займет огромное количество времени, просто чтобы понять текущую архитектуру?

Я убрал для вас жирный стиль. Хочу еще раз подчеркнуть, что здесь не место для такой дискуссии; такой канал, как IRC, был бы более подходящим, чтобы мы могли предоставить некоторую справочную информацию. Заполнение / отправка / печать форм фактически находится в списке флажков выше, но это еще не реализовано. Часть «текстовых виджетов» касается визуализации текстовых виджетов, что означает поля ввода, которые вы можете ввести. Готово; оставшаяся часть хранит введенные значения. Любой желающий может помочь с этим.

Кстати: Chrome также не может сохранять PDF-файлы с формами, но есть обходной путь. Формы отображаются по умолчанию, и их можно распечатать, а можно даже распечатать их как PDF по умолчанию, включая ввод формы.

Может быть, это применимо и к pdf.js, и мы можем просто использовать существующее сохранение FF как PDF (https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/saveAsPDF)?

Я играю с pdf.js, пытаясь распечатать введенные значения текстового поля формы. У меня есть элементарное рабочее доказательство концепции, с помощью которого я могу отображать введенные значения в печатном PDF-файле. Теперь я хочу обсудить свой подход и посмотреть, найдет ли кто-нибудь лучший или более простой.

В моем подходе я передаю введенные значения рабочей задаче, добавляя карту к задаче. Эта карта в настоящее время заполнена по событию beforeprint.
В методе getOperatorList объекта TextWidgetAnnotation я читаю поток объектов и заменяю старое текстовое значение оператора Tj новым. Это работает, но возникает много проблем. Во-первых, он не работает, если в потоке нет оператора Tj, потому что поле не имело значения. Во-вторых, размещение других выравниваний, кроме «левого», будет неправильным.
Итак, следующая идея - создать совершенно новый поток, вычисляющий все значения самостоятельно. Это будет большая работа, поэтому я хотел сначала обсудить этот подход.
Я уже могу создать новый поток и отобразить значения, но опять же, есть проблема со значениями смещения операции «Td». Я немного покопался в коде и думаю, мне нужно вычислить смещение X и Y позиции, принимая во внимание ширину и высоту строки с заданным шрифтом. Я нашел FontDescriptor для одного встроенного шрифта, но не для системного шрифта. С дескриптором шрифта у меня есть значение подъема и спуска шрифта, с помощью которого, я думаю, я могу вычислить смещение по оси Y. Смещение по оси x будет фиксировано для текстов с выравниванием по левому краю, но его необходимо рассчитать для текстов с выравниванием по центру или по правому краю. . Я думаю, что могу сделать это с массивом ширины Font xRef, но опять же, для системных шрифтов такого нет. Поэтому я думаю, что мне придется использовать холст и метод measureText.

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

Некоторое время назад мы обсуждали, как мы можем подойти к этому. См. Https://mozilla.logbot.info/pdfjs/20161219. Идея состоит в том, чтобы иметь два разных списка операторов: один для пользовательского интерфейса и один для печати. В том, что предназначено для печати, мы бы заменили операции на основе введенного / выбранного значения в виджете.

Я думаю, что это несколько проще, чем то, что вы описываете, поскольку мы позволяем оставшейся логике делать за нас тяжелую работу; нам просто нужно предоставить правильный список операторов.

Это проблема, которую мы должны решить в несколько небольших шагов. Первый шаг - сделать код аннотации асинхронным, что делает @dmitryskey в # 9822. Следующим шагом будет анализ словаря AcroForm на предмет, например, шрифтов, и анализ записи о внешнем виде по умолчанию в словаре аннотаций на предмет всей информации о внешнем виде. Для этого мы, вероятно, можем использовать оценщик для получения информации в виде списка операторов, который требует, чтобы код аннотации был асинхронным. Затем мы можем создать списки операторов печати для каждого типа аннотации.

Я тоже думал создать список операций самостоятельно, но это было бы для меня сложнее, чем мой подход. Я просто создаю поток объектов pdf с помощью BMC ... EMC и передаю поток оценщику, который генерирует список операций.
Если я сам создам массив списка операций, у меня будут те же проблемы, что и при создании нового потока объектов. Но, имхо, создать список сложнее, чем создать строку и преобразовать ее в поток объектов. Это уже работает в моем доказательстве концепции.

Я хотя Opera / Chrome также использует pdf.js, но Opera может печатать и использовать формулярные данные. Может, есть что-то. мы можем использовать повторно?

Они используют PDFium, который в основном представляет собой код на C ++.

Привет всем, компания, в которой я работаю, начинает использовать PDFJS, и мне сказали, что мне нужно заставить работать «Сохранение введенных значений, когда страница уничтожается, когда она не видна». Я не уверен, что эта ветка - подходящее место для ее обсуждения. @timvandermeij , похоже, вы являетесь основным двигателем этого проекта. Можем ли мы каким-либо образом связаться с вами или с кем-то из сообщества, которое могло бы помочь? У меня есть стратегия для реализации этой функции, но я хочу убедиться, что то, что я делаю, также можно будет включить в это репо. Мы также готовы спонсировать или создать вознаграждение за новые функции, если это поможет быстрее избавиться от проблем.

Если у вас есть идеи, как это сделать, лучше обсудить это в отдельном выпуске. Главный вопрос - что делать с введенными данными. Рендеринг на холсте при печати? Предоставить возможность скачивать значения в формате FDF? Визуализировать новый файл PDF с заполненными значениями? И так далее. Это зависит от того, чего ожидает пользователь, и от того, что делают другие читатели PDF.

Закрытие, поскольку поддержка AcroForm теперь завершена и включена. Остальные проблемы теперь занесены в отдельные проблемы и собраны с помощью тега 4-form-acroform ; см. https://github.com/mozilla/pdf.js/labels/4-form-acroform.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

anggikolo11 picture anggikolo11  ·  3Комментарии

AlexP3 picture AlexP3  ·  3Комментарии

hp011235 picture hp011235  ·  4Комментарии

timvandermeij picture timvandermeij  ·  4Комментарии

smit-modi picture smit-modi  ·  3Комментарии