Состояние 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