Автоматическое создание нативного PDF из XFA
Модуль: HPDFXFAHeadless
HPDFXFAWriteHeadlessPDF создаёт свежий нативный PDF прямо из байтов XDP и переданного приложением шрифта TrueType — без входного PDF и подготовленных слотов полей
Адаптер потребляет существующие колбэки раскладки привязки, повторяющихся экземпляров и пагинации XFA и строит нативные графы объектов страниц и AcroForm с настоящими appearance-потоками со встроенными шрифтами
Потребляются текстовые, числовые поля, поля дат и паролей, push-кнопки, выборы combo и list, группы checkbox и radio, статический текст, draw прямоугольника, линии, дуги и встроенные изображения PNG или JPEG; подписи и дополнительные потребители draw требуют дальнейшей интеграции адаптера
Создание выборов и boolean сохраняет отдельные значения отображения и экспорта, поведение редактируемости и множественного выбора, нативные состояния appearance и независимые повторяющиеся группы radio
Boolean-стили и подписи потребляют фактические векторные маркеры, размер, цвета и толщину границ, области Unicode-подписей и третьи состояния checkbox
Нативная графика и изображения потребляет фактические векторные пути, форматы выборок PNG и прозрачность, baseline- или progressive-JPEG, физические пропорции и аффинное размещение
Пароли используют маскированный appearance с сохранением нативного значения поля; общесимвольный Editable и эффективный доступ readOnly XFA определяют нативные флаги полей
Точечные координаты XFA используют начало в левом верхнем углу и один раз конвертируются в нативные прямоугольники виджетов и переносы draw; отдельные повторяющиеся вхождения получают от движка раскладки различные нативные имена полей
Нативные ресурсы /AP, /DR и /DA генерируются с переданным шрифтом и эффективными размером, цветом и выравниванием; переданное начертание используется для каждого поля, поэтому выбор гарнитуры и несколько начертаний — ответственность приложения на этом этапе
Используйте TXFAWidgetRuntime для выполнения событий жизненного цикла или взаимодействия и сохранения результирующего XDP до создания, когда документ требует этих событий; ScriptOptions адаптера управляют обработкой calculate и validate движком уплощения
Подготовка и лимиты
TXFAHeadlessPDFOptions ограничивает байты XDP и шрифтов, байты вывода и объектов, число объектов и страниц, поля и агрегированные единицы глифов UTF-16
Бюджеты объектов, страниц и глифов проверяются до соответствующего выделения; проверки встраивания ограничивают агрегированные потоки шрифтов и изображений, декодеры изображений ограничивают рабочие буферы, а нативная сериализация соблюдает лимиты объектов и полного кандидата в байтах
Отмена проверяется на протяжении создания графа, генерации appearance и сериализации; все сбои подготовки оставляют позицию, длину и существующие байты потока назначения неизменными
Полный кандидат подготавливается в памяти до одного вызова WriteBuffer в назначение; ошибки ввода-вывода назначения пробрасываются и могут оставить частичную запись согласно поведению потока вызывающего
Вывод — новый неподписанный документ; сохранение импортированного шифрования, существующих подписей и исходных ревизий относится к нативным API импорта документов и ревизий
Приёмка
Tests/Linux/XFAHeadlessCreationTests.pas создаёт фактические повторяющиеся, постранично разбитые и общесимвольно read-only документы, документ с сохранённым XDP, изменённым событием, и документ со стилизованным Unicode-draw, не открывая UI читалки
Tests/Linux/Verify-XFAHeadlessCreation.py независимо проверяет нативные значения, флаги полей, принадлежность страниц, ресурсы /AP и встроенные шрифты с помощью pypdf, а реальный текст и отрисованные пиксели appearance — с помощью MuPDF
Tests/Linux/XFAHeadlessChoiceTests.pas и Verify-XFAHeadlessChoice.py добавляют фактические значения и флаги выборов, родителей radio и идентичности повторяющихся областей, зарезервированные состояния экспорта, runtime-сохранение/перезагрузку и rollback, а также отрисованные пиксели выбора
TXFAHeadlessPDFResult сообщает фактические счётчики нативного графа и сериализации