Состояние optional-content для просмотрщика
Нативная растеризация может явно применять рекомендации optional-content в стиле просмотрщика из разделов 8.11.4.4 и 8.11.4.5 стандарта ISO 32000-1:2008
Опции по умолчанию оставляют ViewerState=nil и сохраняют поведение изолированного D конечной формы в обоих вариантах использования аннотаций, не применяя AS автоматически
Access := Document.GetRenderAccess(0);
Context := THPDFOptionalContentContext.Default;
Context.Zoom := 2;
Context.Language := 'en-US';
Viewer := THPDFHeadlessOptionalContentState.Create(Access, Context);
try
Viewer.SetGroupState(10, 0, True);
Options := THPDFHeadlessRenderOptions.Default;
Options.ViewerState := Viewer;
Viewer.Event := hocePrint;
Options.Usage := hruPrint;
HPDFRenderHeadlessPagePNGFile(Access, OutputFile, Options);
finally
Viewer.Free;
end;
View инициализирует D, применяет совпавшие View-приложения, затем ручные переопределения; приложения Print или Export временно заменяют текущие рекомендации для этой операции и не меняют ни объект состояния, ни PDF-словари
Чтобы группа получила ON, каждая активная рекомендация по всем совпавшим приложениям и категориям обязана быть ON; отсутствующая информация об использовании не даёт рекомендации и сохраняет текущее состояние группы
Поддерживаемые категории — View, Print, Export, Zoom, Language и User; CreatorInfo и PageElement остаются информационными
Zoom использует включающую нижнюю и исключающую верхнюю границу, обязательна хотя бы одна из них, по умолчанию ноль и бесконечность; Language предпочитает точные нечувствительные к регистру теги среди OCG приложения, иначе совпадающие группы основного языка с пометкой Preferred ON
User сравнивает явно переданные Individual, Title или Organization со строкой или массивом имён по точному Unicode-тексту; текстовые строки PDFDocEncoding, UTF-16 и UTF-8 из PDF 2.0 сохраняют своё декодированное значение
Приложение без указанных OCG даёт пустое множество групп; PrintState, опущенный в существующем словаре использования Print, не даёт рекомендации
AS не ограничивает категории одноимённым событием, поэтому Print-приложение может применить рекомендации Zoom или Language из того же явного контекста
Политики OCMD, рекурсивные выражения VE, вложенное размеченное содержимое, Form XObject-ы, изображения и appearances аннотаций потребляют итоговые состояния групп через существующий ограниченный путь видимости
Ручные изменения сохраняются между сменами контекста до очистки или отката; перезагрузка, изменение, закрытие или уничтожение документа безвозвратно делает состояние недействительным, требуя свежий доступ и новый объект
Держите заимствованное состояние живым и неизменным в течение каждой отрисовки; повторное использование только для чтения допустимо, пока действует контракт конкурентности колбэков нижележащего адаптера
Работа отрисовки, поиск групп, сканирование языковых кандидатов, поиск ручных выделений, ограниченное декодирование шестнадцатеричного и UTF-8 текста и временное хранение состояния участвуют в лимитах операции, токена, декодированных и рабочих байтов и отмены
SetGroupState — управляемая вызывающим операция контейнера состояния с ёмкостью 100000 выделений; лимиты отрисовки независимо ограничивают потребление, а приложениям стоит накладывать подходящие лимиты на внешние запросы выделений
Событие просмотрщика независимо от Usage аннотаций; ни одна из опций не даёт права на печать, не исполняет действия SetOCGState, не активирует rich media и не создаёт пользовательский интерфейс
Приёмка использует независимые заявленные состояния и точные RGB-маски прямоугольников, проверки времени жизни и мутаций, конкурентную отрисовку с реентерабельными и сериализованными колбэками, а также отдельные наблюдения MuPDF и Poppler
Наблюдения над контекстом по умолчанию в Reader не заменяют явные нативные уравнения Zoom, Language, User или ручного состояния; независимые компаньоны геометрии отдельно проверяют растровые координаты
Версионированные JSON-операции Linux
{
"schemaVersion": 1,
"type": "render",
"dpi": 72,
"usage": "view",
"optionalContent": {
"event": "print",
"zoom": 2,
"language": "en-US",
"individual": "Alice",
"title": "Engineer",
"organization": "Example",
"selections": [
{"objectNumber": 10, "generationNumber": 0, "enabled": true}
]
}
}
Пропуск optionalContent сохраняет статическое поведение D; объект активирует автоматическое состояние с событием View по умолчанию, zoom 1 и пустыми строками контекста языка и пользователя
Событие принимает view, print или export и остаётся независимым от usage аннотаций; язык операционной системы, идентичность пользователя и масштаб экрана не выводятся сами
Строки контекста допускают не более 4096 кодовых единиц UTF-16 каждая; zoom обязан быть конечным, положительным и не больше 1000000000
Выделения требуют положительный номер объекта, номер поколения от нуля до 65535 и явное булево значение enabled; операция допускает не более 1024 выделений в пределах лимита рабочей памяти, а повторные ссылки используют последнее переданное состояние
Каждая операция создаёт и освобождает собственное заимствованное нативное состояние, поэтому передайте нужные ручные выделения заново в следующем запросе; PDF-словари и последующие отрисовки без этого объекта сохраняют прежнюю конфигурацию
Некорректные JSON-опции возвращают статус invalid-argument, сбои допущенного бюджета — статус budget-exceeded, а повреждённые метаданные документа или устаревшие ссылки на группы сохраняют существующий статус ошибки разбора отрисовки до публикации PNG
Возможности сообщают optionalContent.automaticState, три события, явные члены контекста, поддержку ручных выделений и время жизни в рамках операции
Сгенерируйте настоящие исходники plain и AES R5/R6 для Language и User с помощью Tests/Linux/Build-LinuxABIOptionalAutomaticFixtures.py OUTPUT, затем запустите Tests/Linux/Run-LinuxABIOptionalAutomaticAcceptance.sh LIBRARY FIXTURES NEW_OUTPUT против каждой сборки нативной ABI
Проверка приёмки через колбэк контролирует независимые пиксельные формулы, строгие типы JSON, шифрование, бюджеты, отмену, залипающие сбои вывода и результата, восстановление после того же дескриптора и отсутствие сохранённого состояния просмотрщика; ей нужны pypdf, cryptography, NumPy и Pillow, и она подавляет запуск настольного просмотрщика
См. THPDFHeadlessOptionalContentState, THPDFOptionalContentContext и IHPDFHeadlessRenderLifetime