Нативный Cairo-рендерер в Linux

HPDFHeadlessCairoDevice рендерит загруженную страницу PDF в RGB PNG с помощью Cairo image surface и FreeType, без display-сервера и просмотрщика PDF

Передайте последовательный заимствованный вид из THPDFHeadlessDocument.GetRenderAccess(PageIndex) и держите документ загруженным и неизменным до возврата рендеринга

Document := THPDFHeadlessDocument.Create;
try
  Document.LoadFromFile('input.pdf');
  Options := THPDFHeadlessRenderOptions.Default;
  Info := HPDFRenderHeadlessPagePNGFile(
    Document.GetRenderAccess(0), 'page.png', Options);
finally
  Document.Free;
end;

Рантайм-зависимости

Нативный Linux использует libcairo.so.2, libfreetype.so.6 и зависимость Fontconfig провайдера стандартных шрифтов; установите подходящие шрифты для подстановки Helvetica, Times и Courier

HOTPDF_CAIRO_LIBRARY и HOTPDF_FREETYPE_LIBRARY могут выбрать явные совместимые пути библиотек до первого рендеринга; успешные модули остаются загруженными, потому что нативные кэши шрифтов могут удерживать callback'и уничтожения

Хост обязан держать загруженным свой исполняемый файл, DLL или код пакета HotPDF, пока нативные кэши могут удерживать callback'и уничтожения шрифтов HotPDF; выгрузка модуля хоста независимо от времени жизни кэша — за пределами этого профиля

Windows использует совместимые libcairo-2.dll и libfreetype-6.dll через тот же мост; рантайм-бинарники и их лицензирование поставляет приложение

Цвета ICCBased дополнительно загружают liblcms2.so.2; JPEG использует libturbojpeg.so.0, а JPEG 2000 — совместимую с OpenJPEG 2.5 libopenjp2.so.7; эти зависимости грузятся только под соответствующие входы

HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY и HOTPDF_OPENJPEG_LIBRARY переопределяют эти пути; умолчания Windows — lcms2.dll, turbojpeg.dll и openjp2.dll

Профиль рендеринга

Поддерживаемое содержимое включает построение и отрисовку путей, правила заливки nonzero и even-odd, клиппинг, вложенные графические состояния, трансформации CTM, стиль линий, цвета DeviceGray/RGB/CMYK, обычную альфу и повторные Form XObjects с их собственными ресурсами, Matrix и BBox

Толщина линий может быть нулевой: волосяные линии PDF, запрошенные через 0 w или ExtGState LW=0, рисуются обводкой в один пиксель в пространстве устройства; отрицательные толщины отвергаются

ExtGState D и оператор d потока содержимого делят ограниченную валидацию штрихов: поддерживаются сплошные пустые паттерны, повтор нечётной длины, элементы нулевой длины, дробные длины и знаковые фазы

Dash-паттерн допускает не более 256 конечных неотрицательных длин до 1e9, с хотя бы одной положительной длиной, если он не пуст, и конечной фазой с модулем не более 1e9; каждый элемент расходует операции, а временное хранилище участвует в допуске рабочих байтов

Массивы операндов принимают комментарии PDF, включая числовые dash-массивы и текстовые массивы TJ; некорректные лексические значения и незакрытые скобки общий сканер сохраняет, а рендерер отвергает — вместо того чтобы молча потерять

Горизонтальный текст использует общий интерпретатор глифов для текстовых матриц, явных ширин PDF, канонических метрик Helvetica/Times/Courier, межбуквенного и межсловного интервала, горизонтального масштаба и поправок TJ

Встроенные поддерживаемые шрифтовые программы используют FreeType с разрешёнными ID глифов; отображения ToUnicode остаются доступны через текстовый API документа, а растровые формы стандартных шрифтов зависят от установленных подстановок

Составной текст поддерживает Identity-H, Identity-V, явные встроенные CMap-потоки кодировок и встроенные горизонтальные и вертикальные отображения UniJIS, UniGB, UniCNS и UniKS UCS2/UTF16; отдельно установленные ресурсы CMap не требуются

