Автоматическое создание нативного 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 сообщает фактические счётчики нативного графа и сериализации