Compatibilità di salvataggio per versione PDF

La versione 3.23.0 tratta la versione PDF di salvataggio selezionata come un contratto rigoroso per i salvataggi completi; quando un'applicazione chiama SetInformation(0, "1.2"), "1.3", "1.4", "1.5", "1.6" o "1.7", SaveToFile, SaveToString e SaveToStream scrivono un output conforme al target scelto oppure falliscono prima di scrivere l'output

I salvataggi completi rimuovono gli override Catalog /Version, così un documento caricato non può innalzare silenziosamente la versione effettiva oltre l'header selezionato. I target di versione inferiore rimuovono anche le voci Catalog /Extensions non supportate, e i target PDF 1.3 omettono Catalog /Metadata e gli stream XMP Metadata preservando il dizionario delle informazioni del documento

La pre-verifica di salvataggio rifiuta le funzionalità note delle versioni successive invece di produrre un file con versioni miste; i confini controllati includono page box PDF 1.3, stream di file incorporati, azioni JavaScript, spazi colore ICCBased e DeviceN e ToUnicode CMaps; trasparenza PDF 1.4, strutture Tagged PDF, output intent e chiavi di annotazione; object stream PDF 1.5, contenuto opzionale, XFA, page tabs, flag append-only dei campi firma e flag avanzati dei campi modulo; PDF 1.6 UserUnit, programmi font OpenType, dizionari 3D, spazi colore NChannel e dati viewport; oltre a PDF 1.7 RichMedia, Projection, Redaction, annotazioni avanzate e sottofiltri di firma ETSI; lo stesso set di regole copre anche l'opacità annotation /CA, JBIG2Decode, gli stream Metadata, l'albero dei nomi EmbeddedFiles a livello di documento, JPXDecode, xref streams, Crypt filters, AESV2 crypt filters e PDF 1.7 Requirements

I requisiti di livello di estensione Adobe per PDF 1.7 vengono controllati separatamente dall'header PDF 1.7. AESV3, AES-256, RichMedia, Projection, dizionari geospaziali e sottofiltri di firma ETSI devono avere una dichiarazione Catalog /Extensions /ADBE /ExtensionLevel sufficiente prima che il target di salvataggio selezionato sia accettato. I punti di ingresso writer che emettono tali funzionalità di livello di estensione aggiungono automaticamente la dichiarazione di estensione corrispondente quando il target selezionato può essere elevato a PDF 1.7

Da v3.67.0, il rilevamento lato loader delle funzionalità del contenuto è lazy. Un documento caricato non viene analizzato subito; il rilevamento parte la prima volta che la versione effettiva o i diagnostici di caricamento vengono usati tramite GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream o percorsi append-save correlati. I workflow di sola lettura che non interrogano mai tali diagnostici e non salvano mai possono saltare completamente la scansione

Da v3.67.1, la scansione di rilevamento analizza superficialmente gli oggetti stream. Ispeziona i dizionari degli oggetti e la classificazione dello stream saltando i grandi corpi di stream, quindi il rilevamento di filtri, sottotipi, spazi colore e chiavi vincolate alla versione resta equivalente mentre i grandi stream immagine non dominano più la scansione. Le letture oggetto normali e ogni percorso di salvataggio leggono ancora il corpo completo dello stream quando l'output lo richiede

Da v3.67.2, le scelte esplicite della versione di salvataggio mantengono la priorità sul rilevamento lazy. Su un documento caricato, SetInformation(0, ...) e LockSaveVersion eseguono lo snapshot di rilevamento in sospeso prima di applicare la versione richiesta, quindi un salvataggio o una query diagnostica successiva non può innalzare il target selezionato alle spalle del chiamante. I documenti appena creati non vengono armati per il rilevamento lato loader, in linea con il precedente comportamento di controllo versione solo lato writer

I chiamanti TPDFlib ricevono LastErrorCode 602 quando la versione target selezionata è inferiore a una funzionalità ancora presente nel documento. Scegliere una versione target più recente o rimuovere la funzionalità incompatibile prima di salvare