Вертикальная отрисовка глифов учитывает векторы позиционирования по умолчанию и явные DW2/W2, подъём текста, горизонтальный масштаб, текстовые и графические матрицы и смещение TJ; отображения UTF-16 принимают коды дополнительных символов

Поддерживаются все восемь режимов отрисовки текста, включая вертикальные fill/stroke/невидимые контуры, накапливаемые в клип на ET; встроенные CMap-потоки кодировок сохраняют свой WMode и неединичные отображения CID

Прозрачные комбинированные операции fill-and-stroke используют композицию с object knockout, чтобы перекрывающая заливка не просачивалась сквозь обводку; процедуры глифов Type3 исполняют собственные ограниченные ресурсы и шрифтовые матрицы

Изображения принимают сэмплы 1/2/4/8/16 бит и массивы Decode, stencil, явные, color-key и soft-маски, маски иного размера и восстановление Matte; отсутствующий Interpolate использует выборку ближайшим соседом, а true — билинейную

Кодовые потоки JPX принимают знаковые или беззнаковые исходные компоненты до 26 бит, включая смешанную точность, сабсэмплинг и явную непрозрачность, и нормализуются в ограниченные сэмплы 8 или 16 бит; BitsPerComponent в словаре изображения и не-stencil элементы Decode для изображений JPX игнорируются, как требует профиль изображений PDF

Индексированные палитры и валидированные трансформации ICCBased-профиля в sRGB поддерживаются для изображений и цветов путей; DeviceCMYK без профиля сохраняет простое преобразование устройства

Трансформации ICCBased принимают подписи профилей Gray, RGB, CMYK, Lab и XYZ и строго проверяют заявленное количество компонентов и диапазоны компонентов

Операнды Lab-профиля используют физические координаты L a b с диапазонами по умолчанию [0 100 -128 127 -128 127]; операнды XYZ — физические координаты X Y Z с беззнаковым диапазоном по умолчанию 1.15 [0 65535/32768] на компонент

Входы XYZ-профиля — нативное расширение совместимости и не подразумевают соответствия архивному PDF; исходные профили Lab и XYZ не выбирают поддерживаемое пространство смешивания прозрачности

Range ICC-потока требует двух конечных упорядоченных значений на компонент и ограничивает цветовые операнды; умолчания Decode сырых изображений и значения поиска Indexed используют эти диапазоны компонентов

CalGray, CalRGB и Lab поддерживают пути, текст, изображения и базы палитр Indexed; параметры строго проверяются, элементы Matrix CalRGB следуют порядку столбцов PDF, а компоненты Lab и умолчания Decode изображений используют заявленные диапазоны

Цвета CIE используют хроматическую адаптацию Брэдфорда и относительный вывод sRGB; метаданные BlackPoint валидируются, а дополнительная компенсация чёрной точки и политики состояний rendering intent остаются отдельными расширениями

Составные цвета Separation и DeviceN удерживают от одного до тридцати двух tint-компонентов для путей, текста, баз Indexed и упакованных изображений; альтернативные цвета device или CIE используют ограниченные tint-функции sampled, exponential, stitching или calculator

Альтернативные источники цвета ICCBased Lab/XYZ и CalGray/CalRGB/Lab сохраняют физические координаты через tint-трансформацию до конвертации в поддерживаемую группу прозрачности

Многомерные sampled tint-функции поддерживают линейную и кубическую интерполяцию, Domain, Encode, Decode, выходной Range и упакованные глубины сэмплов до 32 бит; кубическое вычисление расширяет существующую скалярную конвенцию четырёх узлов тензорными произведениями, с линейным fallback для коротких измерений и ограниченной работой и отменой

Конвенции интерполяции и отдельные свидетельства формул и читалок см. в нативных sampled-функциях цвета

Separation None и пространства DeviceN, содержащие только красители None, не дают ни цвета, ни формы knockout; смешанные None-компоненты всё же доходят до альтернативной tint-трансформации

Separation All применяет свой tint к каждому доступному выходному красителю, используя нейтральный RGB-вывод страницы и сохраняя каждый process-компонент внутри групп CMYK

