État viewer de contenu optionnel
La rastérisation native peut appliquer explicitement les recommandations de contenu optionnel côté lecteur des sections 8.11.4.4 et 8.11.4.5 de l'ISO 32000-1:2008
Les options par défaut laissent ViewerState=nil et conservent le comportement D de forme finale autonome dans les deux usages d'annotation, sans appliquer AS automatiquement
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 initialise D, applique les applications View correspondantes, puis les surcharges manuelles ; les applications Print ou Export remplacent temporairement les recommandations courantes pour cette opération et ne modifient ni l'objet d'état ni les dictionnaires PDF
Chaque recommandation active à travers les applications et catégories correspondantes doit être ON pour qu'un groupe reçoive ON ; une information d'usage absente ne fournit aucune recommandation et préserve l'état courant du groupe
Les catégories prises en charge sont View, Print, Export, Zoom, Language et User ; CreatorInfo et PageElement restent informatives
Zoom utilise un min inclusif et un max exclusif, au moins une borne étant requise, avec des défauts de zéro et d'infini ; Language préfère les tags exacts insensibles à la casse parmi les OCG de l'application, sinon les groupes de langue principale marqués Preferred ON
User compare le Individual, Title ou Organization explicitement fourni à une chaîne ou un tableau de noms en texte Unicode exact ; les chaînes de texte PDFDocEncoding, UTF-16 et UTF-8 PDF 2.0 conservent leur sens décodé
Une application avec OCG omis prend par défaut un ensemble de groupes vide ; un PrintState absent d'un dictionnaire d'usage Print existant ne fournit aucune recommandation
AS ne limite pas les catégories à l'événement du même nom, donc une application Print peut appliquer des recommandations Zoom ou Language avec le même contexte explicite
Les politiques OCMD, les expressions VE récursives, le contenu marqué imbriqué, les Form XObjects, les images et les apparences d'annotations consomment les états de groupes résultants via le chemin de visibilité borné existant
Les changements manuels persistent à travers les changements de contexte jusqu'à effacement ou rétablissement ; rechargement, mutation, fermeture ou destruction du document fait expirer l'état définitivement, exigeant un accès frais et un nouvel objet
Gardez l'état emprunté vivant et inchangé pendant chaque rendu ; la réutilisation en lecture seule est permise tant que le contrat de concurrence de callbacks de l'adaptateur sous-jacent reste en vigueur
Le travail de rendu, la recherche de groupes, les scans de candidats de langue, la recherche de sélections manuelles, le décodage borné de texte hexadécimal et UTF-8 et le stockage temporaire d'état participent aux limites d'opération, de jetons, d'octets décodés, d'octets de travail et d'annulation
SetGroupState est une opération de conteneur d'état pilotée par l'appelant avec une capacité de 100000 sélections ; les limites de rendu bornent la consommation indépendamment, et les applications devraient imposer des limites appropriées aux requêtes de sélection externes
L'événement viewer est indépendant de l'usage d'annotation ; aucune option n'accorde la permission d'impression, n'exécute d'actions SetOCGState, n'active de média riche ni ne crée d'interface utilisateur
L'acceptation utilise des états déclarés indépendants et des masques rectangulaires RGB exacts, des tests de durée de vie et de mutation, du rendu concurrent à callbacks réentrants et sérialisés, et des observations MuPDF et Poppler séparées
Les observations de contexte par défaut des lecteurs ne remplacent pas les équations natives explicites de Zoom, Language, User ou d'état manuel ; des compagnons de géométrie simples valident indépendamment les coordonnées raster
Opérations JSON Linux versionnées
{
"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}
]
}
}
Omettre optionalContent conserve le comportement D statique ; un objet active l'état automatique avec un événement View par défaut, zoom 1 et chaînes de contexte de langue et d'utilisateur vides
L'événement accepte view, print ou export et reste indépendant de l'usage d'annotation ; aucune langue d'OS, identité d'utilisateur ni zoom d'affichage n'est déduit
Les chaînes de contexte admettent au plus 4096 unités de code UTF-16 chacune ; le zoom doit être fini, positif et d'au plus 1000000000
Les sélections exigent un numéro d'objet positif, un numéro de génération de zéro à 65535 et une valeur booléenne enabled explicite ; l'opération admet au plus 1024 sélections dans sa limite de mémoire de travail, et les références répétées utilisent le dernier état fourni
Chaque opération crée et libère son propre état natif emprunté, renvoyez donc les sélections manuelles souhaitées avec une requête ultérieure ; les dictionnaires PDF et les rendus ultérieurs sans cet objet conservent leur configuration antérieure
Les options JSON mal formées retournent le statut d'argument invalide, les échecs de budget admis le statut de budget dépassé, et des métadonnées de document mal formées ou des références de groupes périmées conservent le statut d'erreur d'analyse de rendu existant avant la publication PNG
Les capacités rapportent optionalContent.automaticState, les trois événements, les membres de contexte explicites, la prise en charge de sélections manuelles et la durée de vie limitée à l'opération
Générez de véritables sources Language/User plain et AES R5/R6 avec Tests/Linux/Build-LinuxABIOptionalAutomaticFixtures.py OUTPUT, puis lancez Tests/Linux/Run-LinuxABIOptionalAutomaticAcceptance.sh LIBRARY FIXTURES NEW_OUTPUT contre chaque build ABI natif
L'acceptation par callbacks vérifie des formules de pixels indépendantes, des types JSON stricts, le chiffrement, les budgets, l'annulation, les échecs persistants de sortie/résultat, la récupération à handle identique et l'absence d'état viewer retenu ; elle exige pypdf, cryptography, NumPy et Pillow et supprime le lancement du lecteur de bureau
Voir THPDFHeadlessOptionalContentState, THPDFOptionalContentContext et IHPDFHeadlessRenderLifetime