Автоматическая нативная графика и изображения XFA

Модуль: HPDFXFAHeadless

HPDFXFAWriteHeadlessPDF потребляет draw-колбэки прямоугольника, линии, дуги и встроенного изображения прямо из XDP наряду с существующими потребителями текста и виджетов

Каждый draw создаёт нативный Form XObject, размещённый на фактической странице раскладки; draw с изображениями содержат настоящие Image XObjects и альфа-маски, когда нужно

Векторные пути

Прямоугольники используют нативные прямоугольные пути PDF, линии сохраняют наклон с прямой или обратной косой чертой, а эллиптические дуги — кубические сегменты не более 90 градусов

Первая эффективная грань задаёт цвет и толщину RGB-штриха, включая подпунктовые ширины; границы appearance штриха включают половину толщины, чтобы form не обрезал собственную границу

Дуги потребляют startAngle и знаковый sweepAngle с полной окружностью по умолчанию и максимальным абсолютным sweep в 360 градусов

Подсказки поворота, масштаба и переноса draw применяются один раз в конечном аффинном размещении вокруг центра draw с положительным вращением против часовой стрелки; координаты XFA «левый верхний угол» конвертируются один раз в нативное начало координат PDF

PNG и JPEG

ФорматФактическое нативное потребление
PNG grayscaleВыборки 1, 2, 4, 8 и 16 бит, упакованные выборки расширяются до 8 бит, а 16-битная точность сохраняется
PNG RGBЦветовые выборки 8 и 16 бит
PNG indexed colorИндексы 1, 2, 4 и 8 бит расширяются через палитру в выборки RGB
PNG transparencyПрозрачные выборки grayscale и RGB, альфа палитры, а также grayscale-alpha и RGBA 8 или 16 бит; настоящие потоки /SMask сохраняют точность альфы
PNG filtering and interlaceВсе пять строчных фильтров PNG и проходы Adam7, проверенные общей нативной реализацией zlib и предикторов
JPEGBaseline и progressive кадры grayscale, RGB и CMYK 8 бит, проверенные общим нативным декодером JPEG перед сохранением исходного потока /DCTDecode

Контрольные суммы chunk'ов PNG, порядок, размеры, индексы палитры, диапазоны прозрачных выборок и точная длина распаковки проверяются до фиксации кандидата; обрезанные или избыточные сжатые данные проваливают подготовку

Размеры кадра JPEG должны совпадать с реальным нативным декодированием, а инверсия Adobe CMYK явно объявляется в словаре изображения

JPEG требует существующей нативной библиотеки TurboJPEG; HOTPDF_TURBOJPEG_LIBRARY может указать абсолютный путь к библиотеке, а зависимые библиотеки операционная система находит сама

Пропорции изображения поддерживают fit, none, width, height и actual; pHYs у PNG и плотность JFIF у JPEG определяют физический размер пикселя, а при отсутствии пригодной плотности берётся 96 dpi

Масштабированные изображения центрируются и обрезаются по прямоугольнику draw XFA; альфа-композиция остаётся операцией нативного читателя PDF

Границы и транзакция

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

Отмена проверяется при разборе chunk'ов, распаковке данных, декодировании строк и размещении нативных объектов; существующий нативный декодер JPEG получает токен вызывающего

Сбои подготовки сохраняют позицию, длину и байты назначения; финальный WriteBuffer в назначение следует собственной семантике ввода-вывода потока вызывающего

Текущие границы

Заливка фигур, оформление углов, границы по отдельным граням, штриховые паттерны, штрихкоды, внешний транспорт изображений, виджеты imageEdit, альтернативные форматы изображений, встроенные цветовые профили и ориентация Exif по-прежнему требуют дополнительной интеграции потребителей

Анимированный PNG потребляется как его дефолтное статическое изображение; чужой XML exData остаётся отдельной функцией, и этот draw-адаптер не выполняет произвольные встроенные объекты

Приёмка

Tests/Linux/Build-XFAHeadlessGraphicFixtures.py создаёт детерминированные фикстуры строчных фильтров, Adam7, точности выборок, прозрачности, физических пропорций, JPEG и некорректного протокола

Tests/Linux/XFAHeadlessGraphicsTests.pas пишет и переоткрывает фактические нативные PDF и проверяет сохранность данных вызывающего при сбоях; Verify-XFAHeadlessGraphics.py независимо проверяет декодированные выборки изображений, точность /SMask, векторные операторы, размещение и отрисованные пиксели с помощью pypdf и MuPDF

Автоматическое создание нативного PDF из XFA описывает существующих потребителей полей и текста и публичные API опций и результата