Автоматическая нативная графика и изображения 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 и предикторов |
| JPEG | Baseline и 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 опций и результата