Группы CMYK получают исходные четырёхкомпонентные альтернативные tint-значения до смешивания; плашки spot Separation, выбор process/красителя в NChannel и симуляция mixing-hint остаются отдельными расширениями

Терминальный callback изображений сохраняет расшифровку документа и предшествующие потоковые фильтры до нативного декодирования JPEG, JPEG 2000, CCITT или JBIG2; JBIG2 поддерживает арифметический и Хаффманов текст, MMR и общие глобальные словари

JPEG 2000 поддерживает субдискретизированные и знаковые компоненты, выведенные объявления цвета и сэмплов, встроенные ICC-профили, явные переопределения цветовых пространств и отдельную или связанную непрозрачность через SMaskInData; значения компонентов нормализуются в восемь или шестнадцать бит, а массив Decode изображения игнорируется

Встроенные или явные ICC-профили Lab/XYZ используют физические диапазоны компонентов; связанная непрозрачность удаляется из нормированных сохранённых сэмплов до применения отображения физических координат, сохраняя каналы смещения Lab

SMask графического состояния поддерживает группы Alpha и Luminosity, цвета подложки, матрицы Form, восстановление сохранённых состояний и transfer-функции sampled, exponential, stitching и ограниченную calculator; собственная soft-маска изображения переопределяет soft-маску графического состояния

Поддерживаются все шестнадцать стандартных режимов смешивания PDF; группы Form и страниц поддерживают изолированную и неизолированную композицию, object knockout и пространства смешивания DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB или одно-, трёх- и четырёхкомпонентные ICCBased

Калиброванные группы удерживают нативные значения компонентов до границы группы и принимают исходные цвета device или Lab через обратные калибровочные трансформации; сам Lab — не валидное пространство смешивания

Калиброванные Luminosity-маски удерживают координаты своей группы и вычисляют CIE XYZ-Y, включая непрозрачность группы и цвета подложки, до применения transfer-функции

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

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

Группы CMYK хранят дополнительные CMY и чёрный компоненты в отдельных ограниченных плоскостях изображения и конвертируют объединённый результат на границах групп; неразделимые режимы смешивания удерживают или заменяют чёрный согласно выбранному режиму

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

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

Существующие normal-appearance аннотаций подгоняются из их трансформированного BBox в Rect; RenderAnnotations=false опускает appearance в обоих режимах использования

Usage по умолчанию hruView, который пропускает аннотации Hidden и NoView и неизвестные типы аннотаций с выставленным Invisible; стандартные типы аннотаций ISO 32000, включая PDF 2.0 RichMedia и Projection, с поддерживаемыми normal-appearance остаются видимыми, когда выставлен только Invisible

Приёмка RichMedia и Projection покрывает существующие статические normal-appearance с валидными медиа-ассетами или связанным 3D-видом по умолчанию; воспроизведение медиа и интерактивная активация 3D — вне этого растрового пути

hruPrint рисует только аннотации с выставленным Print и снятым Hidden; Invisible подавляет неизвестные типы аннотаций в обоих режимах, NoView не подавляет печать, а NoZoom не меняет размер печатаемого appearance

Когда normal-appearance отсутствует, поддерживаемые метаданные аннотации рендерятся через временный appearance; геометрию, Unicode FreeText, статические иконки и оставшиеся границы см. в нативном annotation fallback

Для view-вывода аннотационный NoZoom убирает масштаб рендеринга из размера appearance, сохраняя UserUnit; NoRotate держит подогнанный appearance вертикально при повороте страницы в обоих режимах, и оба сохраняют трансформированную верхнюю левую опору Rect и клип страницы

Текстовые аннотации с существующими normal-appearance ведут себя как NoZoom и NoRotate в view-выводе независимо от их явных флагов; print-вывод сохраняет их поведение NoRotate, игнорируя NoZoom

Usage управляет статической растровой видимостью и геометрией аннотаций; флаги только для взаимодействия не создают hover- или редактирующего поведения, а существующий callback разрешения извлечения остаётся обязательным и не даёт разрешения на печать

Optional content в статическом выводе

Рендеринг потребляет конфигурацию OCProperties/D по умолчанию из каталога, инициализирует состояния групп из BaseState, применяет переопределения ON и OFF и использует совпадающие значения Intent при определении видимости

