Compatibilité d'enregistrement selon la version PDF
La version 3.23.0 traite la version PDF de sauvegarde sélectionnée comme un contrat strict pour les sauvegardes complètes. Quand une application appelle SetInformation(0, "1.2"), "1.3", "1.4", "1.5", "1.6" ou "1.7", SaveToFile, SaveToString et SaveToStream produisent une sortie conforme à la cible choisie ou échouent avant d'écrire la sortie
Les sauvegardes complètes suppriment les remplacements Catalog /Version afin qu'un document chargé ne puisse pas élever silencieusement la version effective au-dessus de l'en-tête sélectionné. Les cibles de version inférieure suppriment aussi les entrées Catalog /Extensions non prises en charge, et les cibles PDF 1.3 omettent Catalog /Metadata et les flux XMP Metadata tout en conservant le dictionnaire d'informations du document
Le précontrôle de sauvegarde rejette les fonctions connues de versions ultérieures au lieu de produire un fichier à versions mélangées. Les limites contrôlées incluent les boîtes de page PDF 1.3, les flux de fichiers intégrés, les actions JavaScript, les espaces colorimétriques ICCBased et DeviceN, et les ToUnicode CMaps; la transparence PDF 1.4, les structures Tagged PDF, les Output Intents et les clés d'annotation; les flux d'objets PDF 1.5, le contenu optionnel, XFA, les onglets de page, les indicateurs append-only de champs de signature et les indicateurs avancés de champs de formulaire; PDF 1.6 UserUnit, les programmes de police OpenType, les dictionnaires 3D, les espaces NChannel et les données de viewport; ainsi que PDF 1.7 RichMedia, Projection, Redaction, les annotations avancées et les sous-filtres de signature ETSI; Le même jeu de règles couvre aussi l'opacité annotation /CA, JBIG2Decode, les flux Metadata, l'arbre de noms EmbeddedFiles au niveau du document, JPXDecode, xref streams, Crypt filters, AESV2 crypt filters et PDF 1.7 Requirements
Les exigences de niveau d'extension Adobe pour PDF 1.7 sont vérifiées séparément de l'en-tête PDF 1.7. AESV3, AES-256, RichMedia, Projection, les dictionnaires géospatiaux et les sous-filtres de signature ETSI doivent disposer d'une déclaration Catalog /Extensions /ADBE /ExtensionLevel suffisante avant que la cible de sauvegarde sélectionnée soit acceptée. Les points d'entrée writer qui émettent ces fonctionnalités de niveau d'extension ajoutent automatiquement la déclaration d'extension correspondante lorsque la cible sélectionnée peut être relevée à PDF 1.7
Depuis v3.67.0, la détection des fonctionnalités du contenu côté chargeur est paresseuse. Un document chargé n'est pas analysé immédiatement; la détection s'exécute la première fois que la version effective ou les diagnostics de chargement sont consommés via GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream ou les chemins append-save associés. Les workflows en lecture seule qui ne demandent jamais ces diagnostics et ne sauvegardent jamais peuvent ignorer complètement l'analyse
Depuis v3.67.1, l'analyse de détection parcourt les objets stream de manière superficielle. Elle inspecte les dictionnaires d'objets et la classification des streams tout en sautant les grands corps de stream, de sorte que la détection des filtres, sous-types, espaces colorimétriques et clés de version reste équivalente sans que les grands flux d'image dominent l'analyse. Les lectures d'objet normales et tous les chemins de sauvegarde lisent toujours le corps complet du stream quand la sortie l'exige
Depuis v3.67.2, les choix explicites de version de sauvegarde gardent la priorité sur la détection paresseuse. Sur un document chargé, SetInformation(0, ...) et LockSaveVersion exécutent le snapshot de détection en attente avant d'appliquer la version demandée, si bien qu'une sauvegarde ou une requête de diagnostic ultérieure ne peut pas relever la cible choisie derrière l'appelant. Les documents nouvellement créés ne sont pas armés pour la détection côté chargeur, ce qui correspond au comportement antérieur de contrôle de version côté écriture uniquement
Les appelants TPDFlib reçoivent LastErrorCode 602 lorsque la version cible sélectionnée est inférieure à une fonctionnalité encore présente dans le document. Choisissez une cible plus récente ou supprimez la fonctionnalité incompatible avant d'enregistrer