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