Словари членства поддерживают AnyOn, AllOn, AnyOff и AllOff; рекурсивные выражения VE поддерживают And, Or и одноперандный Not, причём VE имеет приоритет над более простой политикой

Ссылки на группы null, недоступные и устаревшие не влияют на членство; группы вне intents конфигурации не управляют видимостью, а членство или выражение без применимых групп оставляет содержимое видимым

Вложенное marked content /OC, изображения и Form XObjects и аннотации уважают итоговое состояние; скрытые marked-секции всё ещё обновляют цвета, матрицы, клиппинг и позицию текста, а скрытые целиком XObjects и аннотации могут быть пропущены

Обычные словари свойств marked-content остаются пригодными, включая вложенные inline-значения; массивы содержимого сохраняют состояние marked-content между своими потоками-компонентами, а дочерние потоки держат собственную вложенность marked-content

Автономная финальная растеризация использует конфигурацию по умолчанию в режимах и view, и print без автоматического применения интерактивных рекомендаций использования AS, как указано в разделе 8.11.4.5 ISO 32000-1:2008; явный ViewerState включает рекомендации View, Print, Export, Zoom, Language и User с постоянным ручным выбором и временным состоянием событий

Отсутствующие свойства optional content или nil-заимствованный каталог оставляют структуры optional content без эффекта видимости; некорректные живые членства, циклы выражений и настроенные лимиты работы, памяти или рекурсии приводят к отказу до публикации PNG

Аффинные матрицы appearance и ненулевые начала BBox сохраняют свою обычную подгонку при этих флагах; крайне малый масштаб рендеринга всё же может сделать начальную матрицу страницы Cairo численно необратимой

Рендеренная страница использует пересечение MediaBox/CropBox, унаследованные боксы страниц и поворот на четверть оборота Rotate, а также UserUnit страницы; масштаб 1 даёт один пиксель на эффективный пункт страницы, с округлением размеров поверхности вверх

Оператор sh рисует function-based, осевые и радиальные затенения (ShadingTypes 1–3), с доменами на два входа, матрицами затенения, выбором радиальных окружностей, конечными точками Extend, BBox и существующими клипами путей

Поддерживаемые цветовые функции и массивы скалярных функций конвертируются из исходных цветов device, калиброванных, ICC Lab/XYZ и Separation/DeviceN; текущая непрозрачность заливки, режимы смешивания, soft-маски графического состояния и knockout группы прозрачности применяются к полученному затенению

Текущий путь и цвет сохраняются; Background затенения игнорируется sh, а AntiAlias — подсказка устройству с выборкой цвета в центрах пикселей

Неподдерживаемые записи ExtGState и неподдерживаемые операторы содержимого остаются вне этого профиля

Затенения треугольных сеток

ShadingTypes 4 и 5 рисуют свободные и решётчатые треугольные сетки Гуро с повторным использованием рёбер, произвольной геометрией решётки, выровненными по байтам записями вершин, точностью координат до 32 бит и точностью компонентов до 16 бит

Компоненты вершин интерполируются в центрах пикселей устройства до конвертации цвета; опциональная функция одного входа или массив компонентных функций вычисляет интерполированный параметр, включая калиброванные, ICC и специальные цветовые пространства

Indexed-источники округляют интерполированные индексы до ближайшего элемента палитры; шестнадцатеричные строки поиска декодируются один раз с пробелами, цифрами в разном регистре и добивкой нечётного финального нибла, а literal-строки поиска сохраняют свои декодированные байты

Текущие трансформации, клиппинг, BBox, непрозрачность заливки, режим смешивания, soft-маски, немаркирующие красители и knockout группы применяются к завершённой сетке; удержанные байты потока, временная поверхность страницы и две строки решётки участвуют в допуске рабочей памяти

Разбор вершин, растеризация треугольников и функции делят агрегатные операции и опрос отмены; некорректные или обрезанные записи и неполные строки решётки приводят к отказу до публикации вывода

