Estado de visor de contenido opcional

La rasterización nativa puede aplicar de forma explícita recomendaciones de contenido opcional estilo visor según las secciones 8.11.4.4 y 8.11.4.5 de ISO 32000-1:2008

Las opciones por defecto dejan ViewerState=nil y retienen el comportamiento D de forma final stand-alone en ambos usos de anotación, sin aplicar AS automáticamente

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 inicializa D, aplica las aplicaciones View que coinciden y luego los overrides manuales; las aplicaciones Print o Export reemplazan temporalmente las recomendaciones vigentes para esa operación y no modifican el objeto de estado ni los diccionarios del PDF

Toda recomendación activa entre las aplicaciones y categorías que coinciden debe estar ON para que un grupo reciba ON; la información de uso ausente no aporta recomendación y preserva el estado actual de ese grupo

Las categorías soportadas son View, Print, Export, Zoom, Language y User; CreatorInfo y PageElement permanecen informativas

Zoom usa un mínimo inclusivo y un máximo exclusivo, con al menos un límite requerido y valores por defecto de cero e infinito; Language prefiere tags exactos sin distinguir mayúsculas dentro de los OCG de la aplicación, o de lo contrario grupos con ese idioma primario marcados Preferred ON

User compara el Individual, Title u Organization suministrado explícitamente contra una cadena o un array de nombres usando texto Unicode exacto; las cadenas de texto PDFDocEncoding, UTF-16 y UTF-8 de PDF 2.0 retienen su significado decodificado

Una aplicación con OCG omitidos toma por defecto un conjunto de grupos vacío; un PrintState omitido en un diccionario de uso Print existente no aporta recomendación

AS no limita las categorías al evento del mismo nombre, así que una aplicación Print puede aplicar recomendaciones de Zoom o Language usando el mismo contexto explícito

Las políticas OCMD, las expresiones VE recursivas, el marked content anidado, los Form XObjects, las imágenes y las apariencias de anotación consumen los estados de grupo resultantes a través de la ruta de visibilidad acotada existente

Los cambios manuales persisten a través de cambios de contexto hasta que se limpien o reviertan; recargar, mutar, cerrar o destruir el documento expira el estado de forma permanente, y hace falta un acceso fresco y un objeto nuevo

Mantiene el estado prestado vivo y sin cambios durante cada render; el reuso de solo lectura está permitido mientras siga vigente el contrato de concurrencia de callbacks del adaptador subyacente

El trabajo de render, la búsqueda de grupos, los escaneos de candidatos de idioma, la búsqueda de selecciones manuales, la decodificación acotada de texto hexadecimal y UTF-8 y el almacenamiento temporal de estado participan de los límites de operación, token, bytes decodificados, bytes de trabajo y cancelación

SetGroupState es una operación de contenedor de estado dirigida por el llamador con una capacidad de 100000 selecciones; los límites de render acotan el consumo de forma independiente, y las aplicaciones deberían imponer límites adecuados a las solicitudes externas de selección

El evento del visor es independiente del Usage de anotaciones; ninguna de las dos opciones otorga permiso de impresión, ejecuta acciones SetOCGState, activa rich media ni crea una interfaz de usuario

La aceptación usa estados declarados independientes y máscaras RGB exactas de rectángulos, pruebas de lifetime y mutación, render concurrente reentrante y con callbacks serializados, y observaciones separadas de MuPDF y Poppler

Las observaciones del lector con contexto por defecto no sustituyen las ecuaciones nativas explícitas de Zoom, Language, User o estado manual; los companions de geometría plana validan de forma independiente las coordenadas de raster

Operaciones JSON versionadas de 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}
    ]
  }
}

Omitir optionalContent retiene el comportamiento D estático; un objeto activa el estado automático con un evento View por defecto, zoom 1 y cadenas vacías de idioma y contexto de usuario

El evento acepta view, print o export y sigue siendo independiente del usage de anotación; no se infiere ningún idioma del sistema operativo, identidad de usuario ni zoom de pantalla

Las cadenas de contexto admiten como máximo 4096 unidades de código UTF-16 cada una; el zoom debe ser finito, positivo y a lo sumo 1000000000

Las selections exigen un número de objeto positivo, un número de generación entre cero y 65535 y un valor enabled Boolean explícito; la operación admite a lo sumo 1024 selections dentro de su límite de memoria de trabajo, y las referencias repetidas usan el último estado suministrado

Cada operación crea y libera su propio estado nativo prestado, así que vuelve a enviar las selecciones manuales deseadas con una solicitud posterior; los diccionarios del PDF y los renders posteriores sin este objeto retienen su configuración previa

Las opciones JSON malformadas devuelven estado invalid-argument, las fallas de presupuesto admitidas devuelven estado budget-exceeded, y los metadatos malformados del documento o las referencias de grupo vencidas retienen el estado existente de parse-error del render antes de la publicación del PNG

Las capabilities reportan optionalContent.automaticState, los tres eventos, los miembros explícitos del contexto, el soporte de selección manual y el lifetime acotado a la operación

Genera fuentes reales de Language/User planas y AES R5/R6 con Tests/Linux/Build-LinuxABIOptionalAutomaticFixtures.py OUTPUT y luego ejecuta Tests/Linux/Run-LinuxABIOptionalAutomaticAcceptance.sh LIBRARY FIXTURES NEW_OUTPUT contra cada build nativa de ABI

La aceptación por callback verifica fórmulas de píxeles independientes, tipos JSON estrictos, cifrado, presupuestos, cancelación, fallas sticky de salida y resultado, recuperación del mismo handle y ausencia de estado de visor retenido; requiere pypdf, cryptography, NumPy y Pillow, y suprime el lanzamiento del visor de escritorio

Ver THPDFHeadlessOptionalContentState, THPDFOptionalContentContext y IHPDFHeadlessRenderLifetime