Optional-Content-Viewer-State
Natives Rasterisieren kann viewer-seitige Optional-Content-Empfehlungen aus ISO 32000-1:2008 Abschnitten 8.11.4.4 und 8.11.4.5 explizit anwenden
Default-Optionen lassen ViewerState=nil und behalten stand-alone Final-Form-D-Verhalten in beiden Annotation-Usages, ohne AS automatisch anzuwenden
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 initialisiert D, wendet passende View-Applications an, dann manuelle Overrides; Print- oder Export-Applications ersetzen die aktuellen Empfehlungen temporär für diese Operation und ändern weder das State-Objekt noch PDF-Dictionaries
Jede aktive Empfehlung über passende Applications und Kategorien muss ON sein, damit eine Gruppe ON erhält; fehlende Usage-Informationen liefern keine Empfehlung und bewahren den aktuellen Zustand der Gruppe
Unterstützte Kategorien sind View, Print, Export, Zoom, Language und User; CreatorInfo und PageElement bleiben informativ
Zoom nutzt inklusives Min und exklusives Max, mit mindestens einer Grenze und Defaults von null und unendlich; Language bevorzugt exakte, groß-/kleinschreibungsunabhängige Tags innerhalb der OCGs der Application, sonst Gruppen der Primärsprache, die auf Preferred ON markiert sind
User vergleicht den explizit gelieferten Individual-, Title- oder Organization-Wert gegen einen String oder ein Array von Namen mit exaktem Unicode-Text; PDFDocEncoding-, UTF-16- und PDF-2.0-UTF-8-Textstrings behalten ihre dekodierte Bedeutung
Eine Application mit weggelassenen OCGs defaultet auf eine leere Gruppenmenge; ein in einem bestehenden Print-Usage-Dictionary fehlendes PrintState liefert keine Empfehlung
AS begrenzt Kategorien nicht auf das identisch benannte Event, sodass eine Print-Application Zoom- oder Language-Empfehlungen mit demselben expliziten Kontext anwenden darf
OCMD-Policies, rekursive VE-Ausdrücke, verschachtelte Marked Contents, Form XObjects, Bilder und Annotation-Appearances konsumieren die resultierenden Gruppenzustände über den bestehenden begrenzten Sichtbarkeitspfad
Manuelle Änderungen bleiben über Kontextwechsel hinweg bestehen, bis sie gelöscht oder zurückgesetzt werden; Dokument-Reload, Mutation, Close oder Zerstörung lässt den State dauerhaft ablaufen und erfordert frischen Zugriff und ein neues Objekt
Den geliehenen State während jedes Render-Vorgangs am Leben und unverändert halten; Read-only-Wiederverwendung ist erlaubt, solange der Callback-Concurrency-Kontrakt des zugrunde liegenden Adapters gilt
Render-Arbeit, Gruppen-Lookup, Language-Kandidaten-Scans, Manual-Selection-Lookup, begrenztes Hexadezimal- und UTF-8-Text-Decoding sowie temporäre State-Speicherung beteiligen sich an Operations-, Token-, Decoded-Byte-, Working-Byte- und Abbruch-Limits
SetGroupState ist eine aufrufergetriebene State-Container-Operation mit einer Kapazität von 100000 Selections; Render-Limits begrenzen den Verbrauch unabhängig, und Applications sollten externe Selection-Requests angemessen begrenzen
Viewer-Event ist unabhängig von der Annotation-Usage; keine der Optionen gewährt Print-Rechte, führt SetOCGState-Actions aus, aktiviert Rich Media oder erzeugt eine Benutzerschnittstelle
Die Abnahme nutzt unabhängige deklarierte States und exakte RGB-Rechteck-Masken, Lebensdauer- und Mutationstests, wiedereintretendes und serialisiertes Callback-Concurrent-Rendering sowie separate MuPDF- und Poppler-Beobachtungen
Reader-Default-Kontext-Beobachtungen ersetzen keine expliziten nativen Zoom-, Language-, User- oder Manual-State-Gleichungen; plain Geometrie-Begleiter validieren Rasterkoordinaten unabhängig
Versionierte Linux-JSON-Operationen
{
"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}
]
}
}
Das Weglassen von optionalContent behält statisches D-Verhalten; ein Objekt aktiviert den automatischen State mit Default-View-Event, Zoom 1 und leeren Language- und User-Kontextstrings
Das Event akzeptiert view, print oder export und bleibt unabhängig von der Annotation-usage; keine Betriebssystemsprache, User-Identität oder Display-Zoom wird erschlossen
Kontextstrings fassen je höchstens 4096 UTF-16-Code-Einheiten; Zoom muss endlich, positiv und höchstens 1000000000 sein
Selections verlangen eine positive Objektnummer, eine Generierungsnummer von null bis 65535 und einen expliziten Boolean enabled-Wert; die Operation nimmt höchstens 1024 Selections innerhalb ihres Working-Memory-Limits an, und wiederholte Referenzen nutzen den zuletzt gelieferten Zustand
Jede Operation erzeugt und gibt ihren eigenen geliehenen nativen State frei, also die gewünschten manuellen Selections bei einer späteren Anfrage erneut senden; die PDF-Dictionaries und nachfolgende Renders ohne dieses Objekt behalten ihre frühere Konfiguration
Fehlerhafte JSON-Optionen liefern Invalid-Argument-Status, Admitted-Budget-Fehler Budget-Exceeded-Status, und fehlerhafte Dokument-Metadaten oder veraltete Gruppenreferenzen behalten den bestehenden Render-Parse-Error-Status vor der PNG-Veröffentlichung
Capabilities melden optionalContent.automaticState, die drei Events, explizite Kontextmember, Manual-Selection-Unterstützung und operation-scoped Lebensdauer
Echte Plain- und AES-R5/R6-Language/User-Quellen mit Tests/Linux/Build-LinuxABIOptionalAutomaticFixtures.py OUTPUT erzeugen, dann Tests/Linux/Run-LinuxABIOptionalAutomaticAcceptance.sh LIBRARY FIXTURES NEW_OUTPUT gegen jeden nativen ABI-Build ausführen
Der Callback-Abnahmetest prüft unabhängige Pixel-Formeln, strikte JSON-Typen, Verschlüsselung, Budgets, Abbruch, sticky Output-/Result-Fehler, Same-Handle-Recovery und die Abwesenheit behaltener Viewer-States; er benötigt pypdf, cryptography, NumPy und Pillow und unterdrückt den Desktop-Viewer-Start
Siehe THPDFHeadlessOptionalContentState, THPDFOptionalContentContext und IHPDFHeadlessRenderLifetime