Целевая приёмка проверяет замкнутые барицентрические уравнения и отдельный вывод MuPDF и Poppler; записи доказательств держат сбои исходных читалок отдельно для добивки вершин, неиспользуемых бит флагов и прозрачности сеток, а для немаркирующих цветов и нормированных Indexed-значений используют явные альтернативные уравнения читалок

Сетки патчей Кунса и тензоров

ShadingTypes 6 и 7 рисуют кубические границы Кунса и тензорные контрольные сети, с повторным использованием предыдущего ребра, выровненными по байтам записями, семантикой флагов по двум младшим битам и той же точностью координат и компонентов, что у треугольных сеток

Угловые компоненты интерполируются билинейно в параметрах патча до опциональных функций и конвертации цвета; границы Кунса поднимаются до эквивалентной бикубической сети Бернштейна, чьи границы второй производной выбирают подразбиения с геометрической ошибкой не более 0,125 выходного пикселя

Полиномиальная инверсия уточняет пиксельные параметры; свёрнутое покрытие выбирает наибольший параметр v, а при равных v — наибольший u, при этом поздние патчи заменяют цвета ранних до того, как завершённое затенение получит прозрачность объекта

Общий композитор сеток применяет клиппинг, BBox, паттерны затенения, немаркирующие красители, непрозрачность, смешивание, soft-маски и knockout группы; две строки подразбиений и массивы параметров и порядка на пиксель участвуют в активном допуске рабочих байтов

Разбор контрольных точек, подразбиение, растеризация и цветовые функции делят лимиты операций и отмену; целевая приёмка использует независимые уравнения Кунса и тензоров и кубические корни для свёрнутых патчей, а сбои исходных читалок записываются отдельно от обычной проверки RGB-страниц уравнений

Унаследованное текстовое состояние

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

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

Независимые appearance аннотаций стартуют с текстовых параметров по умолчанию, не удерживая финальное текстовое состояние содержимого страницы

Текст Type3 в режиме отрисовки 3 не даёт видимой графики глифов; целевое доказательство вложенного текста Type3 удерживает отклонение умолчаний MuPDF отдельно от уравнений унаследованного состояния, при этом Poppler в тех фикстурах следует унаследованным параметрам

Паттерны замощения и затенения

Цветовые пространства паттернов поддерживают цветные и бесцветные паттерны замощения, TilingType 1–3, паттерны затенения, PatternMatrix, BBox ячейки, положительный или отрицательный шаг, выбор паттерна, восстановление сохранённых состояний и отрисовку fill или stroke

Бесцветные паттерны берут компоненты из поддерживаемого базового цветового пространства и могут рисовать трафареты изображений; явная смена цвета, цветные изображения и прямые затенения внутри бесцветного определения — невалидное содержимое PDF и отвергаются, в том числе через вложенные Forms и процедуры Type3

Выбранные паттерны удерживают пространство координат по умолчанию того потока содержимого, который разрешил их определение; поздние операции cm и унаследованный паттерн, использованный внутри Form, не заменяют это начало

Определения стартуют с начального поддерживаемого графического состояния родителя и параметров прозрачности по умолчанию; определения замощения образуют неизолированную группу без knockout, а определения затенения используют object knockout

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

ExtGState паттерна затенения дополняет поддерживаемые параметры затенения, включая непрозрачность и soft-маски; Background рисуется до затенения, BBox отсекает оба вклада, а немаркирующие цвета None не дают ни цвета, ни формы

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

Целевые фикстуры сравнивают замкнутые уравнения координат, цвета и композиции с нативными пикселями и независимым выводом читалок; файлы доказательств удерживают расхождения читалок для унаследованных начал паттернов Form, непрозрачности ExtGState паттернов затенения и немаркирующих цветов None, с отдельными обычными страницами векторных уравнений для этих случаев

CFF-шрифты с ключами CID

Встроенные шрифты CIDFontType0 разрешают реальные CFF CID в автономных и OpenType-контейнерах, включая неединичные отображения, CID 65535, встроенные Encoding CMap, вертикальные начала W2, трансформированные контуры и клиппинг текста

Автономные CFF-лица загружаются по CID, а SFNT-обёрнутые — по компактному индексу глифов; мост использует правильную раскладку лица FreeType для Linux LP64 и Windows LLP64

Несмаппированный код символа или отсутствующий запрошенный CID обращается к notdefchar и notdefrange для исходного кода, затем использует обязательный глиф CID 0, если замены нет; диапазоны имеют постоянные CID-цели, записи символов имеют приоритет, а присутствующие глифы сохраняют свой запрошенный CID

Целевая приёмка использует заявленные полигональные контуры и уравнения начал для 28 валидных источников, с отдельными сравнениями MuPDF и Poppler и обычными страницами RGB-уравнений

Файлы доказательств удерживают расхождения исходных читалок для выбора глифов CID-keyed OpenType и опущенных подстановок notdef; альтернатива опущения измеряется отдельно и не заменяет требуемое нативное уравнение источника

Границы и отмена

Точные встроенные кодировки Type0 покрывают все 200 имён кодировок из комплекта: Identity-H и Identity-V, шестнадцать отображений UCS2 и UTF16 и 182 дополнительные legacy- и Unicode-карты с выровненными вертикальными переопределениями символов

Смешанные операнды от одного до четырёх байт используют границы кодового пространства на каждый байт и восстановление по невалидному коду с самым длинным префиксом; декодирование UTF8 и UTF32 и обратное кодирование сохраняют дополнительные скаляры и значимые ведущие нулевые байты

Потоки Encoding и ToUnicode разрешают usecmap в теле и имена или потоки UseCMap в словаре, с приоритетом словаря и локальными переопределениями символов, диапазонов, Unicode-последовательностей и notdef

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

Наследование CMap использует thread-local лимиты вложенной глубины без изменения раскладки THPDFCMapBounds; циклы, некорректные родители и избыточная глубина приводят к отказу до публикации вывода, а finally-блоки восстанавливают лимиты после отмены или исключений

Целевое доказательство удерживает сбои именованных исходников UTF8 и UTF32 в независимой читалке без этих встроенных таблиц, проверяет отдельные спутники встроенных карт и записывает расхождения исходного текста, когда несколько кодов выбирают один CID

Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh собирает и проверяет на нативном Linux точные интервалы кодировок, исходные PDF со смешанной шириной, вложенный рендеринг, изоляцию потоков и восстановление после отмены

Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py запускает соответствующие нативные исполняемые файлы Windows, записывает хеши источника, бинарников, PNG и диагностик, затем переносит фиксированные снимки в хранилище нативного Linux для отдельных проверок MuPDF и Poppler

Упакованные карты сохраняют свои хеши ресурсов и полные уведомления о распространении; держите лицензию данных CMap рядом с исходными и бинарными дистрибутивами

Шестнадцатеричные эскейпы в значениях имён PDF и операндах имён содержимого декодируются один раз до разрешения шрифтов, цветовых пространств, режимов смешивания и ресурсов; литеральный хеш, появившийся при декодировании, остаётся частью семантического имени

Общий декодер шрифтов применяет эту семантику к значениям словарей шрифтов, именованным кодировкам, именам глифов Differences и CIDToGIDMap, не модифицируя заимствованные объекты и не декодируя строковые значения

Эскейпированные имена рендерера используют линейное декодирование, временный допуск рабочих байтов, агрегатные лимиты операций и опрос отмены; целевая приёмка сравнивает эквивалентные нативные байты PNG и текст плюс независимый вывод MuPDF и Poppler

Растровая работа затенений и цветовые функции делят агрегатные лимиты операций и опрос отмены; временная поверхность и кэш точных координат не более 8 192 сконвертированных цветов участвуют в активном допуске рабочих байтов

Целевая приёмка затенений использует замкнутые уравнения геометрии/функций/цвета и отдельные страницы векторных уравнений, удерживая расхождения исходных читалок для клиппинга BBox, вырожденной геометрии, конвертации цвета, специальных имён красителей и тесселяции knockout

Опции ограничивают пиксели поверхности, активные управляемые буферы, кумулятивные декодированные байты, закодированные байты PNG, работу токенов и операторов, глубину рекурсии и графических состояний

Декодирование шрифтов использует консервативные допуски: 32 МиБ переходной ёмкости, 64-кратный размер декодированного шрифтового потока, 128-кратное количество рекурсивно проверенных слотов массивов и удвоенную оценку удержанного декодера в активном агрегате

Таблицы CID допускают 65 536 удержанных записей; перечисление ограничивает реальные charstring-программы, а notdef-массивы участвуют в учёте deep-copy декодера и удержанных байтов

Разбор CMap и поиск notdef делят thread-local границы вложенных записей и опрос работы; области рендерера делят агрегатные лимиты токенов и операций, а длинные лексические сканы опрашивают не чаще чем каждые 256 байт

Интерпретатор также резервирует ёмкость Unicode-последовательностей на глиф из байт входных операндов и самого длинного отображения ToUnicode до создания записей глифов, так что повторяющиеся длинные отображения не могут обойти допуск рабочей памяти

Малый бюджет рабочей памяти может отвергнуть простой шрифт, даже если его итоговая аллокация поместилась бы; эти проверки покрывают управляемые буферы и поверхности изображений CPU, а Cairo, кэши Fontconfig и FreeType и суммарный RSS процесса — вне учёта

Поверхности прозрачности, soft-масок, подложки, непрозрачности и object-knockout участвуют в активном бюджете поверхностей; transfer-функции делят агрегатный бюджет операций, кодеки ICC и изображений используют консервативный допуск, а нативный декодер JBIG2 кумулятивно ограничивает аллокацию битмапов/контекстов и опрашивает отмену во время декодирования

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

Удержанные потоки функций, вычисление функций и записи графических состояний участвуют в допуске рабочих байтов; рекурсивные tint-функции, многомерная интерполяция и инструкции calculator делят лимиты операций и отмены

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

Рендерер проверяет разрешение извлечения через заимствованную политику документа и удерживает значения исходных объектов и исходные байты

Владение выводом

HPDFRenderHeadlessPagePNG завершает рендеринг и кодирование PNG приватно до записи в поток во владении вызывающего; финальный сбой I/O потока может удержать уже принятые байты

HPDFRenderHeadlessPagePNGFile проверяет идентичность источника, монопольно создаёт staging-файл в целевом каталоге, сбрасывает его на диск, снова проверяет идентичность и отмену и атомарно заменяет назначение

Публикация в Windows использует не более восьми попыток атомарной замены и семь ожиданий в 1, 2, 4, 8, 16, 16 и 16 миллисекунд, повторяя только ошибки access denied, нарушения совместного доступа и блокировок; отмена проверяется перед каждой попыткой и по обе стороны каждого ожидания

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

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

Приёмка

Приёмка рантайма Windows использует соответствующие нативные консольные исполняемые файлы и изолированное переносимое закрытие импорта DLL с закреплением SHA256; отдельный процесс WSL запускает независимые проверки пикселей, уравнений и геометрии MuPDF и Poppler против PNG-файлов, произведённых в Windows

Подстановки стандартных шрифтов в Windows используют явные Cairo GDI-лица для текста Unicode и реальных контуров, включая клиппинг и режимы fill-and-stroke; встроенные шрифты сохраняют своё отображение глифов FreeType

Вызовы OpenJPEG используют Windows stdcall ABI и декорированные экспорты Win32, а callback'и потоков и сообщений сохраняют конвенцию C callback

Tests/Linux/Run-HeadlessCairoAcceptance.sh выполняет свежие нативные ELF-сборки, очищает DISPLAY и WAYLAND_DISPLAY, отвергает напрямую слинкованные настольные библиотеки и запускает независимые оракулы pypdf/MuPDF

Фикстуры прогоняют стандартные шрифты, Unicode TrueType, Type3, все режимы отрисовки текста и смешивания, альфу и knockout, группы прозрачности RGB, глубины сэмплов и Decode, маски изображений и Matte, цвета Indexed и ICC, терминальные кодеки, AES-зашифрованные цепочки фильтров, геометрию страниц, трансформации аннотаций, бюджеты, отмену, сохранность источника и атомарный вывод

Счётчики см. в THPDFHeadlessRenderResult, обработку ошибок — в EHPDFHeadlessRenderError