Registro modifiche
Cronologia delle versioni
« Torna all’indice della documentazione
Cronologia delle versioni della libreria PDFlibPas. Le voci sono elencate dalla più recente alla più vecchia; ciascuna versione segue il versioning semantico in base alla politica di rilascio del progetto.
Ultima versione pubblicata
- Versione più recente: v3.75.6; Data di rilascio: 2026-06-23
Version 3.333.0
Added
- Ispezione delle revisioni incrementali. Una firma copre i byte della revisione in cui è stata scritta, e tutto ciò che viene aggiunto dopo è un aggiornamento separato il cui contenuto decide se la firma vale ancora per il documento così com'è ora.
GetDocumentRevisionCount,GetDocumentRevisionStarteGetDocumentRevisionEnddispongono tali revisioni, eGetSignatureRevisionIndexindica a quale termina una firma GetDocumentRevisionKindriferisce cosa ha fatto un aggiornamento, come il più incisivo degli oggetti che ha toccato: contabilità, materiale di validazione, un timestamp di documento, una firma, un campo modulo, un'annotazione o contenuto del documento. Aggiungere materiale di validazione per la validazione a lungo termine quindi non somiglia più alla modifica del documentoGetDocumentRevisionChangeselenca ogni oggetto che un aggiornamento ha aggiunto, modificato o eliminato, insieme a cos'è ciascuno e, per un dizionario modificato, quali chiavi differiscono davveroGetDocumentRevisionsCompleteriferisce se l'intera cronologia era recuperabile. Una catena interrotta, ciclica o più lunga di quanto il lettore seguia lascia invisibili gli aggiornamenti più vecchi, e i conteggi sono allora un limite inferiore anziché una risposta- Un oggetto la cui versione precedente non si può leggere, o il cui corpo dello stream non è mai stato confrontato, viene segnalato come indeterminato anziché come innocuo: un aggiornamento che riscrive una pagina lasciando intatto il suo dizionario non viene scambiato per un ripacchettamento
Version 3.332.0
Added
ApplyPAdESLongTermValidationpromuove un PDF già firmato a PAdES-B-LT in una sola chiamata. Costruisce il percorso dei certificati del firmatario dalla firma stessa, raccoglie materiale OCSP e CRL per ogni anello attraverso gli indirizzi indicati dai certificati e scrive i certificati e i dati di revoca nel document security store con una voce VRI per la firma, in un unico aggiornamento incrementale.ApplyPAdESLongTermValidationToStreamscrive il risultato in uno stream invece che in un file- Il comportamento è configurabile tramite una maschera di opzioni
PADES_LTV_*: se scrivere la voce VRI, se interrogare i risponditori OCSP, se ricorrere alle CRL, se seguire gli indirizzi degli emittenti per completare il percorso e se saltare la revoca per una radice autoemessa - Un nome di campo vuoto elabora ogni firma in un'unica revisione; un campo denominato elabora solo quello
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCounteGetPAdESLTVErrorriferiscono cosa ha raccolto l'ultima chiamata e perché si è interrotta prima, così un risultato parziale su un risponditore non raggiungibile risulta visibile anziché silenzioso- Il materiale identico a qualcosa già predisposto viene scritto una sola volta e referenziato da ogni firma che ne ha bisogno, e una firma priva di certificato leggibile viene segnalata anziché spacciata come promozione riuscita
Version 3.331.0
Added
- Una firma reca con sé il proprio percorso di certificazione, quindi il materiale di cui ha bisogno un profilo di validazione a lungo termine può essere letto dal solo file firmato.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCounteGetSignatureEmbeddedCertificateDERrestituiscono i certificati incorporati in una firma, mentreGetSignatureCertificateChainLengtheGetSignatureCertificateChainDERli dispongono in un percorso dal firmatario verso l'esterno GetSignatureContentsHashHexrestituisce la chiave con cui è indirizzata una voceAddPAdESDSSVRI, calcolata a partire dalla firma stessa- Il certificato del firmatario viene riconosciuto sia che la firma lo identifichi per emittente e numero di serie, sia per identificatore di chiave del soggetto, e un percorso si ferma all'ultimo emittente che la firma porta effettivamente invece di fingersi completo
Fixed
- Il lettore DER rifiuta una lunghezza di elemento dichiarata maggiore dei dati invece di lasciare che un valore quasi massimo faccia debordare il suo controllo dei limiti, e il percorso delle estensioni del certificato non legge più oltre la fine di un certificato troncato o troppo lungo. Entrambi sono raggiungibili da un documento artefatto, quindi gli accessori sopra rimangono sicuri su input non attendibile
- Gli accessori di firma leggono il documento con un handle condiviso, quindi rispondono mentre un verificatore o un visualizzatore ha già il file aperto, invece di fallire come se la firma fosse assente
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReporteSaveValidationReportproducono un report di validazione PDF/A e PDF/UA-1 strutturato in XML o JSON. Ogni riscontro riporta l'identificatore della regola, lo standard che la possiede, un breve nome di regola, la clausola ISO che applica, una severità e il numero di oggetti interessati, e il report si chiude con statistiche di superamento/fallimento per standard e a livello di documento- Uno standard che non è stato richiesto viene segnalato come
not-checkedanziché come un superamento silenzioso, così un'esecuzione parziale non può essere scambiata per un certificato di salute pulito - Le pipeline di build possono ora filtrare su un identificatore di regola o una clausola ISO invece di confrontare sottostringhe nel testo: la famiglia di report preflight produce prima un report leggibile dall'uomo e converte quel testo in JSON, HTML o CSV, mentre il report di validazione è assemblato dall'output di controllo grezzo e mantiene intatti i campi leggibili dalla macchina
Version 3.322.0
Added
- La reference documenta ora i quattro tipi pubblici dichiarati esternamente usati sulla superficie
TPDFlibche precedentemente non avevano una pagina dedicata:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoeTPDFlibWatermarkBase, completando la copertura dei tipi pubblici di evento, logger, risultato di enumerazione e filigrana
Version 3.321.0
Added
CheckDocumentPolicyvaluta regole interne dichiarative comeFonts.NotEmbedded = 0,Security.Encrypted = nooDocument.Pages <= 500rispetto al documento e segnala ogni regola come superata o fallita con il valore effettivo, trasformando un cancello di acquisizione per editori, archivi e tipografie in configurazione anziché in codice di ispezione scritto a mano
Version 3.320.1
Fixed
- Disegnare testo in una modalità PDF/A senza aver prima caricato un font non va più in errore: PDF/A richiede che ogni programma di font sia incorporato, quindi la scorciatoia implicita a un font integrato era rifiutata e nessun font risultava selezionato, e
DrawTexte le altre chiamate di testo crashavano invece di disegnare - Il percorso font implicito ora risolve un font reale incorporabile mentre una modalità PDF/A è attiva, così il testo disegnato senza una chiamata
AddTrueTypeFontesplicita viene incorporato e rimane conforme; una chiamata diretta adAddStandardFontresta rifiutata in PDF/A - Sugli host in cui non è possibile risolvere alcun font incorporabile, il disegno ricade sulle metriche integrate invece di andare in errore e segnala la carenza di conformità tramite
LastErrorCode605, così il file può essere intercettato prima di essere pubblicato come conforme
Version 3.320.0
Added
GetDocumentFeatureReportrestituisce un report di caratteristiche strutturato in una sola chiamata — metadati del documento, conteggi di pagine e oggetti, stato di cifratura, inventari di font e immagini, tagging e segnalibri, campi modulo, firme, allegati e la ripartizione in byte per categoria — sostituendo la dozzina di query separate che una pipeline di catalogazione o acquisizione doveva in precedenza assemblare
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSorteSetCollectionItemValuecostruiscono portafogli PDF sopra gli allegati esistenti, così un insieme di file incorporati è presentato come un pacchetto navigabile con proprie colonne, ordinamento e valori per file anziché come una semplice lista di allegatiGetCollectionVieweGetCollectionFieldCountsegnalano la modalità di presentazione e il numero di colonne dichiarate di un portafoglio caricato
Version 3.318.1
Fixed
- L'opzione di estrazione del testo 12 (ignora testo ruotato) ora scarta le sequenze ruotate in qualsiasi direzione girino: un quarto di giro in senso orario e un quarto di giro in senso antiorario venivano trattati diversamente, così le note a margine laterali venivano scartate in una direzione e restituite nell'altra
- La stessa opzione mantiene il testo inclinato che è solo tagliato, come un italico sintetico, e la tolleranza ora scala con la dimensione del testo e la trasformazione di pagina, così le grandi intestazioni inclinate non sono più scartate come se fossero ruotate
Version 3.318.0
Added
DecodeAllStreamsespande sul posto gli stream compressi di un documento, così salvarlo produce una copia i cui stream di contenuto, metadati e struttura possono essere letti direttamente da strumenti di diff, revisione forense e flussi di lavoro di supporto; immagini, stream di predizione e stream di riferimenti incrociati mantengono la loro codifica, e gli stream di oggetto sono prima materializzati così nulla va perso
Version 3.317.0
Added
SetTrappedeGetTrappeddichiarano e leggono lo stato di trapping del documento che PDF/X richiede, scritto come il nome/Trappedche la specifica richiede anziché come una stringa di testoSetOutputIntentSubtypeeGetOutputIntentSubtyperietichettano l'output intent, così un profilo colore caricato può descrivere una condizione di stampaGTS_PDFXanziché la condizione di archiviazioneGTS_PDFA1che le modalità PDF/A creano
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyeGetEncryptEmbeddedFilesOnlylimitano la cifratura AES ai file incorporati: il documento si apre e si renderizza in qualsiasi lettore senza richiesta di password mentre i suoi allegati restano cifrati, la disposizione standard per fatture, cartelle cliniche e fascicoli le cui pagine di copertina sono pubbliche ma il cui contenuto non lo è
Version 3.315.0
Added
- L'opzione di estrazione del testo 18 ruota le sequenze disegnate a 90, 180 o 270 gradi nel frame di lettura orizzontale e raggruppa separatamente ogni quarto di giro, così le note a margine ruotate, le intestazioni di tabella e le etichette degli assi dei grafici si estraggono come righe leggibili invece di sovrapporsi al testo verticale o essere scartate
Fixed
DASetTextExtractionOptionsaccetta l'opzione 16 (rimozione sillabazione) e l'opzione 17 (separazione parole per gap di caratteri) invece di rifiutarle, e il percorso di estrazione ad accesso diretto ora inoltra le opzioni 15, 16 e 17 all'estrattore, così la rimozione delle regole di sottolineatura, la rimozione della sillabazione e la separazione per gap di caratteri si applicano agli handle di file come a un documento caricato
Version 3.314.0
Added
GetFontHasToUnicodesegnala se il font selezionato porta una mappatura Unicode, e l'inventario dei font guadagna un campoHasToUnicodecorrispondente per font più un riepilogoNoToUnicodeCount, così i documenti possono essere controllati per font sicuri per l'estrazione e convertibili in PDF/A-*u o PDF/UA prima dell'elaborazione
Version 3.313.0
Added
SetPDFAModeguadagna la modalità 8 per PDF/A-2u (ISO 19005-2 Level U), il livello di conformità che dichiara mappature di testo Unicode senza consentire file incorporati, completando la famiglia PDF/A-2 accanto alle modalità 2b e 2a esistenti
Version 3.312.0
Added
GetObjectByPatheGetObjectByPathCountleggono qualsiasi nodo dell'albero degli oggetti tramite espressioni di percorso comeRoot/Pages/Kids[0]/MediaBox[2]opages[0]/Type— tipi, valori scalari, forme serializzate e conteggi di elementi in una chiamata, sostituendo la percorsione degli oggetti scritta a mano per probe di metadati, controlli puntuali di conformità e diagnostica di supporto
Version 3.311.0
Added
SetBlackPointCompensationdichiara la compensazione del punto nero (ON, OFF o Default) per il disegno successivo tramite lo stato grafico/UseBlackPtCompdel PDF 2.0, consentendo agli output di prestampa e prove di fissare conversioni ICC dei toni scuri che in precedenza erano private del visualizzatore; la versione del documento è elevata automaticamente e le modalità PDF/A rifiutano lo stato
Version 3.310.0
Added
SetCompressionLeveleGetCompressionLevelespongono il livello deflate per ogni compressione che la libreria esegue: 0 mantiene il motore accelerato SIMD predefinito, 1 favorisce la velocità effettiva e 9 comprime al minimo gli archiviRecompressStreamsre-deflate ogni stream FlateDecode semplice del documento selezionato al livello corrente e mantiene la codifica più piccola per stream, riducendo documenti che erano originariamente scritti con un'impostazione di compressione veloce senza toccarne il contenuto
Version 3.309.0
Added
SetObjectStreamModeeGetObjectStreamModeaggiungono un controllo degli stream di oggetto a tre stati: disabilitato, genera (predefinito) o preserva, dove preserva mantiene il raggruppamento compresso originale del file caricato's e scrive i container verbatim, rendendo le conversioni dei file PDF 1.5+ esistenti meno costose perché nulla viene spacchettato o raggruppato di nuovo
Changed
- In modalità preserva, i membri modificati dal caricamento in poi sono promossi a oggetti di livello principale così che le loro modifiche siano salvate, e ogni membro compresso rimanente seleziona automaticamente la forma di stream di riferimenti incrociati binario
Version 3.308.0
Added
CheckDocumentStructureesegue un controllo di integrità strutturale in una chiamata: ogni oggetto e stream è forzato attraverso il proprio decodificatore, gli stream Flate semplici sono verificati rigorosamente rispetto al marcatore di fine zlib così che i dati troncati siano intercettati, e il report segnala trailer mancanti, cataloghi e pagine non risolvibili, gestori di cifratura non supportati e file riparati tramite scansione di byte con riscontri per oggetto e una riga di riepilogo
Version 3.307.0
Fixed
- I documenti danneggiati che usano stream di riferimenti incrociati ora si riparano con successo: la ricostruzione grezza recupera i membri degli stream di oggetti compressi e, quando non esiste alcuna parola chiave trailer in nessun punto del file, sintetizza il trailer dal catalogo di documento raggiungibile più recente, così un offset startxref rotto non rende più tali file non apribili
Version 3.306.0
Added
ExportDocumentDatascrive le chiavi di informazione del documento, l'intero albero dei segnalibri e gli intervalli di etichette di pagina come testo semplice modificabile nel classico formato riga dump_dataImportDocumentDataapplica lo stesso formato all'inverso — le chiavi di informazione sono aggiornate, l'albero dei segnalibri è ricostruito con livelli di annidamento e pagine di destinazione, e gli intervalli di etichette di pagina sono sostituiti — consentendo modifica massiva dei segnalibri e migrazione dei metadati tra documenti in una chiamata per ciascuna direzione
Version 3.305.0
Added
AuditDocumentSpacescompone l'utilizzo in byte del documento's per categoria — immagini, programmi di font e dizionari, stream di contenuto, Form XObject, stream di oggetti, file incorporati, metadati, albero di struttura, annotazioni, albero delle pagine e altro — con conteggi di oggetti, totali in byte e percentuali, rispondendo al perché un file è grande come lo è e quale ottimizzazione paga meglio
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTexteGetStructTreeItemIntPropertyleggono l'albero di struttura di un documento taggato come lista di elementi appiattita in visita in profondità — tipi di elemento (grezzi e mappati per ruolo), testo alternativo e reale, lingua, titoli, identificativi di contenuto marcato, numeri di pagina e relazioni genitore/figlio
Changed
- Il lettore dell'albero di struttura si protegge dai documenti danneggiati: i cicli di riferimento, i numeri di oggetto fuori intervallo e gli alberi annidati oltre 64 livelli sono troncati invece di ciclare
Version 3.303.1
Fixed
- I timbri di sottostato translucidi creati da
StampTexteStampImagenon trasudano più la propria opacità nel contenuto della pagina originale — lo stato di trasparenza è ora confinato al timbro stesso, così la pagina mantiene la propria opacità completa
Version 3.303.0
Added
OverlayDocumentPagestimbra le pagine di un altro documento aperto sulle pagine del documento selezionato, una pagina sorgente per pagina di destinazione, sopra o sotto il contenuto esistente — carta intestata, sfondi continui di pagina e modelli di modulo scansionati in una chiamata- L'esaurimento della sorgente è configurabile: fermarsi, scorrere ciclicamente le pagine sorgente o continuare a ripetere l'ultima pagina sorgente; un'ulteriore opzione impedisce che il timbro sia ingrandito oltre la propria dimensione naturale
Changed
- I timbri di documento sono adattati al CropBox della pagina di destinazione's e posizionati in verticale sulle pagine che recano una voce
/Rotate, e ogni pagina sorgente è importata una volta come Form XObject condiviso così che i modelli ripetuti non duplicano mai le proprie risorse
Version 3.302.0
Fixed
- Le password AES-256 sono ora elaborate con SASLprep (RFC 4013) prima dell'hashing, così le password contenenti spazi non ASCII, trattini molli, caratteri di compatibilità o sequenze di combinazione si aprono correttamente in Acrobat e negli altri lettori conformi
- L'apertura dei documenti AES-256 prova prima la password preparata standard e ricade sulla forma legacy in byte, così i file scritti da versioni precedenti con password non ASCII continuano ad aprirsi
Added
- Il codice di errore 604 segnala una password AES-256 rifiutata da SASLprep perché contiene punti di codice proibiti o viola le regole bidirezionali
Version 3.301.0
Added
SplitDocumentToFilesspezza il documento selezionato in un lotto di file di output con un numero fisso di pagine ciascuno, usando un segnaposto%pper il nome del file
Changed
- La suddivisione in lotti analizza il documento sorgente una volta e copia ogni blocco dalla stessa struttura in memoria, sostituendo la ripetuta ri-analisi completa che un ciclo su
ExtractFilePagesesegue per ogni intervallo
Version 3.300.0
Added
CollateDocumentsfonde le pagine di diversi documenti aperti nel documento selezionato in rotazione, prendendo un numero configurabile di pagine da ciascuna sorgente per turno (A1, B1, A2, B2, …)CollateDocumentsExaccetta una lista di intervalli di pagine per sorgente in cui gli intervalli decrescenti come3-1invertono una sorgente, così i passaggi scanner fronte e retro invertito si fondono in ordine di lettura in una chiamata
Changed
- Le fusioni collazionate importano ciascuna sorgente tramite una singola mappa di oggetti e intervallano per riordino delle pagine, così font e immagini condivisi all'interno di una sorgente sono scritti una sola volta indipendentemente dalla dimensione del gruppo
Version 3.299.0
Added
SetDeterministicDocumentIDeGetDeterministicDocumentIDcambiano l'identificatore di file del trailer a un valore riproducibile così che input identici producano byte di output identici per cache di build, archiviazione indirizzabile per contenuto e confronto di regressione a livello di byteSetDocumentIDSeedfornisce un seed esplicito per l'identificatore di file riproducibile; senza un seed l'identificatore è derivato dai metadati del documento, dall'intestazione di versione e dal conteggio delle pagine
Changed
- Gli identificatori di file riproducibili sono aggiornati solo sui salvataggi completi; gli aggiornamenti incrementali e i documenti cifrati mantengono il proprio identificatore esistente così che firme e file protetti da password continuino ad aprirsi correttamente
Version 3.298.0
Added
AddLinkToArticleThreadeSetOutlineArticleThreadcollegano hotspot di pagina e contorni a un thread di articolo o bead con azioni Thread standardAddActionNextArticleThreadePDF_ACTION_BUILDER_THREADaggiungono azioni Thread ai flussi di lavoro di azioni concatenate, form, pagina e documento
Changed
- I target delle azioni Thread usano riferimenti indiretti stabili a thread e bead e rifiutano indici non validi senza modificare il contenitore di destinazione
- I costruttori di azioni dei campi modulo rifiutano azioni aggiuntive mentre la modalità PDF/A è attiva, preservando il divieto PDF/A sui dizionari
/AAdi campo e widget
Version 3.297.0
Added
- Il riferimento alla DLL piatta
DLdocumenta ora ogni punto di ingresso ANSI con suffissoA(char), aggiungendo 353 pagine di riferimento che rispecchiano le controparti Unicode con firmePAnsiCharDelphi econst char *C accurate BufferUtilities,DirectAccessFunctionalityeMiscellaneousFunctionssono stati ricostruiti come pagine di indice pulite per gruppi di funzioni, guidate dallo schema di categorie condiviso, correggendo markup errato, sezioni etichettate in modo errato e chip mancanti- L’indice di navigazione e l’indice di ricerca condiviso coprono ora l’intera superficie DLL sia per i chiamanti Unicode che ANSI
Fixed
- Rimosso la voce obsoleta
SetLogger, che non aveva alcun simbolo corrispondente nel codice sorgente; la proprietà documentata èLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoeRemoveAlternateImageforniscono creazione e ispezione tipizzata delle varianti di immagine di visualizzazione e stampa- Le immagini alternative possono essere associate a un gruppo di contenuto opzionale o a un dizionario di appartenenza, mentre una variante per immagine di base può essere selezionata come impostazione predefinita di stampa
Changed
- Il renderer integrato seleziona ora le immagini alternative di contenuto opzionale quando un’immagine di base è nascosta e rispetta l’impostazione predefinita di stampa sulle destinazioni di stampa
FindImagesregistra ora gli XObject di immagine alternativa raggiungibili dalle risorse di pagina in modo che le varianti importate ricevano handle di immagine utilizzabili
Version 3.295.0
Added
AddArticleThreadcrea una navigazione degli articoli conforme agli standard con metadati tipizzati, rettangoli di pagina ordinati, collegamenti circolari di perle e array di perle per paginaArticleThreadCount,GetArticleThreadInfoeGetArticleThreadBeadispezionano i thread di articolo creati o importati con attraversamento limitato dei cicli di collegamento danneggiati
Changed
DeletePagesrimuove ora i thread di articolo che perdono ogni perla e ripara i collegamenti circolari dei thread sopravvissuti- Il tracciamento delle pagine eliminate mantiene ora riferimenti di pagina indiretti stabili in modo che la pulizia di outline e articoli non possa deviare quando il cursore dell’albero delle pagine si sposta
Version 3.294.0
Added
SearchTextBatchcerca più query di testo mentre ogni estrazione di pagina è residente e restituisce l’indice di query di origine in base zero con ogni occorrenzaSearchTextBatchEachfornisce la stessa ricerca a passaggio singolo tramite un callback di streaming con report di avanzamento e annullamento
Changed
- La ricerca di testo a query singola e batch condividono ora un unico nucleo di corrispondenza, preservando la semantica di maiuscole/minuscole, parola intera e intervallo di pagine evitando al contempo l’estrazione ripetuta di pagine, il folding del testo e il lavoro di geometria delle occorrenze
Version 3.293.1
Fixed
- La rasterizzazione dello shading mesh non fallisce più nella compilazione su qualsiasi versione di Delphi, risolvendo
E2089 Invalid typecastsulle conversioni da reale a virgola mobile nel painter GDI+ - Il rendering parallelo delle pagine batch si compila ora su Delphi XE5 e XE6, dove
System.Threadingnon è disponibile; le toolchain più vecchie ricadono sul percorso di rendering seriale come sui sistemi non Windows - Il rilevamento delle capacità della stampante non genera più un errore di tipi incompatibili sulle versioni legacy di Delphi allineando la chiamata
SetPrintercon il resto del codice di stampa - L’enumerazione dell’archivio certificati si compila ora su RAD Studio 10.3 Rio, che precedentemente si interrompeva con un errore interno del compilatore durante l’ottimizzazione della routine di enumerazione
Version 3.293.0
Added
- I dizionari di appartenenza del contenuto opzionale possono ora essere creati, aggiornati ed enumerati con le politiche di compatibilità
AnyOn,AllOn,AnyOffeAllOff - Le espressioni di visibilità
/VEannidate di PDF 1.6 supportanoAnd,OreNottramite una rappresentazione prefissa compatta condivisa da Delphi e C++Builder
Changed
- Gli scope di contenuto opzionale, i flussi di contenuto, le pagine acquisite, le immagini, i campi modulo e le annotazioni accettano ora sia un handle di gruppo sia un handle di appartenenza
- Il rendering valuta prima le espressioni
/VEvalide e ricade su/OCGspiù/Pper le espressioni malformate o non supportate
Fixed
- Il contenuto opzionale annidato non può più rendere visibile il contenuto quando un gruppo o un’appartenenza contenitore è nascosto
- I dizionari di appartenenza senza gruppi di contenuto opzionale effettivi lasciano ora la visibilità invariata come richiesto dalla specifica PDF
Version 3.292.0
Added
EnumAttachmentsriporta ora le date di creazione e modifica, i checksum esadecimali, le relazioni di file associati e i numeri di oggetto della specifica di file sia per gli allegati di documento che di annotazioneValidateAttachmentChecksumverifica on demand un payload di allegato rispetto al suo checksum memorizzato, mentre i file appena incorporati ricevono ora automaticamente metadati di checksum
Fixed
SetEmbeddedFileAFRelationshipaccetta ora gli stessi indici di file incorporato in base 1 del resto dell’API degli allegati, inclusi i documenti con allegato singolo
Version 3.291.0
Added
DeduplicateResourcesconsolida ora flussi di immagine, Form, pattern, shading, funzione, profilo ICC, programma di font, CMap, CharProc Type 3, file incorporato, metadati e PostScript duplicati esatti su un documento caricato- La deduplicazione delle risorse fornisce flag di tipo indipendenti, analisi a secco, raccolta orfana opzionale e statistiche dettagliate di hashing, confronto, payload, riferimento e per categoria
Changed
- Il rilevamento dei duplicati canonizza i dizionari di flusso completi indipendentemente dall’ordine delle chiavi, esegue l’hash di ogni payload candidato una volta con SHA-256 e conferma i bucket corrispondenti byte per byte prima di reindirizzare i riferimenti
- I gruppi di equivalenza esatta mantengono il numero e la generazione di oggetto più bassi per output deterministico, mentre i cicli di oggetto diretto malformati e le differenze semantiche di dizionario rimangono non uniti
Version 3.290.0
Changed
PurgeUnusedResourcescalcola ora una chiusura di dipendenza transitiva su pattern di tiling, glifi Type 3, stati di apparenza di annotazione, gruppi di maschera morbida ExtGState, immagini, shading e spazi colore annidati- Le opzioni di pulizia predefinite abilitano ora l’analisi delle dipendenze di pattern, Type 3, apparenza, maschera morbida e immagine, con flag indipendenti per i chiamanti che necessitano di una scansione più ristretta
- I programmi di contenuto annidati e le voci di dipendenza sono memorizzati nella cache, gli scope di risorse condivise sono privatizzati prima della potatura e i cicli malformati sono limitati da guardie di flusso attivo e profondità
Fixed
- Le risorse di pagina utilizzate solo tramite spazi colore di immagine, basi Indexed, alternative Separation o DeviceN, spazi sottostanti di Pattern, alternative ICCBased o dizionari di shading non sono più rimosse come inutilizzate
- Le risorse utilizzate solo da CharProc Type 3, celle di pattern di tiling, apparenze di annotazione o gruppi di maschera morbida di trasparenza non sono più rimosse dal proprio scope o da quello ereditato
Version 3.289.0
Added
PurgeUnusedResourcesrimuove ora le risorse di pagina denominate che non sono referenziate dai livelli di contenuto selezionati e può restituire statistiche dettagliate per categoria- La pulizia delle risorse supporta ora intervalli di pagina, report a secco, avanzamento e annullamento, analisi ricorsiva dei Form XObject, rimozione dei ProcSet deprecati e raccolta opzionale di oggetti orfani
Changed
- L’analisi delle risorse segue ora la sensibilità maiuscole/minuscole dei nomi PDF, le risorse Form ereditate, gli spazi colore di immagine in linea personalizzati e tutte e sette le categorie di risorse standard
- I programmi Form ripetuti sono memorizzati nella cache, gli insiemi di risorse utilizzate usano lookup ordinato e le voci di dizionario sono rimosse in ordine decrescente per prestazioni prevedibili sui documenti di grandi dimensioni
Fixed
- La rimozione delle voci di dizionario invalida ora gli indici di chiave dei dizionari di grandi dimensioni in modo che le ricerche successive non possano restituire voci non aggiornate
- I flussi malformati e gli operatori sconosciuti preservano per impostazione predefinita il loro scope di risorse completo, mentre i dizionari di risorse condivisi o ereditati sono clonati prima della mutazione
Version 3.288.0
Added
- Le firme digitali possono ora emettere strutture complete di certificazione DocMDP e di blocco campo FieldMDP, con report di autorizzazione strutturale per ogni firma selezionata
- I timestamp di documento RFC 3161, i timestamp di firma, l’iniezione di token PAdES-B-T, la validazione della catena di certificati, l’evidenza OCSP e il materiale di validazione DSS o VRI dispongono ora di workflow completi di creazione e verifica
- Le annotazioni RichMedia supportano ora asset incorporati, impostazioni di attivazione e disattivazione, apparenze poster, enumerazione, estrazione e rimozione
- La stampa poster supporta ora l’imposizione vettoriale delle pagine, i segni di sovrapposizione e di taglio, il posizionamento sensibile ai margini hardware e i piani di tiling riutilizzabili
- Le tabelle taggate emettono ora struttura semantica Table, TR, TH e TD con identificatori stabili, associazioni di intestazione, span, intestazioni ripetute e decorazione artifactizzata
- Il visualizzatore fornisce ora la modifica di AcroForm accessibile tramite tastiera per i campi di testo, scelta, casella di controllo, radio e pulsante mentre invia le azioni all’applicazione host
Changed
- Gli shading mesh basati su funzione Type 1 e da Type 4 a 7 sono ora renderizzati tramite valutazione nativa della funzione e tassellazione mesh limitata
- Il rendering del colore ICCBased condivide ora le trasformazioni memorizzate nella cache tra immagini e shading preservando il comportamento dello spazio colore calibrato
- I salvataggi incrementali ricostruiscono ora in modo coerente i flussi di oggetto e i flussi di riferimento incrociato e le firme selezionate sono verificate rispetto alla propria revisione firmata
Fixed
- Le richieste di timestamp di firma SHA-1 eseguono ora l’hash del valore della firma del firmatario con SHA-1 invece di ricadere su SHA-256
- Le sostituzioni di blocco campo rifiutate non scartano più una configurazione di blocco campo precedentemente valida
- I widget radio con nomi di stato di apparenza duplicati preservano ora il widget selezionato e mantengono i widget fratelli spenti
Version 3.287.0
Changed
- I dizionari di immagine in linea seguono ora i confini di commento, delimitatore, letterale, esadecimale, array e dizionario PDF con annidamento limitato
- I payload di immagine in linea utilizzano ora la terminazione sensibile al formato per dati raw, DCT, ASCII85, ASCIIHex, RunLength e Flate
- La scoperta del payload Flate esegue ora una decompressione limitata dall’offset del flusso di contenuto con contabilità esatta dei byte compressi, mentre i filtri lossless concatenati condividono un limite di output end-to-end
- I flussi ASCII85, ASCIIHex, LZW, di predittore, di profilo colore e di immagine ausiliaria applicano ora un output intermedio limitato senza allocazioni temporanarie sovradimensionate
Fixed
- Le immagini in linea malformate o troncate non leggono più oltre i dati di origine, non entrano più in ciclo su valori non terminati e non conservano più stato non aggiornato durante il riutilizzo del decoder
- Le righe di immagine compresse calcolano ora i bit dei componenti prima dell’arrotondamento dei byte, prevenendo lunghezze errate per immagini RGB a basso numero di bit e multi-riga
- Gli spazi colore delle risorse preservano ora i loro nomi originali derivando i conteggi dei componenti Lab, ICCBased indiretti e DeviceN e decodificando i flussi di tavolozza Indexed sotto limiti rigorosi
- I confini di immagine in linea rifiutano ora in modo coerente dimensioni non valide, profondità di bit, filtri non supportati, catene di filtri non sicure, flussi compressi e marcatori di fine ambigui
- Il rendering del colore Indexed valida ora ogni accesso alla tavolozza e rifiuta i dati di lookup troncati invece di leggere oltre la tabella decodificata
- I predittori PNG da 10 a 15 si decodificano ora correttamente per i flussi Flate e LZW, rifiutano i filtri di riga non validi e convalidano tutte le dimensioni di riga e di stato prima dell’allocazione
- I payload JPEG e JPEG 2000 verificano ora le loro dimensioni codificate, componenti, precisione, struttura dei marcatori, lunghezze dei box e impronta di archiviazione decodificata prima dell’allocazione dell’immagine
- La validazione dell’immagine in linea limita ora sia lo storage bitmap compresso che espanso e vincola i profili ICC, i globali JBIG2 e i parametri del filtro terminale
- I payload di filtro binario contenenti testo di marcatore di fine incorporato continuano ora fino al primo candidato che supera la validazione di formato limitata
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Added
- Aggiunta una demo Delphi della matrice di protezione PDF/A che verifica il rifiuto anticipato o le decisioni sui percorsi consentiti per la configurazione della modalità PDF/A, la trasparenza, le modalità di fusione, la crittografia, JavaScript, i contenuti multimediali, i file incorporati e i flussi di lavoro dei file associati PDF/A-3, con report PDF, CSV e HTML generati
Version 3.163.0
Added
- Aggiunta una matrice di collegamento ReportAdapter esplicita per FastReport, QuickReport, ReportBuilder, DBGrid e percorsi di esportazione canvas personalizzati, con output CSV e HTML di mappatura generato e una pagina PDF che mostra la strategia dell'adattatore riutilizzabile
Version 3.162.0
Added
- Aggiunta una matrice di demo di flusso di lavoro avanzato che genera output concreti per la migrazione canvas, le opzioni di importazione EMF, i confronti di compressione delle immagini, i flussi di lavoro di azioni AcroForm, le firme vuote visibili, i permessi di sicurezza, i controlli PDF/A-1b, il contenuto opzionale, i motivi di tassellatura, i Form XObject, l'esportazione di tabelle in stile DBGrid e la segnalazione del picco di memoria per file di grandi dimensioni
Version 3.161.0
Added
- Aggiunti helper Delphi per la costruzione compatta di azioni di apertura documento, le azioni evento di visibilità dei campi modulo, i selettori di colore TColor e grigio, e l'iniezione diretta di flusso di contenuto grezzo, percorso, testo e matrice
Version 3.160.0
Added
- Aggiunti helper Delphi per la compressione di immagini scansionate bitmap in JBIG2, la configurazione in un unico passaggio di maschere immagine e trasparenza per chiave di colore, l'aggancio di azioni GoTo, e nomi evento AcroForm leggibili per JavaScript o l'assegnazione di azioni esistenti
- Estende
ImportEMFFromFileExeImportEMFFromStreamExin modo che i loro flagOptionspossano forzare l'importazione bitmap, abilitare la ricompressione JPEG delle immagini colore EMF e richiedere i controlli di elaborazione GDI+
Version 3.159.1
Changed
- Migliora
SaveToStreame il salvataggio del flusso di output collegato, così che i grandi oggetti di flusso PDF vengano scritti in blocchi delimitati invece di copiare ogni oggetto di flusso in un'unica stringa di output intermedia
Version 3.159.0
Added
- Aggiunti helper per il posizionamento delle immagini che disegnano o adattano una determinata immagine e ne rilasciano subito l'handle, con punti di ingresso Delphi, DLL e ActiveX per un picco di memoria inferiore nei flussi di lavoro di generazione immagini monouso
- Aggiunto
RenderPageToMonochromeFileExper il rendering BMP a 1 bit con conversione per soglia e pulizia isolata dei pixel neri prima dei flussi di lavoro di compressione di immagini scansionate
Version 3.158.1
Added
- Aggiunte demo di flusso di lavoro Delphi per esportazione riutilizzabile in stile report, importazione di testo ricco RichEdit in EMF e scenari combinati di miniatura di pagina, annotazione, Form XObject, tabella, compressione, JavaScript e output su flusso collegato
Version 3.158.0
Added
- Aggiunte API di controllo della crittografia dei metadati con punti di ingresso Delphi, DLL e ActiveX: SetEncryptMetadata può scrivere PDF Standard-security con flussi di metadati XMP non crittografati, mentre GetEncryptMetadata segnala lo stato /EncryptMetadata in sospeso o caricato
Version 3.157.0
Added
- Aggiunte API di disegno diretto di motivi di tassellatura con punti di ingresso Delphi, DLL e ActiveX: BeginTilingPattern crea una superficie di disegno temporanea per la cella del motivo, EndTilingPattern la registra come motivo riutilizzabile e CancelTilingPattern scarta la costruzione senza lasciare un motivo denominato
Version 3.156.0
Added
- Aggiunti helper Delphi per i flussi di output collegati:
BeginOutputToStream,EndOutputStream,CancelOutputStreameOutputStreamActiveconsentono al codice di streaming, web e esportazione report di collegare unTStreamdi destinazione, terminarlo tramite il writer a blocchi esistente o annullare la destinazione in attesa senza assumere la proprietà dello stream
Version 3.155.0
Added
- Aggiunti
Abort,AbortedeResetAbortper i chiamanti Delphi, DLL e ActiveX, in modo che le applicazioni possano contrassegnare un'istanza come annullata e impedire l'avvio delle operazioni di salvataggio o di aggiunta all'output finché il flag non viene azzerato
Version 3.154.0
Added
- Aggiunti helper per le miniature di pagina per le opzioni di importazione immagini e le origini in memoria, la ricerca dei gruppi di contenuto opzionale e i setter di stato per nome di gruppo, oltre a
SetOpenActionNamedDestinationper i salti all'apertura del documento tramite destinazioni denominate
Fixed
GetDestNameora risolve handle di array di destinazione espliciti, inclusi gli array restituiti da un'azione di apertura documento denominata
Version 3.153.0
Added
- Aggiunte API di convenienza per azioni modulo concatenate, trigger di campo Hide e ImportData, stati iniziali del gruppo di contenuto opzionale, importazioni EMF facoltative e importazioni di immagini trasparenti per chiave di colore
Version 3.152.0
Added
- Aggiunta la creazione automatica di link URL per il disegno di testo, helper di importazione immagini CCITT Group 3/4, helper di immagini dirette JBIG2, wrapper di importazione EMF estesi, helper di allegato maschera immagine, creazione di campi firma visibili e helper di eventi/azioni di campo modulo per i flussi di lavoro JavaScript, SubmitForm e ResetForm
Version 3.151.0
Added
- Aggiunti
DrawPie,DrawChord,DrawEllipticPieeDrawEllipticChordper il disegno esplicito di archi circolari ed ellittici chiusi con modalità contorno, riempimento o contorno e riempimento
Version 3.150.0
Added
- Aggiunti
NewGraphicsStateeSetGraphicsStateper consentire ai chiamanti di creare risorse ExtGState riutilizzabili per impostazioni combinate di trasparenza di riempimento, trasparenza di tratto, larghezza linea, capolinea, giunzione linea e limite di miter
Version 3.149.1
Fixed
- Corretti gli identificativi di dispatch ActiveX duplicati per i metodi Form XObject e limite di miter, così che i chiamanti COM a late binding risolvano ogni metodo senza ambiguità
Version 3.149.0
Added
- Aggiunto
SetMiterLimitper controllare i rapporti del limite di miter del tratto per i percorsi che usano giunzioni di miter - Esposi
BeginFormXObject,EndFormXObjecteCancelFormXObjecttramite le API DLL e ActiveX
Version 3.148.0
Added
- Aggiunte API riutilizzabili per la creazione di Form XObject:
BeginFormXObject,EndFormXObjecteCancelFormXObjectconsentono ai chiamanti di disegnare un modello riutilizzabile con normali chiamate di disegno pagina e di posizionarlo ripetutamente tramite le API di disegno pagina catturata
Version 3.147.0
Added
- Aggiunti
SetTextTilingPatterneSetLineTilingPatterncosì che i motivi di tassellatura della pagina catturata possano essere riutilizzati per testo, sottolineatura e grafica tracciata senza duplicare i comandi di disegno
Fixed
- I colori dello shader tracciato e del motivo di tassellatura ora scrivono l'operatore di colore del motivo di tratto invece di aggiornare lo stato del colore non di tratto
Version 3.146.0
Added
- Aggiunti
BeginOptionalContenteEndOptionalContentcosì che i chiamanti possano marcare solo i successivi comandi di disegno con un gruppo di contenuto opzionale senza riscrivere il flusso di contenuto esistente
Fixed
- Gli operatori di contenuto marcato di chiusura dello scope vengono ora svuotati immediatamente quando gli scope di contenuto opzionale, PDF taggato o artefatto vengono chiusi alla fine di un flusso di contenuto
Version 3.145.0
Added
- Aggiunto
SetTransparencyExper consentire ai chiamanti di impostare valori separati di trasparenza di riempimento e tratto per testo e grafica disegnati successivamente mantenendo il comportamento esistente di aggiornamento automatico a PDF 1.4
Version 3.144.0
Added
- Aggiunto
AddLinkToNamedDestinationcosì che un punto interattivo della pagina possa saltare a una destinazione denominata dello stesso documento senza risolvere la pagina di destinazione al momento della creazione del link
Fixed
- I lettori di azioni annotazione ora restituiscono nessuna azione per le pagine senza annotazioni invece di dereferenziare una cache di annotazioni vuota
Version 3.143.0
Added
- Aggiunte API di gestione delle azioni dei campi modulo in modo che i chiamanti possano collegare un'azione esistente a un trigger di campo, ispezionare l'azione trigger tipizzata e rimuovere le azioni di campo principali o aggiuntive
Fixed
FormFieldJavaScriptActionora rifiuta i documenti PDF/A e i nomi di trigger non validi invece di scrivere dizionari di azioni di campo non conformi
Version 3.142.0
Added
- Aggiunte API di concatenazione delle azioni per consentire ai chiamanti di accodare azioni successive URI, denominate e JavaScript a un'annotazione, un sommario o un'azione di campo modulo esistenti e di ispezionare le azioni concatenate tramite
GetActionNextCounteGetActionNextInfo
Version 3.141.0
Aggiunto
- Aggiunto
AddLinkToSubmitFormeAddLinkToResetFormin modo che le aree interattive della pagina possano inviare o ripristinare i campi AcroForm tramite azioni PDF standard senza JavaScript
Version 3.140.0
Aggiunto
- Aggiunto
AppendToStreamin modo che i flussi di lavoro di aggiornamento incrementale possano scrivere direttamente in un flusso fornito dal chiamante invece di materializzare prima l'aggiornamento comeAnsiString
Modificato
SaveToStreamora serializza direttamente nel flusso di destinazione, eAppendToString(1)ora restituisce solo la sezione di aggiornamento incrementale senza copiare i byte di origine originali in un buffer temporaneo
Version 3.139.0
Aggiunto
- Aggiunti
GetAnnotReplyToeGetAnnotReplyTypein modo che le risposte alle annotazioni in thread possano essere ispezionate tramite accessor lato lettura nominati invece di tag di proprietà di annotazione generici
Version 3.138.0
Aggiunto
- Aggiunto l'esempio Delphi
DocumentInspectionWorkbenchper l'ispezione in batch di PDF con diagnostica dei font combinata, campionamento delle immagini, rilevamento dello spazio colore, tempi di caricamento e report JSON, CSV e HTML
Version 3.137.0
Aggiunto
- Aggiunto l'esempio Delphi
ImageDecodeBenchmarkper misurare il rilevamento delle immagini della pagina, i byte decodificati delle immagini e il rilevamento dello spazio colore della pagina con report temporali in CSV e HTML
Version 3.136.0
Aggiunto
- Aggiunti
GetDocumentFontDiagnosticseTPDFlibFontDiagnosticsper riepilogare in un'unica chiamata i conteggi dei font incorporati, subset, Standard 14, CID, Type3 e font sconosciuti del documento
Version 3.135.0
Aggiunto
TPDFlibSignatureVerifier.VerifySignerCertificateChainora costruisce la catena di certificati del firmatario incorporata con Windows CryptoAPI e restituiscevsValidsolo quando la catena soddisfa i criteri di attendibilità di base di Windows, mentre i certificati del firmatario autofirmati o altrimenti non attendibili restituisconovsInvalidsenza modificare il risultato di integrità del contenuto diVerifySignature
Version 3.134.0
Risolto
TPDFlibSignatureVerifier.VerifySignatureora convalida le firme legacyadbe.pkcs7.sha1, restituendovsValidquando il digest firmato corrisponde ai byte coperti in/ByteRangeevsInvaliddopo modifiche al contenuto coperto
Version 3.133.0
Aggiunto
- Aggiunti
RenderPagesToFileseDARenderPagesToFilesper effettuare il rendering di intervalli di pagine arbitrari su file di output numerati riutilizzando la configurazione del motore di rendering sulle pagine selezionate
Version 3.132.0
Aggiunto
- Aggiunti i marcatori di convenienza
AddPageHeadereAddPageFooterche posizionano il testo a un margine superiore o inferiore fisso su ogni pagina in un intervallo, con allineamento a sinistra/centro/destra e l'espansione dei token (&Ppagina corrente,&Npagine totali,&Ddata,&Ttitolo del documento,&&e commerciale letterale) StampTexteStampImageconsoUnderlayora posizionano veramente il contenuto sotto i contenuti esistenti della pagina aggiungendo all'inizio un nuovo livello di contenuto (in precedenza lo disegnava sopra comesoOverlay); supportato da un nuovo metodo dell'albero della paginaPrependContentLayer
Version 3.131.0
Aggiunto
- Aggiunto
ScalePage(ScaleX, ScaleY, Anchor)che ridimensiona il contenuto della pagina selezionata avvolgendo ogni livello di contenuto in un blocco di stato graficoq sx 0 0 sy tx ty cm ... Qe ridimensionando MediaBox e CropBox; l'ancora mantiene l'origine in basso a sinistra (0), centra il contenuto (1) o mantiene l'origine in alto a sinistra (2) - Esteso
EnumPageElementscon un nuovo tipo di elementoekPath: ora ogni pagina segnala anche i propri percorsi vettoriali con un riquadro di delimitazione (bounding box), il conteggio dei punti, un flag di chiusura e l'operatore di disegno, ricavati dai flussi di contenuto tramite il modello di contenuto strutturato
Version 3.130.0
Aggiunto
- Aggiunte tre API di ottimizzazione della dimensione del file che riducono i documenti caricati durante il salvataggio:
SubsetEmbeddedFontsriscrive ogni programma di font TrueType incorporato (FontFile2) fino ai soli caratteri Unicode di cui il documento esegue effettivamente il rendering tramite il servizioCreateFontPackagein FontSub.dll;DownsampleImages(MaxDPI, Quality, Filter)decodifica ogni XObject immagine al di sopra del DPI di destinazione, la ricampiona (a riquadro o bilineare) e la ricodifica come JPEG o PNG;NormalizeLZWStreamsriscrive ogni flusso ancora filtrato con LZWDecode in FlateDecode tramite il decodificatore LZW esistente e l'encoder Flate, preservando i parametri Predictor
Version 3.129.0
Aggiunto
- Aggiunte API di creazione di ombreggiature mesh per i quattro tipi di ombreggiatura che in precedenza avevano solo supporto in lettura/analisi:
NewRGBFreeFormTriangleMesh(ShadingType 4, triangoli di Gouraud a forma libera),NewRGBLatticeTriangleMesh(ShadingType 5, Gouraud a forma di reticolo),NewRGBCoonsPatchMesh(ShadingType 6, mesh a patch di Coons) eNewRGBTensorPatchMesh(ShadingType 7, mesh a patch del prodotto tensoriale) — ciascuna costruisce un pattern di ombreggiatura mesh denominato a partire da un elenco piatto di vertici o patch con una profondità in bit per colore/coordinate selezionabile e un riquadro di delimitazione, selezionabili conSetFillShader/SetLineShader/SetTextShadercome i preesistenti shader assiali e radiali
Version 3.128.0
Aggiunto
- Aggiunta una striscia di miniature (thumbnail) per il visualizzatore:
TPDFlibThumbnailBarmostra una miniatura di ogni pagina, sottoposta a rendering in modalità lazy quando le righe scorrono nella vista, con il numero di pagina sottostante; facendo clic su una miniatura il visualizzatore collegato salta a quella pagina — completando la famiglia di controlli del visualizzatore (visualizzatore, pannello dei segnalibri, pannello di ricerca, miniature)
Version 3.127.0
Aggiunto
- Aggiunto un pannello di ricerca per il visualizzatore:
TPDFlibSearchPanel.RunSearchesegue la ricerca nell'intero documento collegato ed elenca una riga per risultato con il numero di pagina e il testo corrispondente; facendo clic su un risultato il visualizzatore salta a quella pagina
Version 3.126.0
Aggiunto
- Aggiunto un pannello dei segnalibri per il visualizzatore:
TPDFlibOutlineViewerelenca l'albero della struttura del documento con rientri (indentation) e fa saltare il visualizzatore collegato (tramiteAttachViewer) alla pagina di destinazione di un segnalibro quando cliccato; è costruito su una classe base di pannello riutilizzabile che i pannelli laterali successivi condividono
Version 3.125.0
Aggiunto
- Aggiunta la selezione del testo al controllo del visualizzatore: trascinare con il tasto sinistro del mouse per selezionare, premere Ctrl+C o chiamare
CopySelectedTextper copiare la selezione negli appunti; il testo catturato è disponibile tramite la proprietàSelectedText, ordinato dall'alto verso il basso con interruzioni di riga tra le bande (bands) - Aggiunto
GetTextInRegion, che restituisce direttamente il testo di una regione di pagina rettangolare — la stessa ricerca basata su blocchi utilizzata dalla selezione del mouse, disponibile per interfacce di selezione personalizzate
Version 3.124.0
Aggiunto
- Il controllo del visualizzatore ora effettua il pre-rendering delle pagine vicine in un thread in background, in modo che scorrere in avanti o indietro mostri la pagina successiva all'istante; il worker utilizza la propria istanza di documento e consegna i rendering completati alla cache senza bloccare la UI
- Aggiunta l'interattività dei collegamenti (link) al visualizzatore: facendo clic su un'annotazione di collegamento viene attivato
OnLinkClickcon il numero di pagina e lo stesso riepilogo dell'azione tipizzata prodotto daGetAnnotActionInfo(indirizzo web, destinazione nel documento, azione denominata e così via);LinkActionAtPagePointespone il test di collisione (hit test) sottostante per la gestione personalizzata
Version 3.123.0
Aggiunto
- Il controllo del visualizzatore ha ottenuto lo scorrimento continuo:
SetDisplayModealternaTPDFlibViewertra la visualizzazione a pagina singola e uno scorrimento verticale continuo attraverso l'intero documento, con il rendering limitato alle sole pagine visibili nella viewport e la pagina corrente che traccia la posizione di scorrimento (attivandoOnPageChangeman mano che le pagine diventano visibili) - Le pagine sottoposte a rendering sono ora mantenute in una cache bitmap di tipo least-recently-used, in modo che lo scorrimento avanti e indietro non richieda un nuovo rendering; il budget di memoria è preimpostato a 128 MB e si regola con
SetCacheLimit, eliminando le pagine più vecchie quando il budget si riduce o si riempie - Aggiunto lo scorrimento con la rotellina del mouse e la navigazione da tastiera al visualizzatore: PagSu/PagGiù (passi di pagina in modalità pagina singola, passi di viewport in modalità continua), tasti freccia, Inizio e Fine
Version 3.122.0
Aggiunto
- Aggiunto un controllo interattivo per il visualizzatore PDF:
TPDFlibViewerè un controllo di scorrimento VCL che apre un documento da file o si collega a un'istanza esistente diTPDFlib, visualizza le pagine tramite il motore di rendering selezionato (GDI+, Cairo o PDFium) e offre navigazione tra le pagine (GoToPage/NextPage/PrevPagecon un eventoOnPageChange) e controllo dello zoom — una percentuale fissa, adatta alla larghezza (fit-to-width) o adatta alla pagina (fit-to-page), ricalcolata automaticamente quando il controllo viene ridimensionato; le pagine più larghe della viewport scorrono, quelle più strette si centrano - Aggiunto un pacchetto in fase di progettazione (
Package\PDFlibViewerPkg.dpk) che registra il controllo nella pagina della tavolozza (palette) losLab PDF per l'uso drag-and-drop nell'IDE
Version 3.121.0
Aggiunto
- Shaping automatico del testo per script complessi in
DrawText: il testo contenente caratteri arabi, ebraici, indic o altri script complessi viene ora rilevato e modellato (shaped) automaticamente — le forme contestuali delle lettere, le legature obbligatorie e l'ordinamento da destra a sinistra vengono visualizzati correttamente senza modifiche al codice; i 14 nomi standard (standard-14 names) sono associati ai loro font installati metricamente compatibili (Helvetica con Arial, Times con Times New Roman, Courier con Courier New) eGetTextWidthmisura attraverso lo stesso passaggio di shaping in modo che l'allineamento rimanga coerente; i testi in latino, cirillico, greco e CJK mantengono il loro percorso di disegno esistente byte per byte - Aggiunto
SetTextShapingper alternare l'instradamento automatico (abilitato per impostazione predefinita; passare 0 per ripristinare il comportamento esatto precedente allo shaping)
Version 3.120.0
Modificato
- I font di accompagnamento per il testo modellato (shaped) vengono ora ridotti a sottoinsiemi (subsetted) al momento del salvataggio ai soli glifi mostrati dal documento, riducendo drasticamente i file di output (un programma di font completo di oltre un megabyte si riduce ai glifi utilizzati); il font in sottoinsieme (subsetted) mantiene la sua numerazione dei glifi, porta un nome
BaseFontcon tag di sottoinsieme (subset-tagged) e larghezze reali per glifo/W, e ottiene una mappa ToUnicode che traduce ogni glifo modellato nei suoi caratteri di origine — in modo che la copia o l'estrazione dell'output diDrawShapedTextrestituisca la stringa originale, comprese entrambe le lettere dietro una legatura lam-alef
Version 3.119.0
Aggiunto
- Aggiunto il disegno del testo per script complessi:
DrawShapedTextmodella (shapes) le stringhe arabe, ebraiche e altri script complessi prima di disegnarle — le forme contestuali delle lettere, le legature obbligatorie come lam-alef e l'ordinamento da destra a sinistra risultano tutti correttamente — e scrive i glifi modellati (shaped glyphs) tramite un font di accompagnamento Type0 (Identity-H) incorporando l'intero programma del font, in modo che le forme senza un proprio codice carattere vengano sottoposte a rendering in modo esatto; viene creato un font di accompagnamento per volto (face) e riutilizzato tra le chiamate - Aggiunto
GetShapedTextWidth, che misura il testo attraverso lo stesso passaggio di shaping in modo che il testo legato (ligated text) venga misurato alla sua vera larghezza disegnata — utilizzarlo per allineare a destra o centrare paragrafi modellati (shaped paragraphs)
Version 3.118.0
Aggiunto
- Aggiunte le basi per il text shaping per script complessi: un nuovo binding Uniscribe (usp10.dll) trasforma l'arabo, l'ebraico e altre stringhe in script complessi in sequenze di glifi correttamente ordinate e modellate — forme arabe contestuali, legature obbligatorie come lam-alef, e ordinamento da destra a sinistra — segnalando l'indice del glifo del font di ciascun glifo, l'avanzamento (advance) e il cluster di caratteri di origine; questo è il motore di shaping su cui le versioni successive costruiscono il percorso di disegno, e viene caricato in modo lazy, così le piattaforme senza Uniscribe mantengono semplicemente il percorso esistente basato su singoli caratteri
Version 3.117.0
Aggiunto
- Aggiunta introspezione del profilo ICC:
GetOutputIntentICCInfoanalizza il profilo ICC allegato a OutputIntent del documento e ne riporta la versione, la classe del dispositivo, lo spazio colore dei dati, il profile connection space, l'intento di rendering e il numero di componenti — utile per ispezionare le condizioni di stampa dei file PDF/A e PDF/X; inoltre, la gestione dello spazio colore ICCBased del motore di rendering ora deriva anche il numero di componenti dall'intestazione del profilo stesso, quando lo spazio colore di un'ombreggiatura (shading) non riporta né/Alternatené/N
Version 3.116.0
Aggiunto
- Aggiunta una modalità di estrazione del testo basata sulle tabelle: l'opzione 10 di
GetPageTextraggruppa i margini sinistri dei blocchi di testo della pagina in posizioni di colonna globali e produce righe separate da tabulazioni, in modo che i layout tabulari vengano estratti come TSV pronto per l'importazione, con le celle allineate verticalmente che rimangono allineate lungo le righe
Version 3.115.0
Aggiunto
- Aggiunta imposizione di pagina:
ImposePagesNUpdispone ogni pagina del documento su nuovi fogli in una griglia n-up (2-up, 4-up, 9-up o in qualsiasi disposizione Colonne x Righe), con ogni pagina adattata in base alle proporzioni e centrata nella relativa cella come contenuto vettoriale dinamico, oppure — con l'opzione booklet — produce fogli a punto metallico le cui coppie di pagine si piegano a formare un opuscolo quando stampate in fronte/retro e impilate
Version 3.114.0
Aggiunto
- Estesi i lettori di azioni tipizzate
GetAnnotActionInfoeGetOutlineActionInfoad altri quattro tipi di azione — Hide (con il numero di target nascosti e il flag hide/show), SubmitForm (URL di invio e numero di campi), ResetForm (numero di campi) e ImportData (file di origine) — e per esporre il payload del nome delle azioni denominate (Named, es.NextPage); entrambi i lettori ora condividono un parser, quindi i collegamenti delle annotazioni e i segnalibri riportano informazioni identiche
Version 3.113.0
Aggiunto
- Aggiunti helper per la formattazione dei campi del modulo:
SetFormFieldNumberFormat(posizioni decimali, stile del separatore, stile negativo e posizionamento della valuta),SetFormFieldPercentFormateSetFormFieldDateFormat(stringhe di formato data Acrobat comemm/dd/yyyy), ognuno dei quali scrive la coppia standard JavaScript di formattazione Acrobat nelle azioni aggiuntive del campo — un filtro per i tasti premuti (keystroke) e un formattatore di visualizzazione — in modo che i visualizzatori conformi validino l'input ed effettuino il rendering dei valori formattati senza ricorrere a JavaScript scritto a mano
Version 3.112.0
Aggiunto
- Aggiunta la creazione di annotazioni Sound:
AddSoundAnnotationFromFilelegge un file WAV PCM non compresso (8 o 16 bit, mono o stereo) e incorpora i suoi campioni dietro un'annotazione a icona di altoparlante come un flusso/Soundnella codifica firmata che il sistema audio PDF si aspetta, completando il round-trip con i lettori esistentiGetAnnotSoundToFile/GetAnnotSoundToString
Version 3.111.0
Aggiunto
- Aggiunte risposte ad annotazione ad albero (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyaccoda una risposta a qualsiasi annotazione esistente sotto forma di annotazione Text nascosta il cui/IRTfa riferimento all'obiettivo con la relazione di risposta/RT, così che Acrobat e altri visualizzatori la mostrino raggruppata sotto il target nel pannello dei commenti; si combina conAddAnnotationStatee lo scambio di commenti FDF per realizzare round-trip di revisione collaborativa completi
Version 3.110.0
Aggiunto
- Aggiunto rendering delle ombreggiature (shading) mesh e basate su funzione, completando la copertura per tutti i sette tipi di ombreggiatura PDF: mesh di triangoli Gouraud a forma libera (tipo 4), mesh Gouraud a forma di reticolo (tipo 5), mesh a patch di Coons (tipo 6) e mesh a patch del prodotto tensoriale (tipo 7) decodificate dai loro flussi di dati compressi a livello di bit — inclusi i flag per i bordi condivisi dei patch, la mappatura dei valori
/Decodee le rampe colore/Functionopzionali — e dipinte tramite gradienti mesh nativi del motore Cairo; le ombreggiature basate su funzione (tipo 1) vengono approssimate campionando la funzione di ombreggiatura nel suo dominio e convertendola in una griglia fine di patch; gli spazi colore supportati coprono DeviceRGB, DeviceGray, DeviceCMYK e spazi alternativi ICCBased (il motore GDI+ non ha una primitiva per i gradienti mesh e lascia in bianco le aree ombreggiate con mesh)
Version 3.109.0
Aggiunto
- Completato il framework di editing dei contenuti (fase 4) con editing a livello di testo:
TPDFContentProgram.GetTextRunsenumera le istruzioni di visualizzazione del testo di una pagina tenendo traccia della risorsa font e della dimensione attive a ogni istruzione (rilevando lo stato del font attraverso l'annidamento di save/restore), eReplaceTextRunsostituisce il testo mostrato sul posto — una vera sostituzione a livello di flusso del contenuto che mantiene la posizione, il font e il colore originali, a differenza degli approcci basati sull'overlay che mascherano il vecchio testo e ci disegnano sopra
Version 3.108.0
Aggiunto
- Aggiunto un modello a oggetti per la geometria della pagina al framework di editing dei contenuti (fase 3):
TPDFContentProgram.LiftPathsolleva un oggetto percorso (operatori di costruzione move/line/curve/rectangle, oltre agli operatori di clipping e pittura che lo terminano) in unTPDFPathmodificabile di percorsi secondari e segmenti;TPDFPath.Transformapplica una matrice affine a ciascun punto (sposta, ridimensiona, ruota o inclina l'artwork esistente);LowerPathriscrive la geometria modificata sulle istruzioni originali, pronta perWritePageContentLayer
Version 3.107.0
Aggiunto
- Esteso il framework di editing dei contenuti (fase 2) con utilità a livello di istruzione in
TPDFContentProgram:InsertFromSourceanalizza uno snippet di contenuto e unisce le sue istruzioni in qualsiasi posizione;SetOperandriscrive un singolo operando dalla sintassi sorgente (rinumera una coordinata, ricolora un riempimento);OperandTextrilegge un operando;InstructionGroup,FindNextOpeFindNextGroupnavigano nell'elenco delle istruzioni per operatore o in base alla categoria dell'operatore secondo lo standard ISO 32000-1
Version 3.106.0
Aggiunto
- Aggiunta la prima fase del framework strutturato di editing dei contenuti:
ParsePageContentLayerdecodifica il livello dei contenuti di una pagina in unTPDFContentProgrammodificabile — un elenco di istruzioni, dove ognuna rappresenta un operatore di contenuto PDF (tutti i 73 operatori della Tabella 51 di ISO 32000-1) con i relativi oggetti operando decodificati — eWritePageContentLayerserializza nuovamente il programma nella pagina, consentendo ai chiamanti di analizzare, ispezionare, eliminare o riordinare le istruzioni di disegno e di riscrivere la pagina;GetPageContentLayerCountsegnala il numero di livelli di contenuto, che vengono modificati in modo indipendente; l'emettitore preserva il comportamento (un salvataggio senza modifiche mantiene lo stesso rendering dei pixel), gli operatori sconosciuti sopravvivono invariati e le immagini incorporate (inline) sono mantenute identiche al file di origine
Version 3.105.0
Aggiunto
- Aggiunta una modalità di estrazione del testo secondo l'ordine di lettura: l'opzione 9 di
GetPageTextrestituisce il testo della pagina seguendo l'ordine visivo di lettura mediante un'analisi ricorsiva degli spazi bianchi (XY-cut), così che i layout a più colonne vengano estratti colonna per colonna — prima l'intestazione a tutta larghezza, poi tutta la colonna sinistra, poi quella destra — invece di intrecciare le colonne riga per riga, come avviene con le estrazioni in base all'ordine geometrico dall'alto verso sinistra
Version 3.104.0
Aggiunto
- Aggiunta introspezione del certificato del firmatario nel verificatore di firme:
GetSignerCertificatedecodifica il payload PKCS#7 del primo campo firma e restituisce un sommario tipizzato del certificato del firmatario incorporato — nomi visualizzati del soggetto e dell'emittente, numero di serie nel convenzionale formato esadecimale, la finestra di validità UTC (NotBefore/NotAfter) e un comodo indicatore (flag) che segnala se il certificato è attualmente all'interno di quella finestra; il firmatario viene trovato tra i certificati incorporati facendo corrispondere l'emittente e il numero di serie
Version 3.103.0
Aggiunto
- Aggiunta
NewRGBRadialShader, la controparte radiale diNewRGBAxialShader: registra un gradiente radiale a due cerchi denominato (ShadingType 3, ISO 32000-1 §8.7.4.5.3) che sfuma tra due colori RGB, con estensione opzionale del colore oltre i cerchi; lo si seleziona con gli esistentiSetFillShader,SetLineShaderoSetTextShaderper dipingere riempimenti "glow" circolari, tratti e testo
Version 3.102.0
Aggiunto
- Aggiunto il rendering del gradiente radiale (ShadingType 3) (ISO 32000-1 §8.7.4.5.4): il renderer della pagina ora disegna anche le ombreggiature radiali a due cerchi utilizzate dagli operatori
she dai riempimenti shading-pattern, oltre ai gradienti assiali (ShadingType 2) supportati in precedenza; supportato in entrambi i motori raster GDI+ e Cairo con funzioni di colore a interruzioni multiple (multi-stop), spazi colore DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased e gestione di/Extend
Version 3.101.0
Aggiunto
- Aggiunti effetti nuvoletta sui bordi (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffecttrasforma il bordo di un'annotazione Square, Circle, Polygon o FreeText in una "nuvola di revisione" di semicerchi connessi, scrivendo il dizionario per l'effetto del bordo/BE, con un'intensità 1 o 2 che corrisponde agli stili Nuvola (Cloudy) di Acrobat e uno zero (0) per rimuovere nuovamente l'effetto;GetAnnotCloudyEffectrilegge questa impostazione (0 = nessuna nuvola, altrimenti l'intensità di 1..2)
Version 3.100.0
Aggiunto
- Aggiunti gli stati di revisione per le annotazioni (ISO 32000-1 §12.5.6.3):
AddAnnotationStateregistra una modifica dello stato di revisione per un'annotazione esistente accodando un'annotazione Text nascosta il cui/IRTpunta all'obiettivo e il cui/State+/StateModeltrasmettono lo stato, supportando il modelloReview(None/Accepted/Rejected/Cancelled/Completed) e il modelloMarked(Unmarked/Marked) usati nel flusso di lavoro della revisione dei commenti di Acrobat;GetAnnotStateeGetAnnotStateModelrileggono le stringhe registrate da qualsiasi annotazione (campo vuoto in loro assenza)
Risolto
- Risolto un errore in fase di caricamento che impediva l'avvio delle applicazioni compilate con versioni in fase di sviluppo recenti (la ricerca di un nome certificato Windows era legata a un punto di ingresso DLL inesistente), e corretta la regressione nella compilazione durante l'importazione di commenti FDF, nella rotazione di determinati intervalli di pagine e nei percorsi per i flag della firma
Version 3.99.0
Aggiunto
- Aggiunte API di lettura per fingerprint del documento e transizioni:
GetDocumentFileIDrestituisce l'identificatore permanente del documento dall'array/IDdel trailer (primo elemento codificato in formato esadecimale), utile come chiave di cache stabile o fingerprint del documento;GetPageTransitionè la controparte in lettura diSetPageTransition, che restituisce lo stile di transizione come valore tipizzatoTPDFlibPageTransitionoltre alla durata della visualizzazione e alla durata della transizione mappando in senso inverso le voci/S,/Dme/Mdi/Transmemorizzate
Version 3.98.0
Aggiunto
- Aggiunte API di rotazione per intervallo di pagine e introspezione delle miniature:
RotatePageRangeapplica una rotazione di 0/90/180/270 a ogni pagina in un intervallo (avvolgendo l'esistenteRotatePageper pagina singola in modo che i chiamanti non abbiano più bisogno di un ciclo per pagina);HasPageThumbnailsegnala se una pagina contiene una voce/Thumb;GetPageThumbnailInfolegge la larghezza, l'altezza e i bit per componente dell'XObject dell'immagine in miniatura
Version 3.97.0
Aggiunto
- Aggiunti lettori estesi per le proprietà delle annotazioni:
GetAnnotColorlegge l'array del colore/C(0..1 RGB, con un flag HasColor che distingue “nessun colore esplicito” da “nero esplicito”);GetAnnotBorderWidthlegge/BS /W, ripiegando sull'array/Borderlegacy;GetAnnotOpacitylegge l'alfa del tratto/CA(predefinito 1.0);GetAnnotCreationDatelegge il timestamp/CreationDate;GetAnnotFlagslegge il byte dei flag di visibilità/stampa/F
Version 3.96.0
Aggiunto
- Aggiunte API di introspezione della sicurezza in sola lettura:
IsEncryptedsegnala se il documento caricato contiene un dizionario/Encrypt;GetEncryptionLevelrestituisce un'intensità tipizzata (0=nessuna, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) corrispondente alle opzioni di crittografia in scrittura;GetUserPermissionsrestituisce la word dei permessi raw/Pper il test diretto dei bit;IsOwnerPasswordsegnala se il documento è stato aperto con le credenziali del proprietario
Version 3.95.0
Aggiunto
- Aggiunte funzionalità avanzate di stampa e sostituzione del testo:
PrintDocumentAdvancedpilota il DEVMODE completo della stampante (fronte/retro, orientamento, colore, qualità di stampa, formato carta, cassetto carta) oltre alle copie/fascicolazione tramite un record tipizzatoTPDFlibPrintSettings, applicando ogni campo non predefinito tramite l'attuale meccanismo del profilo stampante personalizzato;SearchAndReplaceTextesegue una ricerca in un intervallo di pagine e, per ogni risultato, maschera il blocco di testo originale con un rettangolo bianco opaco e ridisegna il testo sostitutivo all'origine del blocco nel font selezionato dal chiamante, rispecchiando il comportamento overlay-replace di SearchAndReplace in PDFtoolkit
Version 3.94.0
Aggiunto
- Aggiunto interscambio di annotazioni FDF (“Esporta/Importa commenti” di Acrobat):
ExportAnnotationsToFDFStringedExportAnnotationsToFDFpercorrono gli/Annotsdi ogni pagina e serializzano ogni annotazione come una voce/Type /Annotall'interno di un array FDF/Annots, includendo/Subtype,/Contents,/Rect, l'etichetta dell'autore/T,/Subje l'indice di pagina in base 0/Page;ImportAnnotationsFromFDFStringeImportAnnotationsFromFDFanalizzano tale FDF con una piccola macchina a stati e ricreano ogni voce come una nuova annotazione sulla pagina corrispondente, preservando l'intero dizionario dell'annotazione piuttosto che comprimerlo in un sticky note
Version 3.93.0
Aggiunto
- Aggiunte API per la certificazione delle firme e le proprietà dei campi modulo:
SetSignProcessDocMDPtrasforma la successiva firma prodotta da un processo di firma in una firma di certificazione (autore) allegando una trasformazione DocMDP/Referenceal livello 1/2/3 (nessuna modifica / compilazione del modulo / annotazioni) e impostando il bit AppendOnly di/SigFlagsdell'AcroForm;GetSigFlags/SetSigFlagsleggono e scrivono direttamente il byte raw/SigFlagsdell'AcroForm;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationeGetFormFieldAllowedValuesespongono i bit di stile/Ffper ogni campo, l'allineamento del testo/Qe l'array delle scelte/Optcome valori tipizzati
Version 3.92.0
Aggiunto
- Aggiunte API di convenienza per l'esportazione degli allegati e per i campi modulo:
SaveAllAttachmentspercorre l'elenco unificato degli allegati (/EmbeddedFilesa livello di documento più le annotazioni/FileAttachmentper pagina) e scrive ogni flusso in una directory con il suo nome di file, disambiguando le collisioni con un suffisso numerico;RemoveFormFieldByNamerisolve un nome di campo completamente qualificato nel suo indice e lo elimina;RenameFormFieldrinomina un campo per nome senza una ricerca dell'indice separata
Version 3.91.0
Aggiunto
- Aggiunte API di enumerazione a livello di documento:
EnumDocumentFontspercorre ogni dizionario Font (chiamando primaFindFontsse necessario) e restituisce unTPDFlibDocumentFontper font con il suo numero di oggetto, il nome del/BaseFont, il tipo, la codifica e lo stato di incorporamento/sottoinsieme, rimuovendo la necessità di eseguireSelectFontper ogni voce e interrogare getter scalari;EnumAttachmentsunifica l'albero dei nomi/EmbeddedFilesa livello di documento con le annotazioni/FileAttachmentper pagina in un singolo elencoTPDFlibAttachment, registrando la sorgente di ogni voce, l'indice della sorgente in base 1, il nome del file, il sottotipo MIME, la descrizione e la dimensione in byte
Version 3.90.0
Aggiunto
- Aggiunte API di introspezione in sola lettura per annotazioni, segnalibri e versione del documento:
GetPDFVersionrestituisce la stringa effettiva della versione PDF (ad es.1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameeGetAnnotRectExespongono i campi per annotazione come wrapper nominati (quindi i chiamanti non hanno più bisogno dei magici numeri Tag di proprietà) rispetto all'attuale cacheAnalyseAnnot;GetOutlineLevelrestituisce la profondità di un segnalibro rispetto alla radice del segnalibro eGetOutlineIsOpensegnala se è espanso in un visualizzatore (il/Countnegativo indica collassato), rispecchiando lo stato di layout che un pannello dei segnalibri renderebbe
Version 3.89.0
Aggiunto
- Added a JBIG2 image encoder unit
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), ported from the HotPDF sibling product, with two backends: on Win64 the C++jbig2encarithmetic coder (ITU-T T.88) is linked statically viaPDFlibJBIG2EncC+HPDFCLibs(228 leptonica/jbig2enc objects underthirdparty/Win64x/) and registered as the default backend, matching HotPDF's production path; on other targets, or whenUseExternalEncoderis False, a pure-Pascal MMR fallback compresses bi-level scanlines with the CCITT G4 encoder and wraps them in JBIG2 segment headers (page-info type 48 + immediate generic-region type 38) - Added an LZW encoder unit
PDFlibLZWEnc(TPLLZWEncoder.Compress), the encoder counterpart to the existingPDFlibLZWdecoder: produces a PDF-spec/LZWDecodestream with 9..12-bit variable-width codes, ClearCode/EOI and PDF-default EarlyChange semantics, plus optional TIFF Predictor 2 (horizontal differencing) so a round-trip through the decoder reproduces the original bytes
Version 3.88.0
Aggiunto
- Added a CCITT Group 3 / Group 4 (T.6) bi-level image encoder unit
PDFlibCCITTEnc(TPLCCITTEncoder), the encoder counterpart to the existingPDFlibCCITTdecoder: it encodes apf1bitbitmap to a CCITT G3 1D / G3 2D / G4 (T.6) byte stream viaCompressImage/Execute, ported from the HotPDF sibling product (both share the losLab license); this supplies the missing encoder so monochrome image data can be produced forCCITTFaxDecodeoutput, with full image-pipeline andRenderPageToMonochromeFileG4-output integration to follow
Version 3.87.0
Aggiunto
- Implemented cryptographic signature verification for detached PKCS#7 signatures:
TPDFlibSignatureVerifier.VerifySignature(previously a stub returningvsUnknown) now recomputes the document digest over the two/ByteRangesegments and validates it against the signedmessageDigestattribute and the signer's public key via the Windows CryptoAPI (CryptVerifyDetachedMessageSignature), returningvsValid/vsInvalidforadbe.pkcs7.detachedandETSI.CAdES.detachedsubfilters; this is the first verification layer and covers digest+signature integrity only (certificate chain, CRL/OCSP revocation and RFC 3161 timestamp-token validation remain out of scope and will be added in later layers)
Version 3.86.0
Aggiunto
- Added a merge-time per-bookmark callback: the
OnMergeOutlineevent fires for each top-level source outline whileMergeFileList/MergeFileListFast/MergeFileListStrictlinks the merged outline tree, letting the caller rename (Title) or drop (Skip=True) an incoming bookmark before it lands in the target document; the callback receives the 0-based source document index so callers can apply per-document policies
Version 3.85.0
Aggiunto
- Added signing from the Windows system certificate store:
SetSignProcessCertFromStoreresolves the signing certificate from a named store ("MY"/"Root"/...) by Subject simple-display name (typically the CN, matched case-insensitively; an empty name picks the first certificate that has a private key) and reuses the existing PKCS#7 sign pipeline, so a document can be signed without supplying a.pfx/.p12file; pair it withSetSignProcessKeysetto chooseCURRENT_USER(1) vsLOCAL_MACHINE(2)
Version 3.84.0
Aggiunto
- Added font program embedding for already-loaded documents:
EmbedMissingFontswalks every Font dictionary, reads the matching installed system font program by BaseFont name and writesFontFile2orFontFile3back, returning the number of fonts that gained a program;EmbedFontProgramembeds a single font by name using the installed system font;EmbedFontProgramFromFileembeds a single font using a caller-supplied.ttfor.otffile for fonts not installed on the system - Added
SetEmbedAllFonts, a writer-side guard that promotesAddTrueTypeFontEmbed=0toEmbed=1so newly created documents cannot accidentally reference non-embedded system fonts outside PDF/A mode as well
Version 3.83.0
Aggiunto
- Aggiunta API di convenienza per il rendering:
RenderPageToMonochromeFileesegue il rendering della pagina in una bitmap monocromatica a 1 bit (per scenari fax/archiviazione/OCR), declassata da 24 bit tramite dithering mezzatinta GDI, senza modificare il core di rendering;RenderPageRegionToFileesegue il rendering solo di un sotto-rettangolo specificato della pagina (“Left,Top,Width,Height”) in una bitmap, collegando la pipeline di ritaglioRenderPageToDCClipprecedentemente scollegata
Version 3.82.0
Aggiunto
- Aggiunta esportazione dei dati del modulo FDF:
ExportFormDataToFDFscrive tutti i nomi e i valori dei campi modulo del documento corrente in un file FDF indipendente (array/Fieldsracchiuso in%FDF-1.2),ExportFormDataToFDFStringrestituisce una stringa con la stessa struttura, semplificando la memorizzazione separata dei dati del modulo dal PDF o la loro unione successiva; i byte non ASCII sono formattati come escape ottale a tre cifre secondo la norma ISO 32000-1
Version 3.81.0
Aggiunto
- Aggiunte API di convenienza per pagine e strutture:
SetPageTransitionscrive effetti di transizione per presentazioni sulla pagina specificata (le 17 transizioni standard di/Trans, incluse Split/Blinds/Wipe/Dissolve/Glitter, ecc.) e la durata della visualizzazione della pagina;GetPageFontCount,GetPageFontIDenumerano i font referenziati da una pagina specificata;SetMeasurementUnitaccetta enumerazioni di unità tipizzate (aggiungendo twip e point ai pixel/millimetri/pollici esistenti), accoppiate con gli helper di conversione delle unitàConvertToPoints,ConvertFromPoints;SaveToFileOptionsusa un record per aggregare le opzioni di salvataggio tra cui compressione, linearizzazione e conservazione della data di modifica
Version 3.80.0
Aggiunto
- Aggiunte API di convenienza per sicurezza e firme:
EncryptFileExaccetta un set di autorizzazioni nominate tipizzate (TPDFlibUserPermissions, che distingue tra stampa a bassa e ad alta risoluzione tra 8 bit di autorizzazione nominati) al posto del numero intero grezzo dei bit di autorizzazione;TPDFlibSignatureVerifier.GetSignatureMetadatalegge direttamente il nome del campo, il Filter, il SubFilter, l’ora della firma, il motivo, la posizione, le informazioni di contatto, il firmatario e verifica la copertura della struttura ByteRange dal dizionario della firma, senza decodifica PKCS#7;PrintDocumentExspecifica il numero di copie e la fascicolazione in una singola chiamata
Version 3.79.0
Aggiunto
- Aggiunte API di convenienza per la modifica:
MaskRectdisegna un rettangolo di riempimento opaco sull’area specificata di una pagina (copertura/redazione);SetPageThumbnailFromFileassocia direttamente/Thumbdella pagina da un file di immagine senza inquinare lo stato di disegno del flusso di contenuti;FlattenFormFieldsOnPageRangeappiattisce tutti i campi modulo in base all’intervallo di pagine specificato (aspetto cotto nei contenuti statici e campi attivi rimossi);InsertAnnotationinserisce un dizionario di annotazioni già creato nella posizione specificata;NewMarkupAnnotationcrea annotazioni di markup evidenziazione/barrato/sottolineato/ondulato in un solo passaggio e scrive punti quad, colore e opacità;StampText,StampImageapplicano filigrane in base all’intervallo di pagine specificato, supportando opacità, angolo di rotazione e posizione di impilamento
Version 3.78.0
Aggiunto
- Aggiunte API per query testuali ed enumerazione di elementi della pagina:
SearchTextcerca i termini della query nell’intervallo di pagine specificato, restituendo ogni numero di pagina con risultato e il rettangolo di delimitazione, supportando opzioni di corrispondenza sensibile alle maiuscole/minuscole e per parola intera;EnumPageElementsenumera tutti i blocchi di testo e gli elementi immagine incorporati in una pagina specificata, restituendo in modo uniforme il tipo di elemento, il rettangolo, il testo, il nome del font e l’ID dell’immagine;GetTextInAreaExè la versione con delimitatore di rettangolo diGetTextInArea, che restituisce ciascun blocco di testo all’interno dell’area e i relativi rettangoli di delimitazione
Version 3.77.0
Aggiunto
- Aggiunte API di introspezione in sola lettura, completando la precedente asimmetria "in grado di scrivere ma non di leggere":
FindOutlineByTitlecerca i segnalibri in base al titolo (supportando tre profondità: solo stesso livello/solo elementi figli/intero sottoalbero),GetOutlineActionInfoeGetAnnotActionInforestituiscono il tipo di azione di un segnalibro o un’annotazione (GoTo/GoToR/URI/Launch/Named/JavaScript) come una struttura tipizzata con URI, JavaScript e carichi utili dei nomi di file,GetOutlineDestinationInforestituisce la pagina di destinazione, il tipo di Fit (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) e le coordinate,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfoenumerano i campi firma e segnalano se sono già firmati
Version 3.76.3
Modificato
- Il profilo Factur-X EXTENDED della demo E-Invoice ora usa il valore di conformance e il guideline ID standard, e la fattura ZUGFeRD 1.0 aggiunge gli elementi di somma
ChargeTotalAmounteAllowanceTotalAmount; tutti i 6 profili ora producono output PDF/A-3b e PDF/A-3u che superano sia veraPDF (conformità PDF/A) sia Mustang (regole di business delle fatture elettroniche)
Version 3.76.2
Corretto
- I metadati XMP delle fatture ibride Factur-X/ZUGFeRD ora dichiarano lo schema di estensione PDF/A (
pdfaExtension:schemas) per descrivere le proprietà di fatturafx:; in precedenza l’assenza di questa dichiarazione faceva sì che il PDF/A-3 generato fosse giudicato non conforme dai validatori come veraPDF
Modificato
- L’XML della fattura della demo E-Invoice ora include gli indirizzi elettronici del venditore e del compratore nonché il telefono del venditore, consentendo a più profili di superare la validazione delle regole di business ZUGFeRD/Factur-X
- Il catalogo dei profili, la costruzione dell’XML e il flusso di generazione PDF/A-3 della demo E-Invoice sono stati estratti in una unit condivisa che sia la GUI sia il nuovo strumento di test del validatore esterno riutilizzano
Version 3.76.1
Corretto
- Corretto un crash al clic su Genera nella demo E-Invoice: i font standard integrati non sono disponibili in modalità PDF/A, quindi la demo ora incorpora un font TrueType per renderizzare la pagina della fattura
Modificato
- La demo E-Invoice rimuove l’opzione PDF/A-3a (raramente usata per le fatture elettroniche), e il profilo XRechnung ora usa PDF/A-3u come impostazione predefinita
Version 3.76.0
Modificato
- La GUI della demo E-Invoice ora è data-driven: numero fattura, data di emissione, compratore e venditore, importo netto, aliquota fiscale e valuta sono modificabili, e l’XML della fattura corrisponde esattamente agli importi visibili della pagina invece di usare contenuti segnaposto fissi
- La demo genera XML di fattura strutturalmente corretto per profilo: Factur-X, XRechnung e ZUGFeRD 2.0 usano la struttura
CrossIndustryInvoice, mentre ZUGFeRD 1.0 COMFORT usa la sua strutturaCrossIndustryDocumentcon righe di dettaglio, totali delle imposte e termini di pagamento - Gli importi sono scritti nell’XML con un formato a punto decimale inglese fisso per evitare che separatori delle migliaia localizzati o virgole rompano lo schema, e l’input dell’utente viene sottoposto a escape prima della scrittura
- La demo aggiunge un’anteprima XML live, autoverifiche dei contenuti a livello di profilo, l’analisi del report di validazione esterno
.validation.jsoncon lo stesso nome, e carica esplicitamente l’intent di output ICC sRGB del repository in fase di generazione
Version 3.75.6
Aggiunto
SetPDFAModeaggiunge la modalità7, che consente metadati PDF/A-3u e continua a permettere file associati PDF/A-3; la demo GUI E-Invoice offre anche un'opzione PDF/A-3u e il profilo ZUGFeRD 2.0 BASIC usa PDF/A-3u per impostazione predefinita
Version 3.75.5
Aggiunto
- Aggiunge una demo GUI Delphi E-Invoice che consente di scegliere profili Factur-X, ZUGFeRD e XRechnung, generare fatture ibride PDF/A-3, incorporare il nome file XML e il guideline ID corrispondenti, eseguire la validazione del contenitore nell'interfaccia e mostrare informazioni fattura XMP, problemi di validazione e XML estratto
Version 3.75.4
Aggiunto
- Aggiunge il supporto per file associati PDF/A-3 e XML di fattura elettronica:
AddPDFA3AssociatedFileFromStringpuò creare file associati Catalog/AFdirettamente da byte in memoria,AddFacturXAssociatedFileFromStringpuò scrivere XML Factur-X, ZUGFeRD e XRechnung, sincronizzare metadati XMP e validare la combinazione di nome file, profilo, namespace XMP e guideline ID XML, mentre il lato lettura aggiunge API di rilevamento, validazione, elenco problemi ed estrazione XML
Version 3.75.3
Corretto
- Funzione di unione PDF: le variabili locali
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumeStructRootGlobalGenNumvenivano assegnate solo all'interno di blocchi condizionali, causando avvisi W1036 “la variabile potrebbe non essere inizializzata” nei compilatori Delphi Win64 26 e 29 (RAD Studio 12 e 16); aggiunta l'inizializzazione a zero all'ingresso della funzione
Version 3.75.2
Corretto
- Compatibilità di build multi-versione: il ciclo
fornel parser delle stringhe esadecimali (PDFlibStruct) usava una variabile di controlloInt64, che Delphi XE3/XE5 (compilatori 26/27) rifiutano come non ordinale; riscritto come cicloWhileper ripristinare la compatibilità con RAD Studio 12 e 14 - Controllo di Reference XObject (
PDFlibPDFUA): il puntatore al dizionarioDnon veniva inizializzato nel ramo non-stream/non-dictionary, causando un hint del compilatore su tutte le piattaforme; ristrutturato il ramo in modo da assegnare sempreDprima del controlloAssigned CreateFontPackagewrapper (PDFlibFont): soppresso il falso W1035 “return value might be undefined” su Delphi ≤ XE8, evitando al tempo stesso il corrispondente hint H2077 di assegnazione morta sui compilatori più recenti, tramite il guard{$IF CompilerVersion}- Writer DPI BMP e percorso di salvataggio incrementale PDF: sostituite le chiamate deprecate a
TStream.Seek(Longint, Word)con assegnazioniPosition :=(PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Corretto
- Parser TIFF multi-pagina: il guard di terminazione del ciclo contro conteggi di pagine eccessivamente grandi era inefficace perché
FPageCountera dichiarato comeWord(massimo 65 535), rendendo il confronto> 65535sempre falso; cambiato inIntegercosì il guard ora scatta correttamente sui file patologici - Parser charset CFF/Type 2 (Formato 1 e Formato 2): rimosse le assegnazioni morte
Done := Trueche precedevano immediatamente unBreake quindi non venivano mai lette, eliminando gli hint del compilatore
Version 3.75.0
Sicurezza
- Rafforzato il parsing dei font incorporati non affidabili (TrueType, Type 1, CFF e CMap) contro scritture fuori dai limiti, ricorsione illimitata delle stringhe di caratteri e allocazioni di memoria eccessive da dati di font malformati
- Rafforzati i decodificatori di immagine (PNG, GIF, TIFF, JBIG2 e CCITT Group 3 e 4) contro letture e scritture fuori dai limiti, overflow intero nei calcoli di larghezza e altezza e dereferenziazioni di palette vuota da immagini malevole
- Rafforzati i filtri di stream (LZW, ASCII85 e predittori Flate) contro letture oltre il buffer, divisione per zero e cicli non terminanti su dati di stream costruiti ad arte
- Rafforzato il parsing di cross-reference, ricostruzione documento e name tree contro accessi fuori dai limiti e cicli infiniti causati da dati cross-reference malformati o circolari
- La decrittazione AES-CBC ora valida l'allineamento dei blocchi del ciphertext e inizializza a zero il buffer di output, impedendo che memoria heap non inizializzata trapeli in stringhe e stream decrittati
Corretto
- I digest delle firme staccate SHA-256, SHA-384 e SHA-512 vengono ora prodotti con il provider crittografico corretto; in precedenza restituivano un digest vuoto e generavano firme non valide
- La decodifica ASCII85 e RC4 non restituisce più dati non inizializzati né solleva eccezioni su input troncato o su una chiave vuota
- Il colore di sfondo GIF ora viene letto con il canale blu corretto invece di duplicare il canale verde
Version 3.74.1
Corretto
- Risolto un errore di compilazione E2010 di tipi incompatibili nel supporto ai dati di validazione firme PAdES (VRI) che impediva la compilazione della libreria
- Rimossi l'ultimo avviso del compilatore e gli hint di variabile non utilizzata; tutte le build trial e release delle librerie Win32 e Win64 ora compilano senza avvisi
Version 3.74.0
Aggiunto
- I percorsi diretti di
EncryptFileeDecryptFileora leggono PDF i cui dati di cross-reference risiedono in cross-reference stream, incluse catene aggiornate incrementalmente e file hybrid-reference con una sezione laterale/XRefStm, invece di ripiegare sul lettore completo più lento: la protezione AES-256 di un documento di benchmark da 1.25 GB è scesa da circa 4.4 a 2.5 secondi e la decrittazione da circa 1.7 a 1.3 secondi - Le riscritture che portano oggetti memorizzati in object stream compressi ora emettono un trailer di cross-reference stream, mantenendo quegli oggetti indirizzabili nell'output cifrato o decrittato
Corretto
- Una revisione senza un
/IDdel documento in un file aggiornato incrementalmente non cancella più l'identificatore ereditato da una revisione precedente durante una riscrittura diretta
Version 3.73.2
Modificato
DASaveAsFileora aggrega le scritture di output e individua la keyword di chiusura di ogni oggetto senza allocazioni di stringhe a ogni passo, riducendo la riscrittura di un documento di benchmark da 2 GB con oltre un milione di oggetti da circa 57 a 11 secondi
Version 3.73.1
Modificato
- I percorsi diretti di
EncryptFileeDecryptFileora leggono la sorgente attraverso una finestra scorrevole e aggregano le scritture di output, così la protezione AES-256 di PDF molto grandi con milioni di oggetti gira parecchie volte più veloce: su un documento di benchmark da 2 GB, la cifratura è scesa da circa 123 a 32 secondi e la decrittazione da circa 127 a 23 secondi - I corpi degli oggetti che rientrano nella finestra di lettura non vengono più recuperati due volte dal disco durante una riscrittura diretta AES-256
Corretto
- Le riscritture dirette AES-256 di PDF hybrid-reference (file che portano una voce trailer
/XRefStm) ora tornano al lettore completo invece di rischiare di perdere oggetti compressi - Il parsing della cross-reference nel percorso diretto non legge più tutto in una volta dalla sezione di cross-reference fino alla fine del file, cosa che poteva esaurire la memoria su file multi-gigabyte la cui catena
/Prevpunta vicino all'inizio del file, e una catena/Prevrotta ora torna al lettore completo invece di produrre un documento incompleto
Version 3.73.0
Aggiunto
- La demo SigningWorkbench ora esegue la verifica completa del digest crittografico delle firme CMS staccate (
adbe.pkcs7.detachedeETSI.CAdES.detached) tramite Windows CryptoAPI: gli intervalli di byte firmati vengono ricalcolati e confrontati con la firma CMS, un documento alterato viene segnalato con il nuovo codice di errore SG203 e ogni firma include un campo a tre statidigestValidnei report JSON, CSV e HTML - Nuovi switch di automazione per SigningWorkbench:
--quietstampa solo il riepilogo batch e i percorsi dei report,--fail-fastinterrompe il batch al primo file fallito e il report JSON ora registra la versione della libreria
Version 3.72.0
Aggiunto
- La demo ComplianceWorkbench acquisisce flussi di lavoro batch professionali:
--policy-filecarica la policy di audit da un file JSON così i team possono versionare e condividere le regole dei documenti,--baselineconfronta l'esecuzione con un precedente compliance-report.json ed elenca i nuovi errori, i file corretti e quelli che continuano a fallire, e--preflight-detailsincorpora le righe dei problemi di preflight nei report JSON e HTML - Nuovi switch di automazione per ComplianceWorkbench:
--quietstampa solo il riepilogo batch e i percorsi dei report,--fail-fastinterrompe il batch al primo file fallito e il report JSON ora registra la versione della libreria
Version 3.71.2
Corretto
AppendToFiletorna ad aggiungere aggiornamenti incrementali allo stesso file PDF caricato conLoadFromFile; il loader in streaming ora mantiene il file sorgente leggibile senza bloccare l'handle di scrittura necessario per l'aggiornamento
Version 3.71.1
Aggiunto
- I report di ComplianceWorkbench e SigningWorkbench ora includono etichette di gravità delle segnalazioni, campi di gravità massima per file, riepiloghi di frequenza della gravità del batch e output corrispondenti JSON, CSV, HTML e console per una triage delle policy più rapida
Version 3.71.0
Aggiunto
- La demo SigningWorkbench in fase di ispezione ora riporta l'ordine delle revisioni e il livello di certificazione DocMDP di ogni firma, segnala i deboli algoritmi di firma del certificato MD5/SHA-1 e il legacy SubFilter adbe.pkcs7.sha1 con
--forbid-weak-digest(SG303/SG405), i certificati autofirmati con--forbid-self-signed(SG406), i documenti senza firma di certificazione con--require-certified(SG304) e controlla sempre se l'orario di firma cade all'interno del periodo di validità del certificato (SG407) - La modalità di firma di SigningWorkbench ora usa la sign process API con i nuovi switch
--subfilter(sha1, detached o cades per le firme baseline PAdES) e--digest(auto fino a sha512), e il modernoadbe.pkcs7.detachedcon SHA-256 è il nuovo valore predefinito di firma - Il nuovo accessore di sola lettura
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamerestituisce il livello di certificazione DocMDP di un campo firma secondo ISO 32000-1 §12.8.2.2
Version 3.70.0
Aggiunto
- La demo ComplianceWorkbench ora applica anche policy su autorizzazioni, metadati e dimensioni:
--require-print-allowede--require-copy-allowedverificano i bit di autorizzazione del documento (PC205/PC206),--require-authore--require-creation-dateverificano la completezza dei metadati (PC306/PC307), e--max-pagese--max-file-sizelimitano la scala del documento (PC308/PC309) - Il profilo archive richiede ora anche un autore e una data di creazione, e il profilo accessible richiede l'autorizzazione alla copia su cui si basa la tecnologia assistiva
- I report di ComplianceWorkbench ora aggregano un riepilogo di frequenza dei codici di errore sull'intero batch e le metriche per file includono autore, data di creazione, dimensione del file e stati di autorizzazione di stampa e copia
Version 3.69.1
Corretto
DecryptFilerimuove di nuovo la cifratura dai documenti protetti AES-128 e RC4, inclusi i documenti che portano solo una password del proprietario; da v3.67.4 il percorso rapido per file grandi segnalava erroneamente questi documenti come se avessero una password errata (errore 404) invece di passarli al percorso di decrittazione regolare, mentre i documenti AES-256 non erano interessati
Version 3.69.0
Aggiunto
- Nuova demo Delphi SigningWorkbench: uno strumento console di workbench per firme e certificati che ispeziona i campi firma di un PDF o di un'intera directory (SubFilter, signing time, ByteRange coverage e certificato di firma con controlli di scadenza), firma in batch PDF con un certificato PKCS #12 e analizza i file PFX; ogni violazione è mappata a un codice di errore policy stabile (SG101–SG501) e i risultati sono scritti come report JSON, CSV e HTML con guide demo localizzate per tutte le 18 lingue della documentazione
- Nuovi accessor di sola lettura firma su
TPDFlibSignDoc:GetSignatureFieldNameselenca i campi firma di un documento,GetSignatureTextValueByNamerestituisce gli elementi /M signing time, /Name, /Reason, /Location, /ContactInfo e /Type (con decrittazione sui documenti cifrati), eGetSignatureValueByNamerestituisce /Filter, /SubFilter, /Contents e gli elementi ByteRange per nome campo
Corretto
- Risolto l'import Windows CryptoAPI di
CertCloseStore, che era dichiarato senza il parametro flags e poteva corrompere lo stack del chiamante su Win32 quando veniva chiuso un archivio certificati
Version 3.68.0
Aggiunto
- Nuova demo Delphi ComplianceWorkbench: uno strumento console per l'audit batch delle policy che controlla un PDF o un'intera directory rispetto a una policy di conformità configurabile che copre preflight PDF/A e PDF/UA, regole di cifratura, intervallo di versione PDF, Tagged PDF, linearization e titolo del documento, segnala ogni violazione come un codice di errore policy stabile (PC101–PC501) e scrive report JSON, CSV e HTML con codici di uscita adatti all'automazione
- La nuova demo include profili policy che raggruppano insiemi di requisiti comuni—archive, accessible, secure e web—con switch espliciti da riga di comando che sovrascrivono i valori del profilo, e include guide demo localizzate per tutte le 18 lingue della documentazione
Version 3.67.4
Modificato
EncryptFileeDecryptFileora usano un percorso di riscrittura diretta AES-256 per i PDF classic-xref di grandi dimensioni, trasmettendo i dati cifrati tra i file invece di caricare e riserializzare ogni oggetto; un file benchmark da 2 GB ora completa la cifratura e decrittazione AES-256 da file a file tramite la Direct File API con codice risultato 1 eLastErrorCode0
Corretto
- Risolta la gestione diretta dei token di stringa AES-256 in modo che i delimitatori del dizionario non vengano scambiati per stringhe esadecimali e le stringhe vuote cifrate si decrittino correttamente
Version 3.67.3
Modifiche
- Le demo Delphi e C++Builder per DrawShapes, CreateWithImage, CreateTable, EditFormField ed EmbeddedFonts sono state ampliate, così i PDF generati ora mostrano flussi di lavoro pratici per disegno, posizionamento delle immagini, layout delle tabelle, stile dei campi modulo e confronto dell'incorporamento dei font invece di un output minimo a singola azione
Correzioni
- La demo CreateTable ora imposta una dimensione pagina A4 esplicita prima di renderizzare la tabella, evitando la precedente variabile di dimensione pagina non inizializzata nell'esempio Delphi
Version 3.67.2
Corretto
- Corretta una regressione della rilevazione lazy lato loader introdotta in v3.67.0: la rilevazione delle funzionalità del contenuto poteva eseguirsi durante il salvataggio e sovrascrivere una versione di salvataggio richiesta esplicitamente (SetInformation 0) o una versione bloccata (LockSaveVersion), quindi un salvataggio rigoroso verso una versione inferiore non rifiutava più contenuto di versione superiore e una versione bloccata poteva salire; ora la rilevazione viene eseguita prima di qualsiasi versione impostata esplicitamente e non viene mai eseguita sui documenti creati invece che caricati, ripristinando il comportamento di controllo versione precedente a v3.67.0 mantenendo i risparmi del caricamento lazy
Version 3.67.1
Modificato
- La rilevazione delle funzionalità ora legge gli oggetti stream con un parsing superficiale che ispeziona solo il dizionario dell’oggetto e salta il corpo dello stream, poiché la scansione non esamina mai il contenuto degli stream; nei documenti con grandi stream di immagini questo evita la lettura dei byte del corpo durante la rilevazione, riducendo il tempo di lettura degli oggetti di una passata di rilevazione di circa il 40% (circa 13 s invece di 20 s su un file da 2 GB con 1,6 milioni di oggetti), mentre l’elenco delle funzionalità rilevate e la versione PDF effettiva rimangono identici
Version 3.67.0
Modificato
- Il rilevamento delle caratteristiche del contenuto lato caricatore è ora differito (lazy) – invece di analizzare l''intero documento durante il caricamento, viene eseguito al primo utilizzo, quando si interroga la versione PDF effettiva o l''elenco delle caratteristiche rilevate oppure quando il documento viene salvato; le operazioni di sola lettura come il conteggio delle pagine, l''estrazione di testo o immagini e il rendering che non interrogano mai la versione né salvano di nuovo saltano completamente la scansione, riducendo il tempo di caricamento dei documenti molto grandi di circa l''80% (circa 10 s invece di 56 s su un file da 2 GB con 1,6 milioni di oggetti), mentre l''insieme delle caratteristiche rilevate e la versione PDF effettiva rimangono identici una volta eseguito il rilevamento
Version 3.66.1
Modificato
- Il caricamento di documenti molto grandi e multipagina è ora notevolmente più veloce: il rilevamento delle caratteristiche del contenuto lato caricatore salta i controlli delle regole che non possono cambiare il risultato – sia le regole già soddisfatte sia quelle non applicabili a un determinato oggetto – dimezzando all'incirca il tempo di caricamento dei file enormi e mantenendo identiche le caratteristiche rilevate e la versione PDF effettiva
Version 3.66.0
Modificato
- Il caricamento di documenti multipagina molto grandi utilizza ora un picco di memoria nettamente inferiore. Il rilevamento delle caratteristiche del contenuto lato caricatore non materializza più l'intero modello di oggetti in una sola volta – legge gli oggetti uno alla volta attraverso il lettore ad accesso casuale – riducendo il working set di picco di circa il 90 % su file enormi, mantenendo invariate le caratteristiche rilevate e la versione PDF effettiva.
Version 3.65.0
Aggiunto
- Ora è possibile aprire documenti di oltre 2 GB. Il precedente buffer in memoria che limitava la dimensione del documento a circa 2 GB è stato rimosso.
Modificato
- Durante il caricamento di un PDF da file, i dati degli oggetti vengono ora letti su richiesta dalla sorgente anziché bufferizzare l'intero documento in memoria, riducendo notevolmente il picco di utilizzo della memoria con file di grandi dimensioni.
- Un documento caricato da file mantiene quel file aperto con accesso in lettura condivisa finché il documento non viene chiuso o svuotato.
Corretto
- Maggiore robustezza durante il caricamento di documenti che contengono byte iniziali prima dell'intestazione %PDF- e nella gestione di dati cross-reference non validi.
Version 3.64.0
Modificato
- Le operazioni dell'API Direct su PDF molto grandi o con molti oggetti – EncryptFile, DecryptFile e DASaveAsFile – sono ora notevolmente più veloci e non si bloccano più. Un documento da 2 GB con circa 1,6 milioni di oggetti che in precedenza non riusciva a completarsi viene ora cifrato in circa un minuto e il tempo di elaborazione cresce in modo pressoché lineare con il documento anziché crollare all'aumentare del numero di oggetti.
- La cifratura di documenti di grandi dimensioni è notevolmente più veloce – un'operazione che in precedenza richiedeva molti minuti ora si completa in pochi secondi fino a circa un minuto – senza modifiche alla robustezza della cifratura, alla compatibilità del testo cifrato o all'output.
Version 3.63.0
Corretto
- Corretto un arresto anomalo del processo durante il caricamento di file PDF di grandi dimensioni i cui offset di byte interni superano il limite a 32 bit (circa 2 GB); il caricatore ora usa offset a 64 bit ovunque, così i file vicini a 2 GB si caricano in modo affidabile e i file di 2 GB o oltre segnalano un errore di caricamento correttamente invece di andare in crash.
Version 3.62.0
Modificato
- La cifratura e la decifratura AES-256-CBC ora seguono il percorso AES-NI con accelerazione hardware anche su Windows a 32 bit, non solo a 64 bit, mantenendo il ripiego automatico all'implementazione C portabile sui processori privi di AES-NI. Il testo cifrato rimane invariato su ogni piattaforma.
Version 3.61.0
Modificato
- La cifratura e la decifratura AES-256-CBC ora utilizzano un backend AES-NI con accelerazione hardware su Windows a 64 bit, con ripiego automatico all'implementazione software portabile sui processori privi di AES-NI. Il testo cifrato è identico su ogni piattaforma; cambia solo la velocità della cifratura PDF AES-256 basata su password.
Version 3.60.0
Aggiunto
MergeFileListora unisce gli alberi della struttura logica (Tagged PDF) dei documenti di input in un unico albero di struttura raggiungibile, anziché conservare solo l'albero del primo documento e lasciare gli altri come oggetti irraggiungibili. Gli elementi di struttura di primo livello, il parent tree (con le chiavi di pagina/StructParentse di annotazione/StructParentrimappate),/RoleMap,/ClassMape/IDTreevengono combinati e il catalogo unito viene contrassegnato come Tagged (/MarkInfo /Marked true).
Modificato
- Unendo documenti con chiavi
/RoleMap,/ClassMapo/IDTreein conflitto viene mantenuta la prima occorrenza. Il percorso veloce (MergeFileListFast) continua a scartare le informazioni di struttura.
Version 3.59.0
Modificato
MergeFileListora unisce i documenti in un'unica passata (O(N) anziché O(N²)), velocizzando notevolmente l'unione di molti file; inoltre acquisisce l'unione dei segnalibri multidocumento aggiunta al percorso rapido.- Per impostazione predefinita,
MergeFileListora ignora i file di input illeggibili o crittografati e prosegue l'unione dei restanti, anziché interrompere l'intera operazione al primo file danneggiato. Usa il nuovoMergeFileListStrictper ripristinare il comportamento precedente di arresto al primo errore. - Gli oggetti della struttura logica (Tagged PDF) provenienti dagli input vengono ora conservati da
MergeFileList(il percorso rapido continua a scartarli).
Aggiunto
MergeFileListStrictunisce un elenco di file ma si ferma al primo file illeggibile o crittografato, mantenendo la semantica rigorosa di arresto in caso di errore delle versioni precedenti.
Version 3.58.0
Aggiunto
MergeFileListFastora unisce i segnalibri (struttura) del documento di tutti i file di input, in modo che il percorso di unione rapida conservi i segnalibri oltre ai campi modulo AcroForm.- I segnalibri uniti mantengono la loro gerarchia e le destinazioni di pagina; il numero di segnalibri di primo livello dell'output unito è uguale alla somma degli input.
Version 3.57.1
Modificato
- Il salvataggio tramite Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) è ora molto più veloce sui documenti di grandi dimensioni: gli oggetti non modificati vengono copiati direttamente dai byte di origine invece di essere rianalizzati e riserializzati. Risalvare un documento di 60.000 pagine / 883 MB è sceso da circa 33 secondi a circa 23 secondi.
Version 3.57.0
Modificato
- Ulteriore ottimizzazione di
TPDFlib.MergeFileListFastper le fusioni di più documenti: gli oggetti non modificati senza stream nei documenti aggiunti vengono ora riutilizzati direttamente dai loro byte sorgente originali con uno spostamento di riferimento indiretto a livello di byte, saltando il ciclo analisi/riserializzazione e migliorando la velocità nei documenti multipagina. L'output di fusione rimane invariato, con conteggi di pagine identici. - Gli oggetti che contengono stream o appartengono all'albero struttura continuano a utilizzare il percorso di decodifica esistente, quindi il percorso byte più veloce viene applicato solo dove è provabilmente sicuro.
Version 3.56.44
Modificato
TPDFlib.MergeFileListFastè stato ottimizzato preallocando i metadati di unione e scrivendo gli oggetti invariati del primo documento dai dati sorgente originali, riducendo la pressione sulla memoria e il lavoro evitabile di decodifica/output degli oggetti nelle unioni rapide di più file.- La GUI Delphi
MergePDFora raggruppa la registrazione dei risultati in modalità rapida ed evita scansioni ripetute dell’intero testo del memo, mantenendo più reattive le liste di input grandi dopo il completamento dell’unione.
Version 3.56.43
Modificato
- Ottimizzato il percorso di unione ordinario di
TPDFlib.MergeFileListalternando i file temporanei intermedi invece di copiare il PDF unito in crescita prima di ogni input aggiuntivo, riducendo l'I/O su disco nei flussi con più file e mantenendo il contratto esistente del conteggio restituito.
Version 3.56.42
Aggiunto
- Aggiunta copertura di regressione AES per i casi in cui buffer di input e destinazione del risultato coincidono durante il ripristino degli stream cifrati in fase di salvataggio, inclusi payload grandi da 504 KB che prima esponevano il problema.
Modificato
- Il flusso dell'API normale
LoadFromFile,Encrypt,SaveToFile, ricaricamento,DecrypteSaveToFileora si completa di nuovo su PDF grandi già caricati, mantenendo l'ottimizzazione di decifratura AES-CBC con copia ridotta.
Corretto
- Corretto il percorso di decifratura AES-256 basato su buffer introdotto in v3.56.41, così i chiamanti possono assegnare il risultato della decifratura allo stesso
AnsiStringche ha fornito il buffer del testo cifrato senza violazioni di accesso.
Version 3.56.41
Aggiunto
- Aggiunto
TPDFlib.DACopyFileper workflow Direct Access che richiedono il conteggio delle pagine e una copia invariata del file senza costruire il grafo completo degli oggetti normali. - La demo Delphi
HugeFileBenchmarkora include una rigadirect-copye i filtri--opse--skipper esecuzioni mirate su file di grandi dimensioni.
Modificato
- Ottimizzata la decodifica AES-256 aggiungendo percorsi AES-CBC basati su buffer e usandoli durante la decodifica di stringhe e stream caricati, riducendo copie aggiuntive del testo cifrato nei grandi stream cifrati.
Version 3.56.40
Modificato
- Le demo
HelloWorldDelphi e C++Builder ora creano un PDF iniziale piu ricco con informazioni del documento, output con un font standard selezionato, blocco titolo stilizzato, semplice disegno vettoriale e indicazioni sui passi successivi, mantenendo lo stesso flusso di compilazione ed esecuzione. - Tutte le note delle demo Delphi e C++Builder sono state sostituite con pagine
Readme.htmladatte al browser, incluse le note ausiliarie per password, file con restrizioni e risultati di firma; gli indici delle demo ora indirizzano gli utenti alle note HTML.
Version 3.56.39
Modificato
- I percorsi di salvataggio della API file diretta ora costruiscono le tabelle di ricerca dei riferimenti incrociati in modo lineare, rendendo
DASaveAsFilee i percorsi di salvataggio diretto correlati molto più veloci sui PDF con moltissimi oggetti o alberi di pagine densi. - Il writer ottimizzato conserva la stessa semantica della catena degli oggetti liberi ed evita scansioni ripetute dei numeri di oggetto durante la generazione completa di xref, migliorando i grandi flussi di salvataggio diretto senza modificare la API pubblica o il contratto di output.
Version 3.56.38
Modificato
- Il flusso dell'API normale
LoadFromFile,Encrypt,SaveToFile, ricaricamento,DecrypteSaveToFileora preserva lo stato crittografato prima delDecryptesplicito, allineandosi al comportamento dell'API di accesso diretto ai file per i grandi PDF legacy.
Corretto
- Corretta l'uscita di crittografia dell'API normale in modo che
Encryptcrei o conservi il trailer/IDprima di scrivere i dati di sicurezza AES-256, mantenendo i PDF crittografati rilevabili al ricaricamento tramiteEncryptionStatus.
Version 3.56.37
Aggiunto
- Aggiunto
TPDFlib.ComparePreflightReports, un comparatore riga per riga per report di preflight in testo semplice che ignora le righe temporali volatiliGenerated:e restituisce una stringa vuota quando il contenuto stabile del report corrisponde. - La demo Delphi
PreflightReportora supporta--compare <file>in modalita file singolo, scrive un report UTF-8.diff.txte restituisce il codice di uscita 2 quando il report di testo generato differisce dalla baseline.
Version 3.56.36
Aggiunto
- La demo Delphi
PreflightReportora supporta esecuzioni batch su directory con--input-dir,--output-dire--recursive, scrivendo un report per ogni PDF come<basename>.preflight.<ext>.
Modificato
- La modalita batch scrive un file UTF-8
preflight-summary.csvche registra ogni PDF sorgente, lo stato pass/fail, il numero di problemi e il percorso del report generato, mantenendo il contratto dei codici di uscita esistente per l'automazione.
Version 3.56.35
Aggiunto
ReportFormat = 3aggiunge l'output CSV aTPDFlib.CreatePreflightReportExeTPDFlib.SavePreflightReportEx, producendo righe UTF-8 per i metadati del report, ogni controllo di conformita selezionato, i singoli codici e messaggi dei problemi e il riepilogo finale.- La demo Delphi
PreflightReportora supporta--format csve--csv, cosi le esecuzioni preflight da riga di comando possono alimentare fogli di calcolo o semplici parser CI senza post-elaborare JSON o estrarre testo.
Version 3.56.34
Aggiunto
- Aggiunte le API sensibili al formato
TPDFlib.CreatePreflightReportExeTPDFlib.SavePreflightReportExper generare report preflight PDF/A e PDF/UA-1 come testo semplice, JSON o HTML autonomo, mantenendo le API esistenti solo testuali. - La demo Delphi
PreflightReportora supporta--format text|json|htmle le scorciatoie--jsone--html, così lo stesso flusso da riga di comando può produrre report leggibili o artefatti CI leggibili da macchina.
Version 3.56.33
Aggiunto
- Aggiunti
TPDFlib.CreatePreflightReporteTPDFlib.SavePreflightReportper consentire alle applicazioni di generare report di testo riutilizzabili dai controlli integrati di conformità PDF/A e PDF/UA-1 senza enumerare manualmente gli handle delle liste di stringhe.
Modificato
- La demo Delphi
PreflightReportora chiama direttamente le API di report della libreria, mantenendo l'esempio focalizzato sul flusso da riga di comando, sui controlli selezionati, sulla modalità primo problema e sui codici di uscita adatti all'automazione.
Version 3.56.32
Aggiunto
- Aggiunto un nuovo esempio console Delphi
PreflightReportche esegue controlli PDF/A e PDF/UA-1 conCheckFileCompliance, enumera gli elenchi di problemi conGetStringListCounteGetStringListIteme scrive un report di preflight in testo semplice.
Modificato
- L'esempio supporta le opzioni
--input,--output,--pdfa,--pdfua,--bothe--first-issue, oltre a codici di uscita adatti all'automazione per esito positivo, problemi trovati ed errore di runtime.
Version 3.56.31
Modificato
GetCustomKeys(2)ora nasconde in modo coerente le voci del sistema Catalog gestite dalla libreria, inclusi/OutputIntents,/Extensions,/Requirements,/Collectione/NeedsRendering.
Corretto
- Gli intenti di output PDF/A creati da
SetPDFAModenon vengono più visualizzati come chiavi personalizzate nel catalogo, mantenendo la separazione tra l'enumerazione dei metadati dell'applicazione e le strutture di conformità PDF.
Version 3.56.25
Modificato
- Il modulo di scrittura GetPDFUADiagnostics risolve il problema corrispondente
MULTIPLE-H-CHILDREN:N, raggiungendo la parità con il modulo di lettura10044a partire dalla versione v3.56.24. ISO 14289-1 §7.4.4 impedisce che un nodo dell'albero dei tag abbia più di un figlio diretto H; il controllo sul lato della scrittura viene eseguito ogni volta che l'albero FStructElems in memoria contiene una violazione di questo tipo. - Un nuovo helper nidificato CountMultipleHChildren percorre l'albero in profondità, contando i figli H a ogni livello. Il controllo viene eseguito insieme alle percorse esistenti LIST-STRUCT / LIST-NO-NUMBERING e condivide lo stesso schema di attraversamento FStructElems.
Version 3.56.24
Modificato
- Il controllo PDF/UA-1 aggiunge un controllo di unicità dei tag H ISO 14289-1 §7.4.4.
10044segnala qualsiasi nodo della struttura che abbia più di un figlio diretto H —, in quanto la specifica lo vieta nei documenti con struttura fortemente definita, e la stessa restrizione si applica a qualsiasi nodo dell'albero dei tag, indipendentemente dalla modalità di struttura complessiva. L'altra sezione § 7.4.4 SHALL (un documento deve essere o fortemente o debolmente strutturato, non entrambi) richiede euristiche a livello di documento ed è intenzionalmente esclusa da questo controllo. - Un nuovo algoritmo di attraversamento dell'albero della struttura (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) conta i figli H diretti per nodo e ricorsivamente in profondità. Riutilizza lo stesso decoder a forma di K degli algoritmi esistenti per intestazioni / elenchi / note.
Version 3.56.23
Aggiunto
- Il nuovo
Lib/PDFlibPDFUAFontInspect.pasimplementa un walker tollerante per la directory della tabella e un parser per la directory delle sottotabelle cmap. La tabella Adobe Glyph List con 4281 nomi, aggiunta come scaffolding nell'ultimo commit dell'infrastruttura, è ora integrata tramite il controllo delle Differenze. I programmi che non vengono analizzati come SFNT (programma di font PFB / PFA, OpenType collezione, spazzatura arbitraria) vengono ignorati silenziosamente; i falsi negativi sono preferiti ai falsi positivi a livello di audit.
Modificato
- L'audit PDF/UA-1 ora include due controlli sui programmi di font ISO 14289-1 §7.21.6 che i controlli a livello di dizionario di v3.56.10 dovevano rimandare fino alla disponibilità di un parser TrueType.
10034segnala programmi TrueType non simbolici i cui cmap incorporati contengono solo l'entry simbolica (platformID=3, encodingID=0) — §. Il primo paragrafo della versione 7.21.6 richiede almeno una sottotabella cmap non simbolica affinché il programma possa renderizzare i codepoint dichiarati dal suo /Encoding..10035segnala array TrueType non simbolici i cui nomi di glifi non sono membri dell'Adobe Glyph List (.notdefescluso) — §. Il terzo paragrafo della versione 7.21.6 richiede che ogni entry di Differenze sia presente in AGL.
Version 3.56.22
Modificato
- L'audit PDF/UA-1 ora include controlli sui dati dei clip multimediali ISO 14289-1 §7.18.6.
10042segnala dizionari di dati dei clip multimediali (identificati da/S /MCD, opzionalmente/Type /MediaClip) che mancano dell'entry obbligatoria/CTcontent-type.10043segnala gli stessi dizionari che mancano dell'array obbligatorio/Alt. ISO 32000-1 La tabella 274 elenca entrambe le chiavi come opzionali, ma ISO 14289-1 §7.18.6 le promuove a obbligatorie in modo che i lettori di schermo possano annunciare una descrizione significativa per i contenuti multimediali incorporati. - Questa è la Fase 6 del piano di audit approfondito PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Funziona senza alcuna dipendenza dal parser del programma di font o dello stream di contenuto, quindi è la prima sottoclasse successiva alla serie v3.56.0..v3.56.13.
Version 3.56.21
Aggiunto
- Nuovo
SetSignProcessCommitmentTypeemette l'attributo firmato CAdEScommitment-type-indication(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) all'interno del percorso PAdES-B-B SignerInfo. Accetta codici interi da 1 a 6 che corrispondono ai noti schemi di impegno ETSI OIDsid-cti-ets-proofOfOrigintramiteid-cti-ets-proofOfCreation; passare 0 per cancellare. I codici fuori intervallo vengono rifiutati. - Nuovo
SetSignProcessSignaturePolicyemette l'attributo firmato CAdESsignature-policy-identifier(OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Richiede la policy in formato decimale con punti, l'hash del documento di policy come stringa esadecimale maiuscola e un codice di algoritmo di digest (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). L'attributo trasporta ilSignaturePolicyIdSEQUENCE consigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE).
Modificato
- Entrambi gli attributi hanno effetto solo quando SubFilter è
ETSI.CAdES.detached(il percorso PAdES-B-B); estendono l'arrayrgAuthAttresistente insieme acontent-typeesigning-certificate-v2. La riga d) della PAdES Tabella 1 vieta di combinarecommitment-type-indicationcon la voce del dizionario delle firme PDF/Reason; il chiamante è responsabile di non impostare entrambi.
Version 3.56.20
Aggiunto
- Il nuovo
AddPAdESDSSVRIaggiunge una voce di sottodizionario VRI all'oggetto DSS che viene assemblato, completando la struttura ETSI EN 319 142-1 v1.2.1 della sezione 5.4.2.3 Informazioni relative alla validazione. La voce è identificata dalla chiave SHA-1 in maiuscolo esadecimale dei byte della firma '; i suoi sotto-arrayCert/CRL/OCSPvengono popolati facendo riferimento ai corrispondenti stream padre ⟦P0011⟧ tramite indici basati su zero forniti come elenchi separati da virgole (ad esempio,"0,2,5").
Modificato
- Il
TSmartPDFDocument.AddPAdESDSSWithVRIsottostante tiene traccia dei numeri di oggetto stream emessi per ogni certificato / CRL / OCSP e li utilizza per scrivere i sotto-array VRI come riferimenti indiretti agli stessi stream a cui i sotto-array padre DSS puntano già, soddisfacendo il requisito della specifica secondo cui le voci VRI condividono lo spazio di archiviazione con il dizionario padre DSS. Il punto di ingresso originaleAddPAdESDSScontinua a funzionare inalterato per le applicazioni che non necessitano di VRI. - Ogni sottodizionario VRI per firma contiene il marcatore opzionale
/Type /VRI, in modo che gli strumenti che analizzano il catalogo per tagTypepossano riconoscere la struttura senza dover risolvere nuovamente il percorso padre.
Version 3.56.19
Aggiunto
- Nuovo flusso di lavoro PAdES-B-T per collegare una firma RFC 3161 / RFC 5816 con timestamp (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) a una firma PAdES-B-B esistente.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringapre una firma PDF,SetPAdESSignatureTimeStampFieldnomina il campo,GetPAdESSignatureValueHashHexrestituisce l'hash SHA-256 (o 384 / 512) delsignatureValuedel firmatario per l'invio a un TSA,GetPAdESSignatureCMSBytesespone il payload CMS esistente,SetPAdESSignatureCMSBytesaccetta i byte aumentati CMS che il chiamante assembla tramite la sua libreria CMS di scelta, eEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringinserisce la nuova CMS nel segnaposto/Contentsoriginale. - La nuova
SetSignProcessReserveContentsBytesallarga il segnaposto/Contentsal momento della firma iniziale in modo che l'CMS aumentato successivamente entri senza superare la riserva originale. Gli attributi TimeStampTokens tipicamente emessi da13aggiungono da 2 a 6 KB al SignerInfo; passare 1024-8192 per lasciare spazio. Se non c'è abbastanza riserva, la chiamata di aumento restituisce13(overflow dell'output).
Modificato
BuildPAdESSignatureTimeStampAttributeè un helper senza stato che avvolge un TimeStampToken emesso da TSA nell'attributo CMS cheSignerInfo.unsignedAttrssi aspetta, quindi i chiamanti che già hanno una libreria CMS a portata di mano possono saltare la parte di plumbing OID + SET.- La libreria non include un client TSA HTTP; il chiamante recupera l'TimeStampToken (tipicamente 30-50 righe di richiesta TSP + HTTP POST contro, ad esempio, FreeTSA o DigiCert). In linea di principio,
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRsu Windows CryptoAPI potrebbe automatizzare l'iniezione CMS nella libreria, ma restituisceCRYPT_E_INVALID_INDEX(0x80091008) sulla forma SignedData separata PAdES emessa, quindi viene utilizzato il percorso di byte fornito dal chiamante CMS.
Version 3.56.18
Aggiunto
- I nuovi helper ASN.1
DER_IntegerFromLittleEndian(gestisce l'ordine dei byte Win32CRYPT_INTEGER_BLOB) eDER_ContextTagExplicit(avvolge un payload in un tag contestuale costruito) completano il micro-encoderPDFlibASN1. Le nuove dichiarazioniCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTinPDFlibCryptoAPIforniscono al percorso di firma l'accesso ai campi del certificato analizzati.
Modificato
- L'attributo PAdES
signing-certificate-v2ora include il campo opzionaleIssuerSerialdefinito da RFC 5035 (ESSCertIDv2). Il Distinguished Name dell'emittente del certificato di firma è avvolto in unGeneralName [4] EXPLICIT directoryNameCHOICE all'interno diGeneralNames, seguito dal numero di serie del certificato come un ASN.1 INTEGER. I byte del numero di serie arrivano in ordine little-endian da Windows CryptoAPI (CRYPT_INTEGER_BLOB) e vengono invertiti in big-endian con l'aggiunta del byte di riempimento intero positivo quando il bit più significativo è impostato, come OpenSSL e BouncyCastle emettono lo stesso campo. - I verificatori che controllano il nome dell'emittente + la coppia del numero di serie rispetto al loro set di candidati di costruzione del percorso (in particolare EU DSS in modalità stretta) ora trovano entrambi gli identificatori nell'attributo signing-cert-v2; l'output precedente v3.56.17 forniva solo il riferimento
certHash.
Version 3.56.17
Aggiunto
- La nuova unità
PDFlibASN1fornisce un micro-encoder DER (X.690) mirato — prefisso di lunghezza, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER — usato per costruire il valore dell'attributoSigningCertificateV2. L'encoder segue le regole standard per gli archi OID base-128 e omette il campo opzionalehashAlgorithmquando si limiterebbe a ripetere il valore di default SHA-256, in linea con quanto emettono OpenSSL e BouncyCastle.
Modificato
- Il percorso di firma integrato
ETSI.CAdES.detachedora produce firme PAdES-B-B strutturalmente conformi. La libreria costruisce essa stessa gli attributi autenticati CMS —content-type(id-data) esigning-certificate-v2da RFC 5035 / RFC 5816 con un hash SHA-256 del certificato di firma — e li consegna aCryptSignMessagetramitergAuthAttr. Non appena quel campo è non-NULL, la Windows CryptoAPI smette di iniettare automaticamente l'attributosigning-timeche PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) vieta, così ilSignerInforisultante porta gli attributi richiesti e soltanto quelli. ApplySignatureora instradaETSI.CAdES.detachedattraverso il percorso raw-byte (lo stesso usato daadbe.pkcs7.detached) invece di alimentare un digest precalcolato. La CryptoAPI calcola ora l'attributo autenticatomessageDigestsul contenuto effettivamente firmato, che è ciò che si aspettano i verificatori.- SHA-384 e SHA-512 sono onorati anche nella costruzione dell'attributo signing-certificate-v2: il campo
hashAlgorithmviene emesso con l'AlgorithmIdentifiercorrispondente invece di affidarsi al valore di default. SHA-1 viene silenziosamente promosso a SHA-256 in questo contesto perché PAdES-B-B non autorizza SHA-1 (clause 6.2.1).
Version 3.56.16
Aggiunto
- Il nuovo
SetSignProcessDigestAlgorithmseleziona l'algoritmo di message-digest per la firma:1= SHA-1 (deprecated),2= SHA-256 (default moderno),3= SHA-384,4= SHA-512,0= auto (SHA-256 per ogni SubFilter tranne il percorso legacyadbe.pkcs7.sha1, che resta su SHA-1 per la compatibilità binaria stabile). ETSI EN 319 142-1 v1.2.1 §6.2.1 vieta MD5 e rinvia a ETSI TS 119 312 per le suite crittografiche raccomandate, perciò i firmatari PAdES dovrebbero scegliere SHA-256 o più forte. - Aggiunti gli helper di hash
SHA256StreamRange,SHA384StreamRangeeSHA512StreamRangeaccanto al già presenteSHA1StreamRange; il percorso di firma li utilizza per fare il digest del ByteRange del PDF con l'algoritmo selezionato. L'OIDSignerInfo.digestAlgorithmdi PKCS#7 e i byte di hash effettivamente scritti ora sono garantiti coerenti (il codice precedente passava sempre il digest SHA-1 indipendentemente dall'algoritmo negoziato).
Modificato
TPDFlibPFXFile.SignDataora accetta un parametroDigestAlgorithme sceglie l'OID corretto per ciascuna coppia (SubFilter, algoritmo):2.16.840.1.101.3.4.2.1/.2/.3per SHA-256/384/512 sui SubFilter detached e custom (RFC 5754), e gli OID della famigliasha256WithRSAEncryptioncorrispondenti per il percorso legacyadbe.pkcs7.sha1.
Version 3.56.15
Aggiunto
- Il nuovo
SetSignProcessDocTimeStampcommuta un processo di firma in modalità PAdES Document Time-stamp secondo ETSI EN 319 142-1 v1.2.1 §5.4.3. Il dizionario di firma risultante porta/Type /DocTimeStampe/SubFilter /ETSI.RFC3161, omette le chiavi non consentite/M,/Reason,/Location,/ContactInfoe/Name, e riserva un segnaposto esadecimale di 8192 byte (o di dimensione specificata dal chiamante) in/Contentsper un TimeStampToken RFC 3161 recuperato esternamente.
Modificato
- Il passthrough viene abilitato automaticamente quando viene selezionata la modalità DocTimeStamp, poiché il TimeStampToken proviene da una TSA esterna. Le chiamate a
SetSignProcessInfoeffettuate dopo il passaggio alla modalità DocTimeStamp vengono ignorate silenziosamente per mantenere il dizionario di firma conforme alla specifica. - L'iniezione automatica di
/Extensions /ESICPAdES esistente aggiunta in v3.56.8 copre già DocTimeStamp perché il suo SubFilter inizia conETSI., quindi un PDF Document Time-stamp dichiara l'estensione di catalogo richiesta senza ulteriore configurazione.
Version 3.56.14
Aggiunto
- Nuova API di aumento del Document Security Store (DSS) PAdES.
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringaprono un PDF già firmato,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPmettono in coda materiale di convalida codificato in DER, eEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringscrivono un aggiornamento incrementale contenente un dizionario/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>come specificato da ETSI EN 319 142-1 v1.2.1 §5.4.2.2. Questo è il mattone per promuovere una firma PAdES-B-B / B-T a convalida a lungo termine PAdES-B-LT.
Modificato
- Il processo DSS aumenta automaticamente la voce
/Extensions /ESICdel catalogo ad almenoExtensionLevel 1quando aggiunge materiale di convalida, soddisfacendo il requisito di §5.6, e unisce i nuovi certificati, CRL e risposte OCSP negli array esistenti/Certs//CRLs//OCSPsnelle invocazioni ripetute, in modo che le revisioni si accumulino invece di sovrascriversi. GetPAdESDSSProcessResult/ReleasePAdESDSSProcesscompletano il ciclo di vita, rispecchiando la superficie APISignProcessesistente.
Version 3.56.8
Modificato
- Conformità baseline PAdES: quando una firma viene creata con un SubFilter PAdES (
ETSI.CAdES.detachedoETSI.RFC3161), il catalogo del documento riceve ora automaticamente la voce/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>richiesta da ETSI EN 319 142-1 v1.2.1 §5.6. La voce viene aggiunta tramite lo stesso aggiornamento incrementale che porta la firma, non riduce mai un/ExtensionLevelsuperiore esistente e segue i riferimenti indiretti/Extensionso/ESICquando il PDF di origine li memorizza già come oggetti separati. - Il marcatore di estensione equivalente Adobe scritto da SetSignProcessCustomSubFilter per i PDF creati tramite
TPDFlibè ora/ADBE /BaseVersion /1.7 /ExtensionLevel 8(eraExtensionLevel 5), corrispondente alla dichiarazione alternativa che le firme baseline PAdES sono autorizzate a utilizzare; il livello 5 copriva solo moduli ISO 32000-2 / 3D / funzionalità RichMedia e non identificava in realtà le estensioni PAdES.
Version 3.56.13
Modificato
- Quando SetPDFUAMode è attivo e il documento viene salvato, qualsiasi elemento di struttura L (list) che manca di un attributo
ListNumberingesplicito riceve ora automaticamente/O = List /ListNumbering = None. ISO 14289-1 §7.6 richiede che ogni tag L dichiari il proprio stile di numerazione; la nuova correzione al momento del salvataggioApplyPDFUAListNumberingsi unisce alla famiglia esistenteApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet. - Gli autori che si preoccupano di uno stile di elenco specifico dovrebbero comunque chiamare SetStructElemListNumbering prima di EndTag; la correzione automatica si attiva solo quando nessun attributo ListNumbering è presente al momento del salvataggio, quindi i valori espliciti vengono preservati.
- Il messaggio diagnostico lato writer
LIST-NO-NUMBERING:Nora segnala che la correzione automatica maschererà il problema al momento del salvataggio, in modo che gli utenti comprendano sia l'attributo mancante sia il comportamento di riparazione automatica.
Version 3.56.12
Modificato
- L'audit PDF/UA-1 guadagna tre nuovi controlli ISO 14289-1.
10031segnala le annotazioni Link il cui dizionario di azione URI porta/IsMap = true(vietato da §7.18.5 a meno che funzionalità equivalente sia fornita altrove nel contenuto; gli autori con un caso d'uso IsMap legittimo possono sopprimere la diagnostica da soli).10032segnala gli elementi di strutturaNoteprivi della voce/ID— §7.9 richiede che ogni tag Note dichiari un ID univoco.10033segnala il conteggio di coppie duplicate quando due o più tag Note condividono lo stesso valore/ID. - Il rilevamento delle collisioni di ID Note viene effettuato raccogliendo gli ID in una TStringList ordinata e percorrendo le coppie adiacenti, quindi un gruppo di tre Note che condividono un ID conta come due coppie duplicate.
- Il controllo dell'azione URI percorre l'array
/Annotsdi ogni pagina, filtra per/Subtype /Link, quindi ispeziona/A /S /URIe il booleano/IsMap. I riferimenti indiretti vengono dereferenziati ad ogni passo in modo che i dizionari di azione separati si comportino come quelli inline.
Version 3.56.11
Modificato
- ISO 14289-1 §7.6 richiede che ogni elemento di struttura L (list) porti un attributo
ListNumberingesplicito.10030(lato reader) eLIST-NO-NUMBERING:N(lato writer) segnalano i tag L che lo omettono. Il walker lato reader decodifica entrambe le forme di/A(dizionario di attributo singolo, o array di dizionari mescolati con interi di revisione) e cerca la chiave/ListNumberingindipendentemente dall'owner. Il controllo lato writer ispezionaTPDFStructElem.Attributesper lo stesso nome sia nell'elenco di strutture finalizzato sia nello stack di tag ancora aperti. - I valori validi di
ListNumberingsecondo ISO 32000-1 Tabella 347 sonoNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. L'audit controlla solo la presenza della chiave, non quale valore viene scelto — ogni tag L necessita di uno di questi.
Version 3.56.10
Modificato
- L'audit PDF/UA-1 guadagna le regole di codifica TrueType di ISO 14289-1 §7.21.6.
10028segnala i font TrueType non simbolici il cui/Encoding(o il/BaseEncodingall'interno di un dizionario Encoding) non è néMacRomanEncodingnéWinAnsiEncoding.10029segnala i font TrueType simbolici che portano del tutto una voce/Encoding(vietato dal quarto paragrafo di §7.21.6). - Simbolico vs non simbolico viene deciso dal bit 3 (maschera
4) dei/Flagsdel FontDescriptor, riutilizzando l'helperUAFontDescriptorSymbolicesistente dalla sub-classe 4. Il primo paragrafo completo di §7.21.6 (il programma TrueType incorporato deve contenere voci cmap corrispondenti) richiede l'analisi del programma del font TrueType ed è ancora in attesa; le regole a livello di dizionario sopra costituiscono lo strato pratico che questo audit può verificare senza un parser TrueType. - Le regole dell'array Differences in §7.21.6 (nomi di glifo solo AGL, presenza di cmap Microsoft Unicode) restano fuori scopo per la stessa ragione — richiedono ispezione del programma del font.
Version 3.56.9
Modificato
- L'audit PDF/UA-1 guadagna un controllo ISO 14289-1 §7.18.4 completo.
10027segnala le annotazioni Widget il cui/StructParentsi risolve attraverso il/ParentTreedell'albero di struttura ma non atterra su un elemento di struttura con/S = Form. Il precedente controllo parziale di v3.56.7 (10026) catturava solo i Widget che mancano del tutto di/StructParent; il nuovo controllo completa la regola seguendo il puntatore dell'albero di numeri e verificando il tag di destinazione. - Un nuovo helper
NumberTreeLookupimplementa la forma dell'albero di numeri di ISO 32000-1 §7.9.7 (root piatta/Nums,/Kidsintermedi con range tramite/Limits). Gli audit futuri che devono risolvere le voci/StructParentsdella pagina o le etichette/PageLabelspossono riutilizzarlo. - La verifica del tag Form dell'annotazione Widget utilizza un modello a due livelli: un Widget senza
/StructParentviene segnalato come10026; un Widget il cui/StructParentesiste ma non si risolve in/S = Formviene segnalato come il più specifico10027. Ciò evita il doppio conteggio della stessa violazione sotto entrambi i codici.
Version 3.56.7
Modificato
- Quando SetPDFUAMode è attivo e il documento viene salvato, le eventuali voci di annotazione
TrapNetvengono ora rimosse automaticamente dall'array/Annotsdi ogni pagina. ISO 14289-1 §7.18.2 vieta le annotazioniTrapNet; la nuova correzione al momento del salvataggioApplyPDFUAStripTrapNetsi unisce alla famiglia esistenteApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationshipin modo che i documenti in modalità PDF/UA smettano di emettere silenziosamente residuiTrapNet. - L'audit PDF/UA-1 guadagna un controllo parziale di §7.18.4.
10026segnala le annotazioni Widget che mancano di/StructParent— un Widget senza/StructParentnon può essere raggiunto dall'albero di struttura e quindi non può essere nidificato in un tag di strutturaForm. La verifica strutturale completa (risoluzione di/StructParentattraverso ilParentTreee conferma che il/Sgenitore siaForm) è lasciata per una release successiva. - Il lato writer GetPDFUADiagnostics guadagna il problema corrispondente
WIDGET-NO-STRUCTPARENT:N. Il messaggio TRAPNET-ANNOT esistente ora segnala anche che SetPDFUAMode li elimina automaticamente al momento del salvataggio.
Version 3.56.6
Modificato
- L'audit PDF/UA-1 guadagna due controlli di gerarchia delle intestazioni di ISO 14289-1 §7.4.2.
10024segnala quando il primo elemento di intestazione nell'ordine del documento non è H1 (o H).10025segnala il numero di salti di livello di intestazione in una sequenza discendente (ad es. H1 seguito da H3 senza H2). Entrambi i controlli condividono un unico attraversamento pre-ordine dell'albero di struttura che decodifica le forme annidate di/K(StructElem singolo, array di StructElem / IndRef / MCR). - Il lato writer GetPDFUADiagnostics guadagna il problema corrispondente
FIRST-HEADING-NOT-H1, in parità con il reader10024. Il controllo writer HEADING-LEVEL-SKIP già esistente ha ora un compagno che cattura anche problemi del tipo "la prima intestazione era H2".
Version 3.56.5
Modificato
- Quando SetPDFUAMode è attivo e il documento viene successivamente cifrato, la chiave di permessi di cifratura (
/Pnel dizionario di cifratura) ha ora automaticamente il bit 10 (maschera$200, "Extract text and graphics in support of accessibility") impostato, anche quando il chiamante non ha inclusoppCanCopyAccessnelTPDFExtraPermissionspassato a Encrypt. ISO 14289-1 §7.16 richiede che ogni file conforme cifrato consenta l'estrazione per l'accessibilità, e il bit è altrimenti facile da dimenticare. Il bit è sempre sicuro da impostare — concede solo accesso aggiuntivo alla tecnologia assistiva, non ad altri percorsi di estrazione. - Il lato writer GetPDFUADiagnostics guadagna un nuovo problema
ENCRYPT-NO-ACCESSche si attiva quando PDFUAMode è attivo e il bit 10 del/Pdel dizionario di cifratura è azzerato. Ciò cattura il caso limite dell'ordine di chiamata in cui l'utente ha chiamatoEncrypt()prima e SetPDFUAMode solo dopo — la diagnostica dice all'utente di chiamareEncrypt()di nuovo in modo che il dizionario di cifratura venga riemesso con il/Pcorretto.
Version 3.56.4
Modificato
- Il lato writer GetPDFUADiagnostics guadagna cinque nuovi controlli ISO 14289-1 in modo che l'audit del documento in memoria catturi le stesse violazioni dell'audit lato reader CheckFileCompliance ComplianceTest=2.
SUSPECTS-TRUEsegnala MarkInfo/Suspects=true (§7.1: i file conformi PDF/UA richiedono Suspects=false).ROLEMAP-STANDARD-REMAP:Nsegnala le chiamate AddRoleMap che rimapperebbero un tag di struttura standard — §7.1 vieta la rimappatura di tag standard.DC-TITLE-MISSINGsegnala un dc:title XMP vuoto (separato da DOCINFO-TITLE-MISSING, che controlla /Info /Title).TRAPNET-ANNOT:Nsegnala le annotazioni TrapNet (§7.18.2 le vieta).ANNOT-PAGE-NO-TABS-S:Nsegnala le pagine che portano annotazioni il cui dizionario di pagina /Tabs non è /S (§7.18.3 richiede l'ordine di tabulazione dell'albero di struttura su quelle pagine). - Gli audit PDF/UA-1 lato writer e lato reader sono ora pressoché in parità: ogni problema che l'audit lato reader solleva su un file salvato è raggiungibile anche dalla diagnostica in memoria, salvo le convenzioni di formato di ciascuna funzione (testo separato da newline vs elenco di stringhe con codice NNNNN).
Version 3.56.3
Modificato
- L'audit PDF/UA-1 guadagna i controlli sui font di §7.21.
10020segnala qualsiasi font non-Standard-14 il cui FontDescriptor manca diFontFile/FontFile2/FontFile3(§7.21.4.1: ogni font reso deve incorporare il proprio programma).10021segnala i discendenti CIDFontType2 senza una voce/CIDToGIDMap(§7.21.3.2).10022evidenzia i font Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats e varianti bold / oblique) referenziati senza un programma incorporato — §7.21.4 NOTE 5 chiarisce che non c'è alcuna esenzione dall'incorporamento per questi font.10023segnala i font che mancano di una CMap/ToUnicodee non corrispondono all'elenco di esenzioni di §7.21.7 (codifiche predefinite MacRoman / MacExpert / WinAnsi, Type 0 con raccolte di caratteri Adobe-GB1 / CNS1 / Japan1 / Korea1, TrueType non simbolico). - I font compositi Type 0 vengono ispezionati a entrambi i livelli:
/ToUnicodesul dizionario padre Type 0 stesso, e incorporamento //CIDToGIDMapsul primo CIDFont discendente. I font Type 3 saltano il controllo di incorporamento (i loro glifi sono CharProc inline) ma partecipano comunque al controllo/ToUnicode. - Gli helper di PDFlibPDFA per un lavoro simile sui font non sono stati intenzionalmente condivisi — una mezza dozzina di brevi routine (rimozione del prefisso di subset, tabella nomi Standard-14, presenza di FontFile, flag Symbolic) sono duplicate localmente come helper
UA*, in modo che l'audit PDF/A possa continuare a evolversi senza rompere PDF/UA, e viceversa.
Version 3.56.2
Modificato
- L'audit PDF/UA-1 guadagna altri cinque controlli ISO 14289-1 che coprono annotazioni, file incorporati e contenuto opzionale.
10015segnala le annotazioni Link che mancano di una descrizione alternativa/Contentsnon vuota (§7.18.5) in modo che gli screen reader possano annunciare i target dei collegamenti.10016e10017segnalano i dizionari FileSpec di file incorporati che mancano delle chiavi nome file/Fo/UFrichieste (§7.11).10018segnala i dizionari di configurazione di contenuto opzionale che omettono una stringa di testo/Namenon vuota (§7.10).10019segnala i dizionari di configurazione di contenuto opzionale che contengono la chiave vietata/AS(§7.10). - L'attraversamento delle annotazioni per pagina che già alimentava i controlli TrapNet e
/Tabs /Sora raccoglie anche i dati Link //Contentsnello stesso passaggio, mantenendo l'audit O(N) sul conteggio degli oggetti.
Version 3.56.1
Modificato
- L'audit PDF/UA-1 guadagna cinque nuovi controlli ISO 14289-1.
10010verifica il permesso di estrazione per l'accessibilità (bit 10 della chiave di cifratura/P) sui file cifrati (§7.16).10011rileva i moduli XFA dinamici tramite l'elemento<dynamicRender>required</dynamicRender>all'interno del pacchetto XFA XDP (§7.15).10012segnala i Form XObject che portano una voce/Ref— gli XObject di riferimento sono vietati (§7.20).10013segnala le annotazioniTrapNet(§7.18.2).10014percorre ogni pagina e segnala qualsiasi pagina che porta annotazioni il cui dizionario di pagina non imposta/Tabs /S(§7.18.3) in modo che l'ordine di tabulazione segua l'albero di struttura. - Tutti e cinque i nuovi codici fluiscono attraverso la stessa coppia di handle CheckFileCompliance + GetStringListItem aggiunta dalla release precedente — non c'è nuova superficie API pubblica.
Version 3.56.0
Aggiunto
- Il nuovo audit lato reader
CheckCompliancePDFUAconvalida un PDF esterno rispetto a ISO 14289-1 (PDF/UA-1). Completa il controllo lato writer esistente GetPDFUADiagnostics accettando qualsiasi PDF di input (output proprio, output di scanner, contenuto di terze parti) ed elencando le violazioni PDF/UA-1 nello stesso modo in cui CheckFileCompliance riporta già i problemi PDF/A.
Modificato
- CheckFileCompliance ora accetta
ComplianceTest = 2per eseguire il nuovo audit PDF/UA-1. Il test PDF/A sottoComplianceTest = 1è invariato, e l'elenco dei problemi continua a fluire attraverso la coppia di handle esistente GetStringListCount / GetStringListItem. - Il primo taglio copre i gate fondamentali di conformità PDF/UA-1 di §5 (identificazione XMP
pdfuaid:part) e §7.1 (flusso/Metadatadel Catalog, marcatore tagged-PDF, albero di struttura, preferenza titolo del viewer, lingua del documento,dc:titleXMP, valore/Suspectse divieto di rimappare tag di struttura standard). Vengono emessi otto codici diagnostici — da10001a10009— mantenendo l'intervallo numerico visivamente separato dai codici00xxxdi PDF/A. - Clausole PDF/UA-1 più profonde (sicurezza, annotazioni, XObject, sottoinsiemizzazione di font) sono tracciate per release patch successive sopra lo stesso framework di audit.
Version 3.55.6
Modificato
- Ogni pacchetto XMP appena generato porta ora una proprietà xmpMM:InstanceID nel formato uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. L'identificatore viene generato tramite Win32 CoCreateGuid e dà a ogni documento prodotto un fingerprint univoco e indipendente dalla versione come raccomandato da ISO 19005-1 §6.7.2 (Cor2) e dalle guide alle best practice PDF/A. Le build non Windows (dove il pacchetto XMP rimane vuoto) non sono interessate.
- Il namespace xmpMM (http://ns.adobe.com/xap/1.0/mm/) fa ora parte dei SelectionNamespaces del pacchetto XMP; nuovi helper SetXMPMM e GenerateInstanceID sostengono l'emissione di InstanceID e forniscono la base per il futuro supporto di xmpMM:History / xmpMM:DerivedFrom.
- Lo schema di descrizione dello schema di estensione PDF/A (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) non è aggiunto in questa release. Creare uno schema di estensione personalizzato richiede una costruzione bag / seq / proprietà strutturata multi-passo oltre l'attuale forma SetDublinCore / SetXMPBasic; il lavoro è tracciato per una release futura. I documenti che hanno bisogno di dichiarare proprietà XMP personalizzate continuano a ricadere sul percorso LoadFromString.
Version 3.55.5
Modificato
- I documenti PDF/A hanno ora i flag /F delle annotazioni normalizzati al momento del salvataggio. ISO 19005-1 §6.5.3 richiede che il bit Print sia 1 e i bit Hidden / Invisible / NoView siano 0 su ogni annotazione; il writer ora applica quella maschera al momento del salvataggio in modo che i chiamanti non debbano ricordare il layout dei bit. Il caso /Subtype /Popup è esente — i popup sono figli di altre annotazioni e tradizionalmente non vengono stampati.
- Il flag AcroForm /NeedAppearances viene ora forzato a false al momento del salvataggio quando il documento è in qualsiasi modalità PDF/A. ISO 19005-1 §6.9 richiede che il flag sia assente o false; in precedenza il writer lasciava qualsiasi valore il chiamante avesse impostato, producendo documenti che chiedevano al viewer di rigenerare le appearance al momento dell'apertura e violando silenziosamente la specifica quando il chiamante lo aveva impostato su true. La correzione si applica anche ai documenti che in precedenza avevano il flag assente — il writer emette un
/NeedAppearances falseesplicito per non lasciare ambiguità al validatore.
Version 3.55.4
Modificato
- AddStandardFont rifiuta ora le chiamate in modalità PDF/A. ISO 19005-1 §6.3.4 revoca l'esenzione del riferimento PDF "Standard 14 può essere non incorporato": ogni programma di font in un file conforme deve essere incorporato, e la libreria non include gli outline Standard 14. La facciata restituisce 0 silenziosamente; i chiamanti dovrebbero passare a AddTrueTypeFont o AddType1Font con un file di font reale.
- AddTrueTypeFont promuove ora silenziosamente Embed=0 (nessun incorporamento) a Embed=1 (incorpora font completo) quando la modalità PDF/A è attiva. Il percorso di riferimento non incorporato produceva PDF che dipendevano dal fallback dei font del viewer a un'installazione di sistema Arial / Times / Courier, cosa che viola ISO 19005-1 §6.3.4. I chiamanti esistenti che hanno chiesto l'incorporamento (Embed=1 o 2) non sono interessati.
- Il controllo di conformità /Encoding TrueType non simbolico (ISO 19005-1 §6.3.7 Cor2 richiede WinAnsi o MacRoman come nome di codifica o BaseEncoding, senza /Differences) non viene aggiunto in questa release perché la libreria emette già /WinAnsiEncoding per i subset TrueType non simbolici, e l'applicazione più profonda richiederebbe il tracciamento del dispatch simbolico-vs-non simbolico attraverso il percorso del subset. CheckCompliancePDFA 00034 / 00035 (aggiunti in v3.51.0) segnalano qualsiasi output non conforme al momento della convalida.
Version 3.55.3
Modificato
- I dizionari di font CIDFontType2 supportati da TrueType portano ora /CIDToGIDMap /Identity in modo esplicito. ISO 19005-1 §6.3.3.2 (Cor2) richiede che la voce sia presente per ogni CIDFont Type 2 incorporato; il riferimento PDF consente il default Identity implicito, ma PDF/A esige un valore esplicito. Il writer in precedenza ometteva del tutto la chiave, causando la segnalazione del file da parte di veraPDF (e di CheckCompliancePDFA 00033 aggiunto in v3.51.0). Il nome /Identity corrisponde al layout GID-come-CID che il writer stava già producendo implicitamente, quindi i documenti esistenti vengono renderizzati in modo identico.
- /CharSet del FontDescriptor (per i subset Type 1) e /CIDSet (per i subset CIDFont) restano TODO; il writer dovrebbe tracciare quali nomi di glifo / CID sono finiti nel subset per popolarli con precisione. CheckCompliancePDFA 00031 e 00032 (anche aggiunti in v3.51.0) segnaleranno l'assenza in modo che gli utenti vedano il problema al momento della convalida.
Version 3.55.2
Modificato
- AddImageDirectFromString rifiuta ora i filtri incompatibili con PDF/A al punto di ingresso. Passare Filter = 'LZWDecode' viene rifiutato per ogni parte di PDF/A (ISO 19005-1 §6.1.10 più le regole equivalenti di ISO 19005-2 / -3). Passare Filter = 'JBIG2Decode' o 'JPXDecode' viene rifiutato per PDF/A-1 (modalità 1 e 2). PDF/A-2 e PDF/A-3 ammettono JPXDecode sotto ISO 19005-2 §6.2.8.3 con vincoli di sotto-specifica (conteggio dei canali di colore, uniformità di profondità bit, requisiti METH/APPROX) che il gate lato writer non applica — i chiamanti in quelle modalità devono comunque assicurarsi che il flusso JPEG 2000 sia conforme. La facciata restituisce 0 silenziosamente quando viene richiesto un filtro vietato.
- Gli input TIFF, PNG, JPEG e JPEG 2000 caricati tramite AddImageFromFile / AddImageFromStream non sono interessati: l'importer decomprime i byte sorgente e ricodifica con FlateDecode (o DCTDecode per i payload JPEG), quindi l'input LZW non si propaga mai alla catena Filter di output. Il validatore CheckCompliancePDFA aggiunto in v3.50.0 (00004) e v3.52.0 (00022, 00023) fornisce una seconda linea di difesa al momento della convalida per qualsiasi percorso indiretto che faccia ancora passare un filtro vietato nell'output.
Version 3.55.1
Modificato
- AddLinkToHideField rifiuta ora le chiamate in modalità PDF/A. La release precedente lasciava un commento che affermava che l'azione era compatibile con PDF/A, ma ISO 19005-1 Cor2 ha aggiunto /Hide all'elenco delle azioni vietate (§6.6.1), e ISO 19005-2 / -3 ereditano la restrizione. La facciata restituisce 0 silenziosamente quando chiamata in modalità PDF/A, corrispondente a AddLinkToJavaScript e AddLinkToImportData.
- AddSWFAnnotationFromFile rifiuta ora le chiamate in modalità PDF/A. Le annotazioni SWF / RichMedia avvolgono media Flash vietati da ISO 19005-1 §6.5.2 (nessun sotto-tipo Movie / Sound) e rafforzati da ISO 19005-2 §6.3.1 (nessun 3D / Sound / Screen / Movie). La facciata restituisce 0 silenziosamente.
- AddEmbeddedFile e AddLinkToEmbeddedFile rifiutano ora le chiamate in modalità PDF/A-1 e PDF/A-2. ISO 19005-1 §6.1.11 vieta /EF, e ISO 19005-2 §6.8 ammette solo file PDF/A incorporati; piuttosto che verificare la PDF/A-ità ricorsiva del payload allegato, il writer rifiuta semplicemente la chiamata in queste modalità. PDF/A-3 (SetPDFAMode 5 o 6) rimane consentito — vedere v3.55.0 per l'iniezione automatica /AFRelationship.
- SetOpenActionMenu rifiuta ora i valori MenuItem fuori dalla whitelist {NextPage, PrevPage, FirstPage, LastPage} quando il documento è in modalità PDF/A. ISO 19005-1 §6.6.1 limita le azioni nominate a quel set, quindi in precedenza l'API produceva silenziosamente dizionari Open-Action Find / Print / FullScreen non conformi che veraPDF avrebbe rifiutato.
- NewOptionalContentGroup rifiuta ora le chiamate in modalità PDF/A-1 (SetPDFAMode 1 o 2). ISO 19005-1 §6.1.13 vieta la chiave /OCProperties del Catalog. PDF/A-2 (modalità 3/4) e PDF/A-3 (modalità 5/6) ammettono il contenuto opzionale con i vincoli nelle rispettive §6.9, quindi il gate si attiva solo per PDF/A-1.
Version 3.55.0
Modificato
- I documenti PDF/A-3 ricevono ora automaticamente una voce /AFRelationship su ogni file incorporato. In precedenza un file PDF/A-3 creato con la libreria poteva fallire la convalida perché ISO 19005-3 Allegato E, Tabella E.1 richiede AFRelationship su ogni specifica di file incorporato. Il writer ora inietta il valore predefinito configurato ('Unspecified' di fabbrica) su qualsiasi dizionario FileSpec che manca della voce al momento del salvataggio, rispecchiando l'iniezione automatica AFRelationship PDF/UA introdotta in precedenza. Solo le modalità PDF/A-3 (SetPDFAMode 5 = PDF/A-3b o 6 = PDF/A-3a) attivano l'iniezione automatica; PDF/A-1 e PDF/A-2 continuano a rifiutare del tutto i file incorporati secondo ISO 19005-1 §6.1.11 e ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship è una nuova API che sovrascrive il valore predefinito scritto dal writer quando un file incorporato manca di una voce /AFRelationship. Accetta i valori di ISO 19005-3 Tabella E.1 'Source' (il file incorporato è il materiale sorgente che ha prodotto il contenuto PDF), 'Data' (il file è il dato strutturato che sostiene una tabella o un grafico visuale), 'Alternative' (una resa alternativa come una versione audio), 'Supplement' (una rappresentazione supplementare come una forma MathML di un'equazione), 'Unspecified' (la relazione non può essere caratterizzata dai precedenti) o qualsiasi nome di seconda classe registrato. Una stringa vuota reimposta a 'Unspecified'. Le sovrascritture per file restano disponibili tramite SetEmbeddedFileAFRelationship.
- Le nuove API sono esposte sulla facciata Delphi come TPDFlib.SetPDFA3DefaultAFRelationship e tramite la DLL come DLSetPDFA3DefaultAFRelationship (PWideChar) e DLSetPDFA3DefaultAFRelationshipA (PAnsiChar).
Version 3.54.0
Modificato
- LoadOutputIntentProfile è una nuova API che sostituisce il profilo OutputIntent sRGB in bundle con un profilo ICC esterno caricato da disco. Necessaria quando si producono documenti PDF/A in spazi colore DeviceCMYK o DeviceGray, poiché la libreria fornisce solo un profilo sRGB. L'uso tipico è chiamare prima SetPDFAMode (che inizializza lo scheletro OutputIntent), poi LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK') per scambiare i byte del profilo e taggare il documento con il nuovo spazio colore. Restituisce 1 in caso di successo, 0 in caso di file-non-trovato o spazio colore sconosciuto. Esposta sulla facciata Delphi come TPDFlib.LoadOutputIntentProfile e tramite la DLL come DLLoadOutputIntentProfile (forma PWideChar) e DLLoadOutputIntentProfileA (forma PAnsiChar). ISO 19005-1 §6.2.2 consente qualsiasi profilo ICC registrato nel flusso DestOutputProfile.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep e SetTextColorSep ora hanno successo in modalità PDF/A quando il profilo OutputIntent del documento è DeviceCMYK. In precedenza queste API rifiutavano ogni chiamata in modalità PDF/A indipendentemente dall'OutputIntent, cosa che impediva la produzione di documenti CMYK conformi. Il gate è ora PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', corrispondente alla regola di ISO 19005-1 §6.2.3.3 secondo cui DeviceCMYK è permesso quando l'OutputIntent usa un profilo CMYK, e a ISO 19005-1 §6.2.3.4 che consente le alternative Separation il cui spazio colore di base è anch'esso conforme.
- SetTextShader ora ha successo in modalità PDF/A quando il profilo OutputIntent è DeviceRGB o DeviceCMYK. Gli shader in sé non sono vietati da PDF/A; il validatore (lato lettore) verifica che lo spazio colore interno dello shader corrisponda all'OutputIntent. Il precedente comportamento di rifiuto stretto negava l'uso conforme degli shader.
- Lo sblocco CMYK / Separation / Shader dipende dal tag OutputIntentColorSpace impostato da AddOutputIntent e LoadOutputIntentProfile (introdotti in v3.53.0). Chiamare SetPDFAMode senza LoadOutputIntentProfile mantiene lo spazio colore come DeviceRGB (il profilo sRGB in bundle), quindi le chiamate CMYK continuano a rifiutare di default — il nuovo comportamento è opt-in tramite LoadOutputIntentProfile.
Version 3.53.0
Modificato
- Il dizionario OutputIntent porta ora i campi completi dello scheletro PDF/A raccomandati da ISO 19005-1 §6.2.2 e dal preflight di Adobe Acrobat: /OutputCondition (descrizione leggibile dall'uomo della condizione di colore), /Info (testo di identificazione in forma lunga) e /RegistryName (URL del registro, predefinito a http://www.color.org). I valori predefiniti sono "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" per i siti di chiamata legacy a un solo argomento; il nuovo overload di AddOutputIntent prende direttamente i quattro campi personalizzati in modo che i chiamanti possano popolarli per le proprie condizioni di colore.
- AddOutputIntent guadagna un nuovo overload a cinque argomenti: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). La forma legacy a un argomento continua a funzionare invariata; ora delega al nuovo overload con i predefiniti sRGB. L'argomento ColorSpace seleziona anche il conteggio dei componenti /N scritto nel dizionario di profilo ICC incorporato (3 per DeviceRGB, 4 per DeviceCMYK, 1 per DeviceGray); il profilo incorporato stesso rimane il flusso sRGB in bundle finché non arriva la prossima API LoadOutputIntentProfile in v3.54.0.
- TPDFDocument espone OutputIntentColorSpace come proprietà di lettura/scrittura che traccia lo spazio colore dell'ultima chiamata AddOutputIntent. Ciò diventa la condizione di gate per le restrizioni lato writer CMYK / Separation / Shader in v3.54.0, dove le API colore che oggi rifiutano ogni chiamata in modalità PDF/A rifiuteranno solo quando lo spazio colore non corrisponde all'OutputIntent.
Version 3.52.0
Modificato
- CheckCompliancePDFA ora controlla annotazioni, graphics-state, azioni e form XObject, completando la copertura del validatore PDF/A lato lettore dei capitoli 6.2-6.6 di ISO 19005-1 e delle regole differenziali equivalenti di PDF/A-2/-3. Il validatore segnala 14 nuove classi di problemi (00050-00067): sottotipi di annotazione vietati (00050; ISO 19005-1 §6.5.2 vieta FileAttachment / Sound / Movie per PDF/A-1, e ISO 19005-2 §6.3.1 vieta 3D / Sound / Screen / Movie per PDF/A-2 e PDF/A-3), /CA di annotazione diverso da 1.0 (00051; §6.5.3), /F di annotazione mancante o con Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, con /Subtype /Popup esente), /AA di annotazione (00054; §6.6.2), dizionario appearance di annotazione con chiavi diverse da /N o valore /N non conforme (00055; §6.5.3 Cor2), annotazione Widget con /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2 diverso da /Default (00059; §6.2.8), e solo in PDF/A-1: ExtGState /SMask diverso da /None (00061; §6.4), /BM diverso da Normal o Compatible (00062; §6.4), /CA o /ca diversi da 1.0 (00063; §6.4).
- L'audit di azioni-ovunque (00064, 00065) sostituisce il controllo solo-OpenAction di v3.50.0 con uno sweep completo che segnala i valori /S di azione vietati (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) e le azioni nominate il cui /N è fuori da {NextPage, PrevPage, FirstPage, LastPage} indipendentemente da dove vive l'azione (annotazione /A, widget /A, outline /A, /OpenAction del catalogo, ecc.). ISO 19005-1 §6.6.1.
- L'audit di XObject (00066, 00067) segnala PostScript e Reference XObject, più chiavi vietate sui Form XObject (/OPI, /PS, /Subtype2 = /PS) e Image XObject (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
Version 3.51.0
Modificato
- CheckCompliancePDFA ora controlla la conformità dei font e dello spazio colore oltre ai controlli strutturali aggiunti in v3.50.0. Il validatore segnala nove nuove classi di problemi: almeno un programma di font non incorporato (00030; ISO 19005-1 §6.3.4 richiede che ogni programma di font, incluse le sostituzioni Standard 14, sia incorporato), subset Type 1 senza /CharSet nel proprio FontDescriptor (00031; §6.3.5), subset CIDFont senza /CIDSet (00032; §6.3.5), CIDFontType2 senza /CIDToGIDMap (00033; §6.3.3.2 Cor2), TrueType non simbolico con un /Encoding non conforme (00034; §6.3.7 Cor2 richiede WinAnsi/MacRoman direttamente o come BaseEncoding, senza /Differences), TrueType simbolico che porta ancora /Encoding (00035; §6.3.7 Cor2), almeno un font senza /ToUnicode nei documenti PDF/A-Na o PDF/A-Nu (00036; §6.3.8 esenzione a quattro classi applicata), spazio colore ICCBased che non incorpora il proprio flusso di profilo (00037; §6.2.3.2) e un file che usa sia DeviceRGB sia DeviceCMYK (00038; §6.2.3.3 vieta la mescolanza).
- Il controllo /ToUnicode (00036) è limitato ai livelli di conformità A e U perché solo questi livelli richiedono la mappatura Unicode secondo ISO 19005-1 §6.3.8 e ISO 19005-2 §6.2.11.7. I file di livello B (PDF/A-1b, PDF/A-2b, PDF/A-3b) non vengono segnalati. L'esenzione a quattro classi riconosce le codifiche predefinite (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), Standard 14 Type 1 BaseFonts come proxy per font con nomi di glifo Adobe Standard Latin / Symbol, e font Type 0 il cui CIDFont discendente usa registri Adobe-GB1, Adobe-CNS1, Adobe-Japan1 o Adobe-Korea1.
- L'audit dei font percorre ogni dizionario Font, lo classifica per Subtype (Type1, MMType1, TrueType, Type3, Type0 con il proprio CIDFontType0 o CIDFontType2 discendente), poi smista i controlli rilevanti. I font compositi Type 0 delegano i controlli di incorporamento e di subset al proprio CIDFont discendente mantenendo /ToUnicode sull'involucro Type 0. Il rilevamento del subset usa la convenzione standard del prefisso a sei lettere maiuscole.
Version 3.50.0
Modificato
- CheckCompliancePDFA segnala ora 15 ulteriori problemi di non conformità PDF/A che il validatore precedentemente mancava: array /ID del trailer mancante (00013), flusso /Metadata del Document Catalog mancante (00014), /Filter applicato al flusso /Metadata (00015), dizionari di flusso che fanno riferimento a file esterni tramite /F, /FFilter o /FDecodeParms (00016), file incorporati dichiarati tramite /EF in qualsiasi dizionario di specifica di file o tramite la voce /EmbeddedFiles dell'albero Name nei documenti PDF/A-1 (00017, 00018), /OpenAction che punta a un tipo di azione vietato (00019), dizionari di azioni aggiuntive /AA nel Document Catalog o in qualsiasi Page (00020, 00021), filtri JBIG2Decode o JPXDecode nei documenti PDF/A-1 (00022, 00023), filtri Crypt il cui /Name non è /Identity (00024), /Requirements nel Document Catalog (00025), /Perms con chiavi diverse da /UR3 e /DocMDP (00026), e /AcroForm /NeedAppearances impostato su true (00027). Il validatore segnala ora i tipi di azione /OpenAction del Catalog vietati (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) e i valori /N di azione nominata fuori dalla allowlist {NextPage, PrevPage, FirstPage, LastPage} secondo ISO 19005-1 §6.6.1.
- I controlli specifici per filtro (JBIG2Decode, JPXDecode) e i controlli di file incorporati (/EF, /EmbeddedFiles) restano limitati a PDF/A-1 perché ISO 19005-2 §6.2.8.3 e §6.8 rilassano esplicitamente quelle restrizioni per PDF/A-2 e PDF/A-3. I controlli di struttura del documento (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) si applicano a ogni parte di PDF/A.
Corretto
- Il parser PDFAID accetta il suffisso di conformità U (PDF/A-2U, PDF/A-3U) accanto alle varianti A e B esistenti, quindi CheckCompliancePDFA non solleva più un avviso spurio "00005 PDFA Mark NOT Found or invalid" durante la scansione di un file PDF/A-2U o PDF/A-3U prodotto da un altro strumento. I livelli di conformità di mappatura Unicode aggiunti in ISO 19005-2:2011 sono ora riconosciuti dal validatore.
Version 3.49.0
Modificato
- AddLinkToImportData crea un'annotazione Link la cui azione è un'azione PDF di import-data (/S /ImportData) che popola i campi AcroForm del documento da un file FDF esterno quando l'utente fa clic sul collegamento (ISO 32000-1 §12.6.4.8, Tabella 198). Il parametro FileName viene referenziato come dizionario filespec, con le stesse regole di normalizzazione del percorso utilizzate da AddLinkToFile / AddLinkToFileEx (i backslash vengono convertiti in slash secondo ISO 32000-1 §7.11.2.1). Il bit 0 di Options attiva il bordo visibile e i bit 1–3 selezionano la modalità di evidenziazione del collegamento (Invert, Outline, Push), conformemente alle convenzioni AddLinkTo* esistenti. PDF 1.4 o successivo. NON consentito in PDF/A perché l'azione fa riferimento a una risorsa esterna; la facciata restituisce silenziosamente 0 quando viene chiamata in modalità PDF/A. Esposta nella libreria Delphi e nell'interfaccia DLL come DLAddLinkToImportData / DLAddLinkToImportDataA (forma PWideChar e PAnsiChar).
Version 3.48.0
Modificato
- AddLinkToHideField crea un'annotazione Link la cui azione è un'azione PDF di hide (/S /Hide) che attiva/disattiva la visibilità di uno o più campi AcroForm quando l'utente fa clic sul collegamento (ISO 32000-1 §12.6.4.10, Tabella 196). FieldNames accetta uno o più nomi di campo completamente qualificati separati da virgole, punti e virgola o interruzioni di riga; un singolo nome viene emesso come stringa di testo in /T e due o più nomi vengono emessi come array, entrambe le forme sono ammesse dalla specifica. HideFlag seleziona la direzione di visibilità: un valore diverso da zero nasconde i campi elencati (/H true) e zero li mostra (/H false). Il bit 0 di Options attiva il bordo visibile e i bit 1–3 selezionano la modalità di evidenziazione del collegamento (Invert, Outline, Push), conformemente a AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 o successivo. Compatibile con PDF/A perché nessuna risorsa esterna viene referenziata. Esposta nella libreria Delphi e nell'interfaccia DLL come DLAddLinkToHideField / DLAddLinkToHideFieldA (forma PWideChar e PAnsiChar).
Version 3.47.0
Modificato
- AddLinkToNamedAction crea un'annotazione Link la cui azione è un'azione PDF named (/S /Named) che attiva uno dei quattro comandi di navigazione del viewer standardizzati definiti in ISO 32000-1 §12.6.4.11, Tabella 194: NextPage, PrevPage, FirstPage e LastPage. Il parametro NamedActionType seleziona il comando (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); i valori fuori da questo intervallo ricadono su NextPage in modo che il writer emetta sempre un nome /N conforme alla specifica. Il bit 0 di Options attiva il bordo visibile e i bit 1–3 selezionano la modalità di evidenziazione del collegamento (Invert, Outline, Push), conformemente alle convenzioni AddLinkToWeb / AddLinkToPage esistenti. L'annotazione richiede PDF 1.1 o successivo ed è compatibile con PDF/A perché nessuna risorsa esterna viene referenziata. Disponibile nella libreria Delphi e nelle interfacce DLL.
Version 3.46.1
Modificato
- AddCaretAnnotation crea un'annotazione di markup caret (PDF /Subtype /Caret) nel rettangolo specificato, contrassegnando una posizione sulla pagina in cui è stato inserito, omesso del testo o del contenuto, o che richiede comunque attenzione da parte del revisore. Supporta due tipi di simbolo (None e Paragraph) tramite SymbolType (0 / 1), colore, opacità, titolo, contenuto e timestamp di creazione/modifica configurabili. Definita in ISO 32000-1 §12.5.6.11. PDF 1.5 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- Questa voce completa il backfill delle annotazioni geometriche iniziato con v3.44.0 Square+Circle. PDFlibPas ora crea annotazioni Text, Stamp, FreeText, TextMarkup (Highlight/Underline/Squiggly/StrikeOut), Square, Circle, Line, Polygon, PolyLine, Ink e Caret, oltre al supporto esistente per Link, FileAttachment, SVG, U3D e SWF.
Version 3.46.0
Modificato
- AddInkAnnotation crea un'annotazione di markup ink (PDF /Subtype /Ink) che rappresenta tratti scritti a mano o segni a forma libera disegnati sulla pagina. I tratti vengono forniti come una singola stringa in cui più tratti sono separati da '|' o newline, e all'interno di ciascun tratto le coppie di coordinate seguono lo stesso formato spazio/virgola/punto e virgola/tab utilizzato da AddPolygonAnnotation. Ad esempio "100 100 110 105 120 110 | 200 200 210 205" descrive due tratti separati. Supporta larghezza del bordo, colore dell'inchiostro, opacità, titolo, contenuto e timestamp configurabili. Definita in ISO 32000-1 §12.5.6.13. PDF 1.3 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- Ogni tratto deve contenere un numero pari di valori (almeno quattro), altrimenti la chiamata restituisce 0 e non viene scritta alcuna annotazione. Il /Rect viene calcolato automaticamente dall'estensione combinata di tutti i tratti più un piccolo padding in modo che i tratti restino all'interno del riquadro di delimitazione dell'annotazione.
Version 3.45.0
Modificato
- AddPolygonAnnotation crea un'annotazione di markup poligono chiuso (PDF /Subtype /Polygon) con vertici forniti come una stringa di coppie di coordinate separate da spazi, virgole, punti e virgola o tabulazioni (ad es. "100 100 200 100 200 200 100 200"). Supporta larghezza del bordo, colore del bordo, colore di riempimento interno opzionale, opacità, titolo, contenuto e timestamp configurabili. Definita in ISO 32000-1 §12.5.6.9. PDF 1.5 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- AddPolyLineAnnotation crea un'annotazione di markup polilinea aperta (PDF /Subtype /PolyLine) con lo stesso formato di stringa di vertici e stili di terminazione configurabili a ciascuna estremità (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Definita in ISO 32000-1 §12.5.6.9. PDF 1.5 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- Entrambe le annotazioni richiedono almeno due punti vertice (quattro numeri) e un conteggio totale pari di numeri; la chiamata restituisce 0 se la stringa dei vertici non riesce a essere analizzata in un elenco di coppie valido. Il /Rect viene calcolato dall'estensione dei vertici più un padding proporzionale alla larghezza del bordo, in modo che le decorazioni terminali rimangano visibili.
- Entrambe le annotazioni elevano la versione del documento a PDF 1.5 quando vengono emesse sotto un blocco di versione minima inferiore.
Version 3.44.1
Modificato
- AddLineAnnotation crea un'annotazione di markup linea (PDF /Subtype /Line) tra due punti finali, con larghezza del bordo, colore della linea, colore di riempimento interno opzionale, stili di terminazione per entrambe le estremità (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), opacità, titolo, contenuto e timestamp di creazione/modifica configurabili. Definita in ISO 32000-1 §12.5.6.7. PDF 1.3 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- Il /Rect dell'annotazione viene calcolato dai due punti finali più un padding proporzionale alla larghezza del bordo, in modo che le decorazioni terminali rimangano all'interno del riquadro di delimitazione dell'annotazione.
Version 3.44.0
Modificato
- AddSquareAnnotation crea un'annotazione di markup rettangolo (PDF /Subtype /Square) nel rettangolo specificato, con larghezza del bordo, colore del bordo, colore di riempimento interno opzionale, opacità, titolo, contenuto e timestamp di creazione/modifica configurabili. Definita in ISO 32000-1 §12.5.6.8. PDF 1.3 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- AddCircleAnnotation crea un'annotazione di markup ellisse (PDF /Subtype /Circle) inscritta nel rettangolo specificato, con gli stessi bordo, riempimento, opacità, titolo, contenuto e timestamp configurabili di AddSquareAnnotation. Definita in ISO 32000-1 §12.5.6.8. PDF 1.3 o successivo. Disponibile nella libreria Delphi e nelle interfacce DLL.
- Entrambe le nuove annotazioni elevano automaticamente la versione del documento a PDF 1.3 quando vengono emesse sotto un blocco di versione minima inferiore ed emettono un insieme di campi di annotazione di markup standard (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P), in modo che i flussi di lavoro di revisione esistenti in Acrobat, Foxit ed Edge possano modificarle dopo la creazione.
Version 3.43.0
Modificato
- SetStructElemSpaceBefore e SetStructElemSpaceAfter impostano gli attributi /SpaceBefore e /SpaceAfter (owner Layout) sull'elemento di struttura attualmente aperto, esprimendo la spaziatura prima e dopo gli elementi a livello di blocco in punti. Definite in ISO 32000-1 §14.8.5.4.2 Tabella 340. Disponibili nella libreria Delphi, ActiveX (Dispid 73008051/73008052) e nelle interfacce DLL.
- SetStructElemStartIndent e SetStructElemEndIndent impostano gli attributi /StartIndent e /EndIndent (owner Layout), esprimendo il rientro dai bordi iniziale e finale, consapevoli della modalità di scrittura, del rettangolo del contenuto in punti. Definite in ISO 32000-1 §14.8.5.4.2 Tabella 340. Disponibili nella libreria Delphi, ActiveX (Dispid 73008053/73008054) e nelle interfacce DLL.
- SetStructElemColor imposta l'attributo /Color (owner Layout) come tripletta RGB (ciascun componente 0.0-1.0), descrivendo il colore in primo piano dell'elemento per i motori di re-flow e i controllori di contrasto dei colori a valle. Definita in ISO 32000-1 §14.8.5.4.2 Tabella 340. Disponibile nella libreria Delphi, ActiveX (Dispid 73008055) e nelle interfacce DLL.
Corretto
- Corretto un bug di serializzazione in BuildStructElemDictRef: i valori di attributo numerici a singolo token (come SpaceBefore, SpaceAfter, StartIndent, EndIndent) venivano scritti come nomi PDF invece che come numeri PDF. La correzione si applica sia ai rami di attributi a singolo owner che a quelli multi-owner.
Version 3.42.0
Modificato
- Aggiunti tre nuovi controlli di conformità: il codice 00006 segnala i documenti cifrati (la cifratura è vietata in tutte le versioni PDF/A); il codice 00007 segnala i documenti che non hanno una voce OutputIntents nel catalogo (richiesta da tutte le versioni PDF/A); i codici 00011 e 00012 segnalano i documenti privi di MarkInfo o StructTreeRoot quando il livello di conformità è -a (accessibilità).
Corretto
- CheckCompliancePDFA ora convalida correttamente tutti e sei i modi PDF/A (1a, 1b, 2a, 2b, 3a, 3b). Il controllo PDFAID (codice 00005) accetta uno qualsiasi dei sei marcatori XMP validi invece del solo '1B'. Il controllo del limite di versione (00002) applica 1.4 per PDF/A-1 e 1.7 per PDF/A-2 e PDF/A-3.
- Il controllo OCProperties (codice 00003) ora è condizionale: si applica solo ai documenti PDF/A-1, dove il contenuto opzionale (livelli) è vietato. PDF/A-2 e PDF/A-3 permettono i livelli e non vengono più segnalati.
Version 3.41.0
Modificato
- La modalità PDF/A ora impone le operazioni vietate a livello di API. Quando una modalità PDF/A è attiva (una qualsiasi delle modalità 1-6), chiamare SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK o qualsiasi altra API CMYK/Separation/Shader restituisce 0 e non ha effetto, coerentemente con il requisito di PDF/A di un singolo output intent sRGB.
- La trasparenza è vietata in PDF/A-1 (modalità 1 e 2): SetTransparency, SetBlendMode e SetPageTransparencyGroup restituiscono 0 e sono no-op quando la modalità attiva è 1 o 2. PDF/A-2 e PDF/A-3 (modalità 3-6) permettono una trasparenza limitata e non sono ristretti.
- Le azioni JavaScript sono vietate in tutte le modalità PDF/A (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript e AddLinkToJavaScript restituiscono tutti 0 e sono no-op quando una qualsiasi modalità PDF/A è attiva. ISO 19005-1 §6.6.1 vieta esplicitamente JavaScript dai documenti PDF/A.
- Le API di allegato file (EmbedFile, AddFileAttachment) sono bloccate nelle modalità PDF/A-1 e PDF/A-2 (1-4). Rimangono funzionali in PDF/A-3 (modalità 5 e 6), che permette esplicitamente file incorporati arbitrari.
Version 3.40.0
Aggiunto
- SetPDFAMode ora supporta i livelli di conformità PDF/A-2 e PDF/A-3. Passare NewMode=3 per PDF/A-2b, 4 per PDF/A-2a, 5 per PDF/A-3b o 6 per PDF/A-3a. PDF/A-2 punta a PDF 1.7 e permette livelli, moduli interattivi, immagini JPEG2000 e trasparenza limitata. PDF/A-3 estende PDF/A-2 permettendo file incorporati arbitrari (qualsiasi tipo MIME). Tutte le varianti -a scrivono automaticamente /MarkInfo e i marcatori di struttura del PDF taggato richiesti dal livello di conformità di accessibilità.
Modificato
- GetInformation(201) restituisce da '1' a '6' corrispondente alla modalità PDF/A attiva, coerentemente con la nuova numerazione delle modalità.
Corretto
- Corretto: SetPDFAMode(1) (PDF/A-1a) era precedentemente un no-op a causa di un bug di routing interno introdotto in v3.20.0. Ora scrive correttamente /MarkInfo e /OutputIntents e imposta XMP pdfaid:part=1/conformance=A.
Version 3.39.0
Modificato
- SetStructElemWritingMode imposta l'attributo /WritingMode (owner Layout) sull'elemento di struttura attualmente aperto. I valori validi sono LrTb (da sinistra a destra, predefinito per gli script latini), RlTb (da destra a sinistra, per arabo ed ebraico) e TbRl (dall'alto in basso da destra a sinistra, per il testo verticale CJK tradizionale). Definita in ISO 32000-1 §14.8.5.4.2 Tabella 340. Disponibile nella libreria Delphi, ActiveX (Dispid 73008049) e nelle interfacce DLL.
- SetStructElemListNumbering imposta l'attributo /ListNumbering (owner List) sull'elemento di struttura attualmente aperto. I valori supportati includono None, Disc, Circle, Square (marcatori non ordinati) e Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (numerazione ordinata). L'attributo viene impostato sull'elemento L (list) e consente alla tecnologia assistiva di annunciare correttamente il tipo di elenco. Definita in ISO 32000-1 §14.8.5.3.2 Tabella 336. Disponibile nella libreria Delphi, ActiveX (Dispid 73008050) e nelle interfacce DLL.
Version 3.38.0
Modificato
- SetStructElemColSpan imposta l'attributo /ColSpan (owner Table) sull'elemento di struttura attualmente aperto, indicando su quante colonne si estende la cella. Definita in ISO 32000-1 §14.8.5.7.2 Tabella 337. Disponibile nella libreria Delphi, ActiveX (Dispid 73008047) e nelle interfacce DLL.
- SetStructElemRowSpan imposta l'attributo /RowSpan (owner Table) sull'elemento di struttura attualmente aperto, indicando su quante righe si estende la cella. Definita in ISO 32000-1 §14.8.5.7.2 Tabella 337. Disponibile nella libreria Delphi, ActiveX (Dispid 73008048) e nelle interfacce DLL.
- Entrambe le funzioni sono wrapper di convenienza equivalenti a chiamare AddTagAttribute con Owner='Table' e il rispettivo nome di attributo. Completano SetStructElemScope per celle di tabella completamente descritte in tabelle complesse o con intestazioni che si estendono su più celle.
Version 3.37.2
Modificato
- GetPDFUADiagnostics ora segnala FORM-NO-TOOLTIP:N quando N campi modulo interattivi (annotazioni Widget) non hanno una voce TU (tooltip / nome accessibile). ISO 14289-1 §7.18.4 richiede che tutti i campi modulo interattivi abbiano una voce TU in modo che la tecnologia assistiva possa annunciare lo scopo del campo all'utente quando il campo riceve il focus. /TU è il nome accessibile pronunciato dagli screen reader; è distinto da /T, che è il nome parziale del campo utilizzato per l'accesso programmatico e l'invio del modulo.
Version 3.37.1
Modificato
- GetPDFUADiagnostics ora segnala LIST-STRUCT:N quando N elementi di struttura LI o LBody appaiono al di fuori del loro elemento genitore richiesto. ISO 32000-1 §14.8.4.4 richiede che LI sia figlio diretto di L (list) e LBody sia figlio diretto di LI (list item). Una nidificazione errata degli elenchi impedisce alla tecnologia assistiva di attraversare e annunciare correttamente il contenuto dell'elenco e può causare errori di convalida della struttura del documento nei validatori PDF/UA-1.
Version 3.37.0
Modificato
- BeginTagEx2 è una nuova API che apre un elemento di struttura e imposta tutte le proprietà principali dell'elemento in una singola chiamata. Oltre ai parametri TagType, AltText, ActualText e Lang di BeginTagEx, BeginTagEx2 accetta Title (/T, per il pannello di navigazione Tags), ElemID (/ID, identificatore univoco dell'elemento) ed Expansion (/E, testo completo di un'abbreviazione o acronimo). Passare una stringa vuota per uno qualsiasi di questi tre parametri aggiuntivi equivale a omettere il setter corrispondente. BeginTagEx2 riduce il boilerplate per elementi ben descritti — invece di chiamare BeginTagEx seguito da SetStructElemTitle, SetStructElemID e SetStructElemExpansion separatamente, tutte e sette le proprietà possono essere impostate in una sola chiamata. La funzione è disponibile nella libreria Delphi, ActiveX (Dispid 73008046) e nelle interfacce DLL.
Version 3.36.1
Modificato
- GetPDFUADiagnostics ora segnala TABLE-TH-NO-SCOPE:N quando N elementi di struttura TH (celle di intestazione di tabella) non hanno un attributo Scope. ISO 32000-1 §14.8.4.3.4 Tabella 337 definisce Scope (Row, Column o Both) come l'attributo che descrive a quali celle dati si applica una cella di intestazione. Senza di esso, gli screen reader e le altre tecnologie assistive non possono associare in modo affidabile le celle di intestazione alle celle dati in tabelle complesse o con intestazioni multiple, cosa richiesta da ISO 14289-1 §7.5. Chiamare SetStructElemAttr('Table','Scope', 'Column') (o 'Row' / 'Both') immediatamente dopo aver taggato ciascun elemento TH.
Version 3.36.0
Modificato
- SetStructElemExpansion è una nuova API che imposta la voce /E (testo di espansione) sull'elemento di struttura attualmente aperto (ISO 32000-1 §14.9.5). Il testo di espansione è la forma scritta per intero di un'abbreviazione o acronimo contenuto nell'elemento — ad es. "World Wide Web" per uno Span il cui testo è "WWW". Gli screen reader pronunciano l'espansione invece di tentare di pronunciare i caratteri abbreviati, cosa critica per l'accessibilità del contenuto tecnico e scientifico. PDF/UA-1 (ISO 14289-1 §7.2) richiede che la lingua naturale sia determinabile in modo non ambiguo; /E è il meccanismo standard per abbreviazioni e acronimi. La funzione è disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.35.1
Modificato
- GetPDFUADiagnostics ora segnala DOCINFO-TITLE-MISSING quando la voce /Title del dizionario delle informazioni del documento è assente o vuota. PDF/UA-1 (ISO 14289-1) richiede un titolo del documento in modo che gli screen reader possano annunciarlo quando il documento viene aperto. Il controllo esistente DISPLAYDOCTITLE-FALSE conferma che il titolo viene mostrato nella barra del titolo del viewer; DOCINFO-TITLE-MISSING è complementare — conferma che il valore del titolo stesso è impostato. Chiamare SetDocumentInfo('Title', ...) per fornire il valore.
Version 3.35.0
Modificato
- SetStructElemTitle è una nuova API che imposta la voce /T (titolo) sull'elemento di struttura attualmente aperto (ISO 32000-1 §14.7.2 Tabella 324). Il titolo è un'etichetta leggibile dall'uomo che identifica l'istanza specifica dell'elemento — ad esempio "Chapter 1", "Summary Table" o "Figure 3: Quarterly Sales" — e viene mostrato nel pannello di navigazione Tags dei viewer PDF e utilizzato dagli strumenti di rimedio dell'accessibilità. /T è distinto da /Alt (testo alternativo per utenti con disabilità di rendering) e /ActualText (correzione del testo a livello di glifo); è più utile su elementi contenitore non testuali come Table, Figure, Form, Sect e Div. Passare una stringa vuota per cancellare un valore precedentemente impostato. La funzione è disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.34.0
Modificato
- SetStructElemAltText è una nuova API che imposta la voce /Alt sull'elemento di struttura attualmente aperto (ISO 32000-1 §14.9.3). È equivalente al passare AltText a BeginTag ma consente di impostare o aggiornare la descrizione del testo alternativo dopo che l'elemento è stato aperto — utile quando la descrizione viene calcolata separatamente dal tipo di elemento. PDF/UA-1 (ISO 14289-1 §7.5) richiede il testo Alt sugli elementi Figure e Formula; GetPDFUADiagnostics segnala già FIGURE-NO-ALT:N per i valori mancanti. La funzione è disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.33.1
Aggiunto
- GetPDFUADiagnostics ora include un controllo ROLEMAP-UNMAPPED:N che rileva i nomi di tipo di elemento di struttura personalizzati utilizzati nel documento che non hanno una voce nel dizionario /RoleMap. ISO 14289-1 §7.1 e ISO 32000-1 §14.7.3 richiedono che ogni tipo di struttura non standard sia mappato a un tipo PDF standard (come P, Span o Figure) in modo che la tecnologia assistiva possa determinare come gestire l'elemento. Quando vengono trovati N tipi non mappati la descrizione del problema include l'elenco dei nomi di tipo in modo che i chiamanti sappiano quali voci AddRoleMap sono necessarie. Tutti i 49 tipi di struttura standard definiti in ISO 32000-1 Tabella 333 (PDF 1.7) sono riconosciuti ed esclusi dal rapporto.
Version 3.33.0
Modificato
- SetStructElemLang è una nuova API che imposta la voce /Lang sull'elemento di struttura attualmente aperto (ISO 32000-1 §14.9.2). Il tag di lingua sovrascrive la lingua a livello di documento dichiarata da SetDocumentLanguage o SetPDFUAMode per l'elemento e tutti i suoi discendenti, consentendo ai documenti multilingue di contrassegnare ciascuna porzione con il proprio tag di lingua BCP 47 corretto (ad es. 'en-US', 'fr', 'zh-Hant-TW'). Gli screen reader utilizzano il /Lang a livello di elemento per selezionare il motore di sintesi vocale o la voce appropriata quando leggono il documento ad alta voce. La funzione è disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.32.0
Modificato
- SetStructElemActualText è una nuova API che imposta la voce /ActualText sull'elemento di struttura attualmente aperto (ISO 32000-1 §14.9.4). Utilizzarla per specificare il testo Unicode esatto che una sequenza di glifi rappresenta quando l'estrazione del flusso di contenuto darebbe risultati errati — i casi più comuni sono i glifi delle legature OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) e le abbreviazioni con espansioni non ovvie. ActualText integra, anziché sostituire, il contenuto renderizzato; sovrascrive ciò che la tecnologia assistiva e gli estrattori di testo leggono per quell'elemento senza sopprimere il rendering visivo. La funzione è disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.31.1
Modificato
- GetPDFUADiagnostics ora controlla anche gli elementi di struttura Formula oltre agli elementi Figure quando segnala testo Alt mancante (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 richiede descrizioni alternative sia per le figure grafiche sia per le formule matematiche; in precedenza venivano scansionati solo gli elementi Figure.
- GetPDFUADiagnostics ora segnala PDF-VERSION-LOW quando la versione PDF del documento è inferiore a 1.7. PDF/UA-1 (ISO 14289-1) è definito rispetto a PDF 1.7 (ISO 32000-1:2008); i documenti a PDF 1.5 o 1.6 non soddisferebbero i requisiti di base della specifica. Chiamare SetPDFUAMode per elevare automaticamente la versione a 1.7.
Version 3.31.0
Corretto
- Ora sono supportati gli ID degli elementi di struttura e l'associazione delle intestazioni di tabella. SetStructElemID assegna un identificatore stringa univoco (/ID) all'elemento di struttura attualmente aperto; gli ID vengono raccolti in un name tree /IDTree sulla radice dell'albero di struttura quando il documento viene salvato, consentendo agli strumenti di accessibilità e ai riferimenti incrociati di localizzare gli elementi tramite ID (ISO 32000-1 §14.7.4). SetStructElemHeaders associa la cella di tabella corrente (TD o TH) a una o più celle di intestazione tramite un elenco separato da virgole di ID precedentemente assegnati, scrivendo l'array /Headers nel dizionario dell'owner di attributo Table (ISO 32000-1 §14.8.5.7.2). Insieme queste due funzioni supportano il markup di tabella complesso per PDF/UA-1 (ISO 14289-1 §7.10) e WCAG 2.x SC 1.3.1. Entrambe le funzioni sono disponibili nella libreria Delphi, ActiveX e nelle interfacce DLL. AddTagAttribute ora gestisce correttamente anche l'attributo /Headers con valori delimitati da virgole scritti come array di stringhe di testo PDF.
Version 3.30.1
Aggiunto
- GetPDFUADiagnostics ora include un controllo HEADING-LEVEL-SKIP:N che rileva i salti di livello di intestazione nell'ordine del documento (ad es. un H1 immediatamente seguito da un H3 senza un H2 in mezzo). Il controllo esegue una traversata in pre-order dell'intero albero degli elementi di struttura e conta ogni occorrenza in cui il livello di intestazione successivo supera il precedente di più di uno. Gli elementi H generici sono trattati come H1. Tornare a un'intestazione di livello superiore (H3 → H1) non viene conteggiato come salto. Il criterio di successo 1.3.1 di WCAG 2.x e ISO 14289-1 §7.1 richiedono che le intestazioni siano nidificate senza lacune.
Version 3.30.0
Modificato
- Ora sono supportati gli attributi degli elementi di struttura per i documenti PDF taggati e PDF/UA. Tre nuove funzioni API consentono di allegare attributi all'elemento di struttura attualmente in costruzione sullo stack di tag: AddTagAttribute (generale, qualsiasi owner/nome/valore), SetStructElemScope (wrapper di convenienza che imposta l'attributo /Scope sotto l'owner Table, per le celle di intestazione TH — ISO 32000-1 §14.8.5.7.2) e SetStructElemBBox (wrapper di convenienza che imposta l'attributo /BBox sotto l'owner Layout, per figure e altri elementi visivamente posizionati — ISO 32000-1 §14.8.5.4). Quando il documento viene salvato, gli attributi vengono scritti come dizionari di attributi /A in ciascun elemento di struttura; più attributi dello stesso owner vengono raggruppati in un dizionario, e gli attributi di owner diversi vengono scritti come array di dizionari. Tutte e tre le funzioni sono disponibili nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.29.1
Aggiunto
- GetPDFUADiagnostics ora include due controlli aggiuntivi: se qualche elemento di struttura Figure nel documento è privo di un valore di testo Alt (segnalato come FIGURE-NO-ALT:N, secondo ISO 14289-1 §7.5 e ISO 32000-1 §14.9.3) e se ci sono elementi di struttura ancora aperti perché EndTag non è stato chiamato (segnalato come STRUCT-UNCLOSED:N). Il controllo delle figure esegue una visita ricorsiva completa dell'albero degli elementi di struttura, coprendo gli elementi a tutte le profondità di nidificazione.
Version 3.29.0
Modificato
- GetPDFUADiagnostics è una nuova API diagnostica che controlla un documento per potenziali problemi di conformità PDF/UA-1 (ISO 14289-1) e restituisce un elenco di risultati separati da newline. Vengono eseguiti sei controlli: se MarkInfo/Marked è impostato (PDF taggato), se il catalogo del documento ha una voce /Lang, se ViewerPreferences/DisplayDocTitle è true, se i metadati XMP contengono un identificatore pdfuaid:part, il numero di annotazioni non esenti senza una voce Contents e il numero di file incorporati senza una voce AFRelationship. Ogni risultato è identificato da un codice breve (ad es. LANG-MISSING, ANNOT-NO-CONTENTS:3) seguito da una descrizione leggibile dall'uomo. Restituisce una stringa vuota quando non vengono trovati problemi. Disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.28.5
Modificato
- Miglioramento dell'accessibilità delle annotazioni PDF/UA-1: quando un'annotazione FileAttachment non ha una voce Contents e nessun campo /T, viene ora utilizzato come descrizione accessibile di fallback il nome di file dalla specifica del file incorporato dell'annotazione (/FS /UF o /F). Questo completa la catena di fallback per Contents delle annotazioni: /T → URI del Link → nome dello Stamp → nome file di FileAttachment. Gli screen reader ricevono il nome del file allegato invece del silenzio, soddisfacendo ISO 14289-1 §7.18.1 per i tipi di annotazione più comuni.
Version 3.28.4
Modificato
- Miglioramento dell'accessibilità delle annotazioni PDF/UA-1: quando un'annotazione Stamp non ha una voce Contents (o ne ha una vuota) e nessun campo /T, viene ora utilizzato come descrizione accessibile di fallback il nome del tipo di stamp dalla voce /Name dell'annotazione (ad es. "Approved", "Draft", "Confidential", "Final"). Questo estende la catena di fallback Contents delle annotazioni introdotta in v3.28.3 per coprire le annotazioni stamp, che sono comuni nei flussi di lavoro che coinvolgono documenti revisionati o approvati e spesso mancano di un valore Contents esplicito.
Version 3.28.3
Modificato
- Miglioramento dell'accessibilità delle annotazioni PDF/UA-1: quando un'annotazione Link non ha una voce Contents (o ne ha una vuota) e nessun campo /T, viene ora utilizzato come descrizione accessibile di fallback l'URI dall'azione URI dell'annotazione. Questo si applica solo durante l'elaborazione di SetPDFUAMode e solo alle annotazioni Link che portano un'azione /URI. Gli screen reader ricevono l'URL come etichetta di ultima istanza, soddisfacendo ISO 14289-1 §7.18.1 nel caso comune in cui gli autori creano collegamenti ipertestuali senza fornire una descrizione leggibile dall'uomo.
Version 3.28.2
Modificato
- SetEmbeddedFileAFRelationship è una nuova API per impostare esplicitamente il valore AFRelationship sul dizionario della specifica del file di un file incorporato. Richiesta da ISO 14289-1 (PDF/UA-1) §7.11, consente ai chiamanti di specificare la relazione semantica di un file incorporato con il contenuto del documento scegliendo tra i cinque valori validi: Source, Data, Alternative, Supplement o Unspecified. Quando SetPDFUAMode è attivo, a qualsiasi file incorporato senza una chiave AFRelationship viene assegnato automaticamente Unspecified; utilizzare questa funzione per sovrascrivere quel valore predefinito prima del salvataggio. Disponibile nella libreria Delphi, ActiveX e nelle interfacce DLL.
Version 3.28.1
Modificato
- Quando SetPDFUAMode viene chiamato su un documento i cui metadati XMP portano il titolo predefinito generico della libreria piuttosto che uno specifico del documento, il titolo viene ora sostituito automaticamente con il valore della voce Title /Info del documento (se presente). Ciò garantisce che il pacchetto XMP pdfuaid:part-1 rifletta il titolo effettivo del documento piuttosto che un segnaposto, soddisfacendo le aspettative dei verificatori PDF/UA-1.
- Il parser XMP (LoadFromString) ora legge il valore dc:title dai metadati XMP esistenti quando un documento viene caricato, in modo che il round-trip di un PDF che ha già dc:title preservi correttamente quel titolo invece di tornare al segnaposto predefinito.
Version 3.28.0
Modificato
- BeginArtifactEx(ArtifactType, ArtifactSubtype) è una nuova API per PDF taggato che estende BeginArtifact per esprimere sia il /Type dell'artifact che il /Subtype Pagination in una singola chiamata. Quando entrambi i parametri non sono vuoti, l'operatore scritto è /Artifact << /Type /T /Subtype /S >> BMC, abilitando artifact Pagination completamente specificati come intestazioni e piè di pagina secondo ISO 32000-1 §14.8.2.2.1. Se solo un parametro non è vuoto, viene utilizzata la corrispondente forma a chiave singola. Vengono esportati anche i punti di ingresso DLL DLBeginArtifactEx e DLBeginArtifactExA.
Version 3.27.2
Corretto
- BeginArtifact ora distingue correttamente i tipi di artifact dai sottotipi di pagination. Quando l'argomento è Pagination, Layout o Page (tipi di artifact secondo ISO 32000-1 §14.8.2.2.1 Tabella 330), l'operatore di contenuto marcato scrive /Type invece di /Subtype. Altri valori come Header, Footer e Watermark continuano a essere scritti come /Subtype. Questo corregge l'output precedentemente errato che scriveva /Subtype /Pagination quando il chiamante intendeva contrassegnare un artifact di pagination.
Version 3.27.1
Modificato
- Quando la modalità PDF/UA è attiva e il documento contiene file incorporati, ogni dizionario di specifica del file che manca di una voce AFRelationship la riceve ora automaticamente al momento del salvataggio. Il valore scritto è /Unspecified, soddisfacendo il requisito ISO 14289-1 §7.11 che ogni file incorporato porti una chiave AFRelationship. Ciò si applica sia ai file aggiunti tramite EmbedFile sia ai file incorporati già presenti in un documento caricato.
Version 3.27.0
Modificato
- AddRoleMap(CustomType, StandardType) è una nuova API per PDF taggato che registra una mappatura da un nome di tipo di elemento di struttura personalizzato (non standard) a un tipo di struttura PDF standard. Quando viene salvato, le mappature vengono scritte nel dizionario RoleMap nella radice dell'albero di struttura, soddisfacendo il requisito ISO 14289-1 §7.1 per i documenti che utilizzano nomi di tag specifici dell'applicazione. Possono essere registrate più mappature; le chiavi duplicate vengono sovrascritte dall'ultima chiamata. Vengono esportati anche i punti di ingresso DLL DLAddRoleMap e DLAddRoleMapA.
Version 3.26.0
Modificato
- BeginTagEx(TagType, AltText, ActualText, Lang) è una nuova API per PDF taggato che estende BeginTag con un attributo esplicito di lingua naturale. Quando Lang non è vuoto viene scritto nell'attributo /Lang dell'elemento di struttura, abilitando l'annotazione di lingua per elemento richiesta da ISO 14289-1 §7.2 per i documenti multilingue. Passare una stringa Lang vuota si comporta in modo identico a BeginTag. Vengono esportati anche i punti di ingresso DLL DLBeginTagEx e DLBeginTagExA.
Version 3.25.1
Modificato
- I font TrueType non sottoinsiemizzati caricati con la code page predefinita di Windows (WinAnsiEncoding) ora ricevono un flusso CMap ToUnicode, abilitando l'estrazione affidabile di testo Unicode e il copia/incolla per questi font. In precedenza un flusso ToUnicode veniva scritto solo quando era presente un override esplicito della code page o un array Differences; il percorso comune della codifica predefinita ne era privo.
- La stessa correzione si applica ai font TrueType caricati con una code page non predefinita esplicita ma senza array Differences, e ai font caricati tramite il formato di font impacchettato.
Version 3.25.0
Modificato
- Quando la modalità PDF/UA è attiva, le annotazioni non esenti (tutti i tipi tranne Widget, PrinterMark e TrapNet) prive di una voce Contents non vuota la ricevono ora automaticamente al momento del salvataggio. Viene utilizzato come fallback il valore /T (titolo / autore) dell'annotazione, soddisfacendo ISO 14289-1 §7.18.1 per le annotazioni che portano un titolo ma nessuna descrizione accessibile esplicita.
Version 3.24.0
Modificato
- Quando la modalità PDF/UA è attiva, i campi modulo interattivi privi di una voce TU (tooltip / descrizione alternativa) la ricevono ora automaticamente al momento del salvataggio. Viene utilizzato come valore di fallback il nome parziale del campo (voce /T), garantendo che gli screen reader possano identificare ogni campo. I pulsanti push sono correttamente esclusi da questo requisito secondo ISO 14289-1 §7.18.4.
Version 3.23.1
Modificato
- GetInformation(200) restituisce '1' quando la modalità PDF/UA-1 è attiva sul documento selezionato, consentendo ai chiamanti di interrogare lo stato della modalità di conformità in fase di esecuzione.
- GetInformation(201) restituisce '1' per PDF/A-1a, '2' per PDF/A-1b, o una stringa vuota quando la modalità PDF/A è disattivata.
- GetInformation(313) restituisce la stringa di versione PDF a cui il target di salvataggio è attualmente bloccato, o una stringa vuota per documenti con versione libera.
Corretto
- GetInformation(311) e GetInformation(312) ora restituiscono correttamente la stringa di requisito di versione e il nome della funzionalità dal conflitto di blocco di versione più recente (precedentemente pubblicizzato nella voce v3.20.3 ma non ancora implementato).
Version 3.23.0
Modificato
- SetMarkInfo(Marked) è ora un'API pubblica, consentendo di impostare il flag MarkInfo.Marked indipendentemente dalla configurazione completa PDF/UA-1 eseguita da SetPDFUAMode. Quando Marked è 1, MarkInfo.Suspects viene anch'esso impostato su false come richiesto da ISO 14289-1 §7.18.6.
- Quando la modalità PDF/UA è attiva, tutte le pagine ricevono automaticamente una voce /Tabs /S al momento del salvataggio, soddisfacendo il requisito di ordine delle tab basato sulla struttura di ISO 14289-1 §7.18.4.
- Aggiunta documentazione di riferimento HTML per SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact ed EndArtifact, con tabelle di sintassi complete ed esempi di utilizzo.
Version 3.22.0
Modificato
- BeginTag(TagType, AltText, ActualText) apre un elemento di struttura di PDF taggato nel flusso di contenuto corrente, scrivendo un operatore BDC con un MCID assegnato automaticamente e registrando l'elemento nell'albero di struttura del documento. TagType è uno qualsiasi dei tipi di struttura PDF standard (P, H1, Figure, Table, ecc.). AltText e ActualText sono stringhe di accessibilità opzionali codificate come stringhe di testo PDF (UTF-16BE).
- EndTag chiude l'elemento di struttura aperto più di recente, scrivendo l'operatore EMC corrispondente nel flusso di contenuto.
- BeginArtifact(SubType) contrassegna una regione di contenuto come artifact PDF (artefatto di pagination, sfondo, ecc.), scrivendo un operatore BMC. SubType è opzionale; quando viene fornito viene scritto come /Artifact << /Subtype /SubType >>.
- EndArtifact chiude la regione di artifact con un operatore EMC.
- Al momento del salvataggio, quando sono stati registrati elementi di struttura taggati, la libreria costruisce automaticamente lo StructTreeRoot completo, assegna le chiavi StructParents alle pagine interessate e scrive il number tree ParentTree, soddisfacendo i requisiti ISO 32000-1 §14.7 per il PDF taggato.
- I font Type 1 standard (Helvetica, Times, famiglia Courier, Symbol) e i font Type 1 incorporati con codifica WinAnsi ora ricevono un flusso CMap ToUnicode, abilitando l'estrazione affidabile di testo Unicode e il copia/incolla per questi tipi di font.
Version 3.21.0
Modificato
- SetPDFUAMode(Language) attiva la modalità di conformità PDF/UA-1 (ISO 14289-1): eleva automaticamente il documento a PDF 1.7, scrive MarkInfo.Marked e MarkInfo.Suspects, abilita DisplayDocTitle in ViewerPreferences, imposta Catalog.Lang quando Language non è vuoto e scrive la voce dello spazio dei nomi XMP pdfuaid:part = 1 richiesta da ISO 14289-1 Sezione 6.7.11.
- SetDocumentLanguage(Language) scrive direttamente la voce Catalog /Lang, consentendo di dichiarare la lingua del documento indipendentemente dalla modalità PDF/UA.
- MarkInfo.Suspects viene ora impostato su false ogni volta che MarkInfo.Marked è impostato su true, soddisfacendo il requisito di struttura PDF taggato di ISO 14289-1 (Sezione 7.18.6).
- Encrypt ora forza il flag di permesso CanCopyAccess (copia di contenuto per l'accessibilità) quando il documento è in modalità PDF/UA, come richiesto da ISO 14289-1 Sezione 7.17.
Corretto
- I campi modulo Choice (a discesa) non portano più un valore di tooltip hardcoded senza significato; TU rimane non impostato in modo che il chiamante possa assegnare un'etichetta significativa tramite l'API delle proprietà del campo modulo.
Version 3.20.3
Modificato
- Encrypt e AddSWFAnnotationFromFile ora restituiscono 0 immediatamente con LastErrorCode 602 quando la versione di salvataggio è bloccata al di sotto del minimo richiesto dalla forza di crittografia o dal tipo di annotazione selezionati, invece di procedere silenziosamente e fallire solo al momento del salvataggio.
- GetInformation(311) e GetInformation(312) ora riflettono il requisito di versione in conflitto al momento della scrittura quando una versione bloccata blocca le funzionalità a livello di estensione come AES-256 o le annotazioni RichMedia.
Version 3.20.2
Modificato
- AddU3DAnnotationFromFile ora eleva automaticamente la versione del documento a PDF 1.6 quando un'annotazione 3D viene aggiunta a un documento di versione inferiore, coerentemente con il comportamento di auto-bump della versione di tutti gli altri punti di ingresso API PDF 1.6+.
Version 3.20.1
Modificato
- I target di salvataggio PDF 1.2 sono ora applicati come contratti PDF 1.2 rigorosi. Il salvataggio di oggetti PDF 1.3+ come i dati della Page TrimBox sotto un target PDF 1.2 fallisce prima della scrittura dell'output invece di emettere un file con versioni miste.
- La conformità a livello di estensione PDF 1.7 Adobe è ora parte del preflight di salvataggio. AESV3, AES-256, RichMedia, Projection, i dizionari geospaziali e i subfilter di firma ETSI vengono verificati rispetto all'ExtensionLevel richiesto.
- La crittografia AES-256, le annotazioni RichMedia, i dizionari geospaziali e i subfilter di firma ETSI ora dichiarano la corrispondente voce Adobe Extensions quando PDFlib eleva automaticamente un documento a contenuto di estensione PDF 1.7.
- I salvataggi Append ora utilizzano lo stesso gate di conformità di versione dei salvataggi completi.
- Le DLL runtime PDFium opzionali in bundle sono state aggiornate per Win32 e Win64. GDI+ rimane il renderer predefinito; PDFium rimane opt-in tramite SetPDFiumFileName e SelectRenderer(3).
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 207/207 ciascuna, e C++Builder Win64x GoogleTest ha superato 61 test con 2 test esistenti dipendenti dai sample saltati.
Version 3.20.0
Modificato
- Otto ulteriori punti di ingresso del writer PDFlib ora passano tramite Phase 3 EnsureMinVersion in modo che la versione del documento venga elevata automaticamente al minimo richiesto dalla funzionalità emessa: SetDocumentMetadata (PDF 1.4 - flusso /Metadata XMP) SetPDFAMode(1 or 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- Combinato con l'insieme v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) e l'insieme v3.17.0 (otto voci JavaScript / file incorporato / XFA / SWF), PDFlib ora auto-bump di FVersion attraverso ventuno punti di ingresso del writer.
- NewOptionalContentGroup precedentemente bumpava FVersion direttamente; ora passa tramite EnsureMinVersion in modo che LockSaveVersion sia rispettato e il bump sia registrato in AutoBumpedFeatures.
Version 3.19.0
Modificato
- La conformità di versione PDF in fase di salvataggio e caricamento ora riconosce anche quattro funzionalità precedentemente posticipate: Btn /Ff bit 15 NoToggleToOff (solo radio button) -> PDF 1.4 DeviceN /Subtype /NChannel (raffinamento spazio colore) -> PDF 1.6 FontFile3 /Subtype /OpenType (tipo programma font) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached o ETSI.RFC3161 -> PDF 1.7
- La regola NChannel corrisponde alla forma di array di spazio colore DeviceN [/DeviceN names alternateSpace tintTransform attributes] quando il dizionario attributes all'indice 4 porta /Subtype /NChannel.
- La regola FontFile3 OpenType si attiva solo quando il flusso viene raggiunto tramite una chiave genitore denominata 'FontFile3', in modo che i flussi non correlati che portano per caso /Subtype /OpenType non vengano segnalati.
- La tabella PDFFeatureRules ora contiene 103 regole (99 + 4 nuove).
Version 3.18.6
Modificato
- La conformità di versione PDF in fase di salvataggio e caricamento ora riconosce /AA (additional actions) con consapevolezza del tipo di contenitore: Catalog /AA (trigger a livello di documento) -> PDF 1.4 Annot /AA (trigger di annotazione) -> PDF 1.4 Page /AA (trigger di pagina) -> PDF 1.5
- Il /AA dei campi modulo (PDF 1.2) rimane coperto dal contratto di salvataggio PDF 1.3 esistente; nessuna regola necessaria.
- La tabella PDFFeatureRules ora contiene 99 regole (96 + 3 nuove).
Version 3.18.5
Aggiunto
- Nuova regola: AcroForm /NeedAppearances viene riconosciuto come funzionalità PDF 1.5 secondo PDF 1.5 Tabella 218.
Modificato
- La tabella PDFFeatureRules ora contiene 96 regole (95 + 1 nuova).
Corretto
- La conformità di versione PDF in fase di salvataggio e caricamento ora classifica correttamente Page /Tabs come funzionalità PDF 1.5; in precedenza era classificata erroneamente come PDF 1.4. Il documento di modifiche alla specifica PDF 1.4 (Adobe TN #5409) non elenca /Tabs, e la PDF 1.5 Tabella 8.10 introduce "Tabs (Optional; PDF 1.5)".
Version 3.18.4
Aggiunto
- La copertura di regressione zlib-ng ora include payload di dimensioni limite, dati di scanline simili a PNG, flussi multi-blocco memorizzati e flussi zlib noti tra i test runner Delphi e C++Builder.
Modificato
- PDFlibZLib ora utilizza sempre il backend di oggetti zlib-ng statico in bundle nelle build normali della libreria, rimuovendo il percorso di fallback System.ZLib rimanente.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 194/194 ciascuna, e C++Builder Win64x GoogleTest ha superato 58 test con 2 test esistenti dipendenti dai sample saltati.
Version 3.18.3
Modificato
- Le demo Delphi e C++Builder che generano output PDF o di testo ora aprono automaticamente il documento generato dopo un salvataggio riuscito.
- L'imballaggio del programma di installazione ora mantiene gli artefatti di build fuori dalle cartelle delle demo e rende i sample C++Builder più i moduli DLL e ActiveX/OCX componenti opt-in; i loro file corrispondenti vengono installati solo quando il componente è selezionato.
Version 3.18.2
Modificato
- Le demo Delphi e C++Builder EditFormField ora cancellano /NeedAppearances prima di aggiornare i valori dei campi, in modo che ogni campo di testo modificato riceva un flusso di apparenza normale aggiornato nel PDF salvato.
- Ciò mantiene il flusso /AP salvato sincronizzato con il valore /V memorizzato ed evita differenze dipendenti dal viewer in cui mettendo a fuoco il campo si rivela testo mancante dall'apparenza statica del campo.
Version 3.18.1
Modificato
- La conformità di versione PDF in fase di salvataggio e caricamento ora riconosce anche i flag /Ff dei campi modulo a livello di bit e il bit AcroForm /SigFlags AppendOnly: /Ff bit 21 (FileSelect, maschera 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, maschera 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, maschera 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, maschera 8388608) -> PDF 1.4 /Ff bit 25 (Comb, maschera 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, maschera 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, maschera 2) -> PDF 1.5
- L'ereditarietà /Parent non viene seguita: solo i dizionari che portano esplicitamente /Ff o /SigFlags attivano le regole.
- La tabella PDFFeatureRules ora contiene 95 regole (87 + 8 nuove a livello di bit).
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 191/191 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.18.0
Modificato
- La conformità di versione PDF in fase di salvataggio e caricamento ora riconosce anche nove ulteriori funzionalità sub-chiave e a livello di bit: flag di annotazione a livello di bit (maschera /F): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 sub-chiavi distintive di catalogo e pagina: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (page geospatial viewport) -> PDF 1.6 /Collection (catalog portable collection) -> PDF 1.7
- La tabella PDFFeatureRules ora contiene 87 regole (78 a livello di capitolo + 9 sub-chiave / a livello di bit).
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 189/189 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.17.0
Modificato
- Otto ulteriori punti di ingresso del writer PDFlib ora passano tramite Phase 3 EnsureMinVersion in modo che la versione del documento venga elevata automaticamente al minimo richiesto dalla funzionalità emessa: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - azioni JavaScript) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - allegati file) SetXFAFromString (PDF 1.5 - moduli XFA) AddSWFAnnotationFromFile (PDF 1.7 - annotazione RichMedia)
- Combinato con l'insieme v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) PDFlib ora copre tredici punti di ingresso del writer ad alta versione end-to-end.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 187/187 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.16.3
Aggiunto
- Nuova API PDFlib: LockSaveVersion(Version) blocca il documento alla Version e impedisce alla Phase 3 EnsureMinVersion lato writer di auto-elevarlo al di sopra. UnlockSaveVersion cancella il blocco.
Modificato
- Il gate di salvataggio è invariato: le funzionalità emesse dal writer al di sopra della versione bloccata producono ancora LastErrorCode 602 al momento del salvataggio, invece di elevare silenziosamente l'header.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 184/184 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.16.2
Modificato
- I PDF caricati ora espongono una vista solo-contributore della rilevazione di funzionalità in fase di caricamento tramite GetInformation(103) ("ContributorFeatures"). L'elenco contiene solo le funzionalità la cui versione minima richiesta è strettamente maggiore di HeaderVersion (chiave 100), quindi risponde direttamente alla domanda "perché la versione effettiva è superiore all'header del file?".
- GetInformation(101) ("DetectedFeatures") è invariato e continua a elencare ogni funzionalità corrispondente indipendentemente dal contributo.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 181/181 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.16.1
Aggiunto
- Estesa la copertura dei test di rilevazione lato loader con sei fixture sintetici aggiuntivi: ExtGState di trasparenza in-page (nessun bump di versione), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), /OCProperties + contenuto OCG (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), una fixture di combinazione multi-funzionalità e un controllo di stabilità snapshot.
Modificato
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 179/179 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.16.0
Aggiunto
- Nuove chiavi GetInformation: 100 restituisce HeaderVersion (letterale %PDF-X.Y), 101 restituisce DetectedFeatures (funzionalità corrispondenti in fase di caricamento delimitate da CRLF), 102 restituisce AutoBumpedFeatures (funzionalità che hanno attivato EnsureMinVersion lato writer delimitate da CRLF).
Modificato
- I documenti PDF caricati ora passano attraverso una fase di rilevazione di versione guidata dal contenuto: ogni oggetto indiretto viene esaminato attraverso la tabella funzionalità-versione-minima utilizzata dal gate di salvataggio, e FVersion viene elevato al di sopra del valore letterale dell'header %PDF-X.Y quando il contenuto richiede effettivamente una versione superiore. Ad esempio una voce /UserUnit di pagina eleva la versione effettiva a PDF 1.6 anche quando l'header del file dice PDF 1.4.
- Il gate di salvataggio non è influenzato: i documenti la cui versione effettiva è stata elevata al caricamento, poi esplicitamente downgradata con SetInformation(0, ...), producono ancora LastErrorCode 602 al momento del salvataggio.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 173/173 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.15.0
Modificato
- I punti di ingresso del writer che producono funzionalità che richiedono una particolare versione PDF minima ora elevano automaticamente la versione PDF del documento. Chiamare SetTransparency su un documento contrassegnato come PDF 1.3 ora promuove l'header a PDF 1.4 invece di fallire il salvataggio con LastErrorCode 602.
- Cablato lo stesso auto-bump in SetPageUserUnit (>=1.6), Encrypt con Strength 1/2/3/4 (rispettivamente >=1.4/1.6/1.7/1.7), e le varianti a due pagine di SetPageLayout (>=1.5).
- Modifica di comportamento rispetto a 3.14.x: le applicazioni che precedentemente si affidavano al gate v3.12.6 "il target di salvataggio rifiuta le funzionalità emesse dal writer" ora hanno successo alla versione elevata. I PDF caricati che già contengono funzionalità di versione superiore passano comunque attraverso il gate di salvataggio esistente, quindi caricare un PDF taggato e selezionare PDF 1.3 fallisce ancora con LastErrorCode 602.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 170/170 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.14.3
Modificato
- La conformità di versione PDF in fase di salvataggio ora riconosce anche i restanti tipi di dizionario 3D PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) e i sottotipi di annotazione PDF 1.7 Redact, RichMedia e Projection oltre ai dizionari companion /Type /Requirement e /ReqHandler.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 168/168 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.14.2
Modificato
- La conformità di versione PDF in fase di salvataggio ora riconosce anche le funzionalità PDF 1.5: moduli /XFA, /AlternatePresentations, name tree /Renditions, i dizionari multimediali /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers, e il sottotipo di annotazione Screen.
- Salvare come PDF 1.4 ora rifiuta i documenti che portano queste funzionalità con LastErrorCode 602.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 166/166 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.14.1
Modificato
- La conformità di versione PDF in fase di salvataggio ora riconosce anche le funzionalità PDF 1.4: dizionari di PDF taggato /StructTreeRoot /MarkInfo e StructElem, le voci /Lang del documento e /Tabs di pagina, i dizionari /OutputIntents e /OutputIntent, la firma dei diritti di utilizzo /UR3, e i sottotipi di annotazione PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup e Watermark.
- Salvare come PDF 1.3 ora rifiuta i documenti che portano queste funzionalità con LastErrorCode 602.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 165/165 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.14.0
Modificato
- La conformità di versione PDF in fase di salvataggio ora riconosce anche le funzionalità PDF 1.3 come smooth shading, oggetti funzione, spazi colore ICCBased e DeviceN, voci di pagina /TrimBox /BleedBox /ArtBox, CMap /ToUnicode, allegati file e annotazioni /Sound e /Movie, dizionari /Type /Filespec e /Type /EmbeddedFile, le chiavi /Group /EF /Alternates /Mask, e azioni JavaScript.
- I chiamanti PDF 1.2 ora salvano sotto il contratto PDF 1.3: l'header letterale %PDF-1.2 viene preservato, ma il gate accetta le funzionalità PDF 1.3. Le funzionalità PDF 1.4 e successive sono ancora rifiutate con LastErrorCode 602.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 162/162 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.13.0
Modificato
- Refactoring del gate di conformità di versione PDF che rifiuta le funzionalità di versione successiva al momento del salvataggio in un modulo dedicato in modo che l'insieme di regole possa crescere senza fluttuare il core del documento.
- Nessuna modifica di comportamento visibile all'utente rispetto a v3.12.7: le stesse funzionalità fuori versione sono ancora rifiutate con LastErrorCode 602.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 155/155 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.12.7
Aggiunto
- Estesa la copertura dei test automatizzati per il flusso di lavoro di rendering ad accesso diretto PdfToImage sia nelle suite Delphi DUnitX che C++Builder GoogleTest.
Modificato
- Il test runner Delphi VCL GUI ora registra le fixture Syntax e XRef, allineandosi alla copertura del runner di console.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 147/147 ciascuna, e C++Builder Win64x GoogleTest ha superato 57/57.
Version 3.12.6
Modificato
- Salvare come PDF 1.3, 1.4, 1.5, 1.6 o 1.7 ora impone la versione selezionata come contratto di output di salvataggio completo.
- I salvataggi completi rimuovono gli override /Version del catalogo, rimuovono le voci di estensione e di metadati del catalogo non supportate per i target inferiori e sopprimono i flussi di metadati XMP PDF 1.4 quando si salva come PDF 1.3.
- SaveToFile, SaveToString e SaveToStream ora falliscono con LastErrorCode 602 quando la versione PDF target selezionata è inferiore alle funzionalità ancora presenti nel documento, come trasparenza, contenuto opzionale, JPX, UserUnit, 3D, o funzionalità di crypt-filter AES.
Version 3.12.5
Aggiunto
- Aggiunta copertura di regressione per escape di stringhe letterali sconosciuti e sequenze di escape ottali/non ottali miste.
Modificato
- Migliorato il parsing delle stringhe letterali PDF 1.7 in modo che le sequenze di escape sconosciute ignorino il backslash come richiesto dallo standard.
- Gli escape ottali delle stringhe letterali ora consumano solo cifre ottali e preservano una cifra non ottale successiva come dati stringa regolari.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 141/141 ciascuna.
Version 3.12.4
Aggiunto
- Aggiunta copertura di regressione per i delimitatori di nome di parentesi graffa destra e le voci sparse di oggetto compresso dello stream xref.
Modificato
- Migliorato il parsing lessicale PDF 1.7 in modo che gli oggetti nome ora si fermino correttamente al delimitatore di parentesi graffa destra.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 139/139 ciascuna.
Corretto
- Corretto il caricamento SmartAccess delle voci di oggetto compresso dello stream xref il cui numero di stream di oggetti è maggiore della lunghezza in byte del PDF.
Version 3.12.3
Aggiunto
- I nuovi PDF cifrati con AES ora scrivono i valori Length del crypt-filter come lunghezze di bit, allineandosi al contratto del dizionario del crypt filter PDF 1.7.
Modificato
- Migliorata la compatibilità dei documenti cifrati PDF 1.7 per i file con security handler standard che utilizzano StrF, StmF, EFF, Identity, None, o crypt filter denominati in stile StdCF.
- I flussi di metadati ora rispettano EncryptMetadata=false durante i flussi di lavoro di decifratura, cifratura e copia/salvataggio invece di essere elaborati come flussi ordinari.
- I flussi di file incorporati ora portano /Type /EmbeddedFile e utilizzano il percorso di decisione del crypt-filter per file incorporati quando i documenti cifrati vengono caricati o salvati.
- I flussi di file incorporati esterni ora promuovono FDecodeParms a DecodeParms quando FFilter viene promosso a Filter, preservando i parametri di decodifica del flusso.
- I valori Prev/XRefStm dello stream XRef e gli offset numerici grandi ora mantengono la precisione a 64 bit attraverso i percorsi del parser e SmartAccess.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 137/137 ciascuna.
Version 3.12.2
Modificato
- Migliorata la compatibilità di decodifica dei flussi PDF 1.7. La decodifica generica del flusso ora rispetta /DP come alias di DecodeParms, risolve le voci dell'array di parametri di decodifica indiretti e accetta le abbreviazioni dei filtri standard /AHx e /LZW.
- L'output PDF per file di grandi dimensioni ora scrive gli offset xref, startxref, di linearizzazione e ByteRange della firma digitale attraverso percorsi di formattazione a 64 bit invece di restringere quei valori attraverso helper interi a 32 bit.
- I documenti caricati ora trattano una voce /Version del catalogo come versione PDF effettiva quando è più recente della versione dell'header del file.
- Validazione: le suite Delphi Win32 e Win64 DUnitX hanno superato 134/134 ciascuna.
Corretto
- I trailer dello stream xref riscritti non conservano più le chiavi DecodeParms solo per stream quando PDFlibPas li salva come dizionari trailer classici.
Version 3.12.1
Modificato
- I PDF generati ora si aprono con la prima pagina dimensionata all'altezza disponibile della finestra del viewer, in modo che l'intera prima pagina sia visibile dall'alto in basso al massimo zoom che si adatta alla finestra. Configurare un OpenAction personalizzato (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) sul documento per sovrascrivere questa impostazione predefinita.
Version 3.12.0
Aggiunto
- Aggiunti stub CRT malloc/calloc/realloc/free allineati a 32 byte per le librerie C statiche e corretto TPDFJPEGImage.Compress per rilasciare i buffer jpeg_mem_dest attraverso lo stesso percorso C free che li ha allocati.
- Espanse le note di validazione pubbliche per evidenziare la rigorosa copertura automatizzata dietro questa release: build della libreria, round trip di compressione, output /FlateDecode di HelloWorld, rendering JPEG, flussi di lavoro di immagini, font, moduli, sicurezza, firma, stampa e flussi di lavoro derivati dalle demo C++Builder.
Modificato
- I backend statici Windows ora includono oggetti SIMD NASM libjpeg-turbo per Win32 e Win64, più oggetti di dispatch SIMD x86 zlib-ng per l'insieme zlib-ng Win64x.
- Rielaborati gli script di rebuild zlib-ng in modo che le build Win64x bcc64x e le build diagnostiche MSVC compilino i file sorgente generici, SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ e AVX2 con flag di funzionalità per file invece di affidarsi a un unico switch globale del compilatore.
Version 3.11.0
Aggiunto
- Aggiunto un piccolo oggetto bridge zlib-ng per le build Win64 in modo che il codice Pascal mantenga punti di ingresso stabili compatibili con zlib mentre Delphi e C++Builder consumano i propri insiemi di oggetti compatibili con il linker.
Modificato
- Commutata la compressione e decompressione Flate di Windows a zlib-ng in modalità compatibile con zlib. Win32, Delphi Win64 e C++Builder Win64x ora collegano insiemi di oggetti statici zlib-ng con ABI corrispondente da Lib\thirdparty\Win32, Lib\thirdparty\Win64 e Lib\thirdparty\Win64x.
- Aggiornati tutti i progetti demo C++Builder per definire PDFLIB_CPPBUILDER, allineandosi al runner GoogleTest e prevenendo che le demo Win64x colleghino gli oggetti zlib-ng Delphi Win64.
Corretto
- Il percorso Win64 non passa più tramite l'unità System.ZLib di Delphi, quindi la compressione/decompressione dei flussi PDF può beneficiare del backend zlib-ng proprio come la build a 32 bit.
Version 3.10.3
Aggiunto
- Estesa la suite GoogleTest C++Builder per coprire ogni demo sotto Demo\C++Builder. Il layout phase-1 a 7 fixture è cresciuto a 15 fixture / 52 casi GoogleTest, tutti superati su Win64x. Demo appena coperte: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (cambio renderer), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging.
Version 3.10.2
Aggiunto
- Aggiunto un runner GoogleTest C++Builder sotto Tests\C++Builder che esercita Lib\PDFlibrary.pas attraverso le stesse intestazioni HPP emesse da {$JPHNE} utilizzate dalle demo C++Builder. La prima fase rispecchia sette scenari Delphi core (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, rendering PdfToImage) come 17 casi GoogleTest, tutti superati su Win64x.
- Estesa la suite Delphi DUnitX con Tests.Print che copre le demo PrintPDF e ShowPrinterBins (enumerazione stampante predefinita, configurazione stampante personalizzata, opzioni di stampa, lavoro di stampa con redirect su file) e un test di cambio renderer in Tests.Render che esercita la selezione del motore GDI+ / PDFium / Cairo della demo MultiFunction sullo stesso PDF di origine.
Version 3.10.1
Aggiunto
- Aggiunte 57 dimensioni di pagina denominate a SetPageSize, in modo che gli stessi nomi canonici dei formati pagina funzionino anche qui: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves.
Version 3.10.0
Aggiunto
- Aggiunte versioni native C++Builder per ogni sample Delphi sotto Demo. Le demo di creazione PDF, manipolazione di pagine, font, immagini, sicurezza, firma, rendering e stampa possono ora essere compilate ed eseguite da C++Builder senza alcun wrapper lato Delphi.
- Aggiunto un breve Readme.txt inglese a ogni cartella demo Delphi che descrive cosa mostra la demo, l'API su cui si concentra e come eseguirla; una panoramica HTML in Demo\Delphi\index.html collega tutte loro raggruppate per argomento.
Modificato
- Ogni nuova demo si trova in Demo\C++Builder\<Name>\ come progetto console che consuma direttamente Lib\PDFlibrary.pas e fornisce i file di input necessari per l'esecuzione.
- Rispecchiato lo stesso Readme.txt per ogni demo C++Builder con una sezione Run riscritta per il flusso di lavoro della console (argomenti argv invece di Open/SaveDialogs); un corrispondente Demo\C++Builder\index.html elenca ogni demo C++Builder con gli stessi gruppi di argomenti.
Corretto
- Corretta una memory leak nella demo ImportEMF (l'istanza TPDFlib veniva creata ma mai liberata).
Version 3.9.14
Modificato
- Riordinate le demo di testo con a capo e di paginazione HTML in modo che ciascuna si concentri sulla propria API e venga eseguita da un singolo pulsante.
- Rinominati due progetti demo (EmbeddedFonts e PdfPermission) in modo che gli eseguibili compilati corrispondano ai nomi delle cartelle invece dei nomi prototipo più vecchi.
Corretto
- Corretta la demo di copia di intervalli di pagine in modo che effettivamente copi le pagine invece di segnalare sempre un errore.
Version 3.9.13
Aggiunto
- Introdotta una suite di test DUnitX automatizzata (runner di console e VCL GUI) che copre le unità utilitarie — buffer, AES, ZLib, Unicode e digest hashing — e i flussi di lavoro a livello di libreria inclusa creazione di documenti, salvataggio su file e su stream, round trip di caricamento e cifratura AES-128/AES-256.
Corretto
- Corretto un bug di posizione del flusso nel lettore di buffer interno: le letture di word a due byte avanzavano il cursore di lettura di quattro byte invece di due. Nei buffer più lunghi di due byte, le letture successive atterravano all'offset sbagliato e restituivano silenziosamente dati errati. L'effetto era più visibile durante l'analisi di strutture dati binarie che intercalano letture di byte e word.
Version 3.9.12
Modificato
- Il rendering di immagini GDI+ ora utilizza per impostazione predefinita un'interpolazione bicubica fluida e di alta qualità quando si scalano immagini raster a risoluzione di schermo o di esportazione. In precedenza l'impostazione predefinita era nearest-neighbour, che produceva artefatti visibili a gradini su piccole immagini (loghi, miniature) ingrandite per anteprima su schermo o esportazione ad alto DPI. I chiamanti che preferiscono la modalità nearest-neighbour più nitida possono ripristinare il vecchio comportamento tramite SetGDIPlusOptions.
Version 3.9.11
Corretto
- Corretto il rendering Cairo di immagini PDF che utilizzano la trasparenza color-key (un array di intervalli di colori /Mask nel dizionario dell'immagine). In precedenza, quando una pagina conteneva un'immagine con questa forma di trasparenza, il renderer Cairo ometteva interamente l'immagine invece di comporla con lo sfondo della pagina. La correzione deriva un canale alpha per pixel dagli intervalli di color-key dichiarati e rende il risultato come immagine trasparente, producendo un output visivamente coerente con il renderer GDI+.
Version 3.9.10
Corretto
- Corretta una regressione del rendering Cairo in cui tutto il contenuto della pagina successivo a una sequenza di immagini clippate veniva erroneamente confinato al rettangolo di clipping dell'immagine. Le pagine PDF che salvano lo stato grafico, applicano un percorso di clip, dipingono un'immagine, poi ripristinano lo stato — una tecnica di layout comune per immagini incorniciate o bordate — renderizzavano tutto il testo, le forme e i grafici successivi solo all'interno della regione clippata. Il salvataggio e ripristino dello stato Cairo ora mappano correttamente agli operatori PDF q/Q, in modo che la regione di clipping venga scartata dopo il disegno dell'immagine.
Version 3.9.9
Aggiunto
- Aggiunto un motore di rendering PDF basato su Cairo come terza opzione di rendering accanto a GDI+ e PDFium. Chiamare SelectRenderer(2) prima del rendering per attivarlo; il motore richiede cairo.dll dalla cartella DLL\Cairo in bundle. Il rendering Cairo supporta le stesse modalità di output di GDI+: esportazione di file bitmap e stream (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), rendering su contesto di dispositivo e output diretto alla stampante.
Modificato
- La demo MultiFunction View/Print ora espone un selettore di renderer a tre vie in modo che gli utenti possano confrontare l'output GDI+, PDFium e Cairo fianco a fianco sullo stesso documento senza alcuna modifica del codice.
Version 3.9.8
Corretto
- Soppresse due diagnostiche del compilatore spurie nel C-runtime shim Win32 che apparivano in RAD Studio 13.1 e successivi. Un avviso di deprecazione (W1000) veniva sollevato perché un guard di capacità di versione del compilatore non veniva propagato ai compilatori più recenti di Delphi 2009, facendoli compilare contro un'API del gestore di memoria deprecata. Un hint di variabile non utilizzata (H2164) veniva sollevato per una variabile di compatibilità interna necessaria solo per le build Delphi 7; ora è limitata al blocco condizionale di quella versione. Entrambi i problemi erano solo diagnostici senza impatto a runtime.
Version 3.9.7
Aggiunto
- Aggiunto il rendering di pagine opzionale basato su PDFium su Windows, incluso il rendering stream BMP, il rendering su contesto di dispositivo, il rendering in memoria e l'output alla stampante.
Modificato
- Aggiornata la demo Delphi MultiFunction View/Print con un selettore di renderer in modo che gli utenti possano commutare tra il renderer GDI+ esistente e PDFium.
Version 3.9.6
Aggiunto
- Aggiunti script Inno Setup separati per il pacchetto PDFlibPas completo e il pacchetto trial, con esclusioni focalizzate sulla release per metadati di controllo del codice sorgente, output di build, cache IDE, file di agent locali e alberi di sorgenti di terze parti in bundle che non fanno parte del pacchetto consegnato.
Modificato
- Il programma di installazione trial ora compila e impacchetta librerie binarie trial per RAD Studio 11.3, 12.3 e 13.1, più le demo Delphi trial, prima che venga generato l'eseguibile di setup.
Version 3.9.5
Corretto
- Corrette le build della libreria Win32 sotto RAD Studio 9.0 / Delphi XE2. Lo script di build passava un flag di directory di output DCU che esiste solo da Delphi 2010 in poi; il compilatore di XE2 interpretava il flag diversamente, producendo un percorso di output confuso e un errore fatale prima che qualsiasi file sorgente venisse elaborato. Lo script ora seleziona automaticamente il flag appropriato in base alla versione del compilatore target.
- Corretto un guard di versione del compilatore correlato nel codice sorgente della libreria che chiamava una funzione runtime con nome qualificato introdotta in XE4 sotto una condizione XE2+. Le build che hanno come target XE2 e XE3 ora risolvono correttamente l'import di compatibilità corretto.
Version 3.9.4
Corretto
- Corretta la configurazione della stampante per stampanti di rete e condivise da server applicando le impostazioni di vassoio carta, supporto, fronte/retro, qualità e altre impostazioni di stampa tramite l'handle DEVMODE della stampante invece dell'handle del contesto di dispositivo della stampante.
Version 3.9.3
Modificato
- Aggiornato il backend AES in bundle alle sorgenti AES 2018 di Brian Gladman sia su Win32 che Win64. Gli script di build riproducibili ora consentono di ricostruire gli oggetti AES statici dalla sorgente in qualsiasi momento. Un difetto ABI nelle binding Pascal è stato scoperto e corretto nel processo: alle funzioni di cifratura e decifratura AES-CBC mancava la dichiarazione di convenzione di chiamata C, quindi le build Win32 passavano silenziosamente gli argomenti nell'ordine sbagliato dei registri, producendo potenzialmente output cifrato errato. Le build Win64 non erano interessate perché la piattaforma impone una convenzione di chiamata uniforme.
Sicurezza
- Rafforzati gli script di rebuild di terze parti in modo che gli script zlib, JPEG e CRT-stub basati su MSVC possano essere lanciati dalla radice del repository oltre che dalla directory thirdparty; in precedenza richiedevano che la directory di lavoro fosse impostata sulla cartella thirdparty.
Version 3.9.2
Corretto
- Aggiornato il backend JPEG 2000 dal vecchio OpenJPEG 1.5 a OpenJPEG 2.5.4 sia su Win32 che Win64. Entrambe le piattaforme ora utilizzano il linking statico degli oggetti, quindi la codifica e decodifica JPEG 2000 funzionano senza una DLL runtime aggiuntiva. Il codec moderno porta la gestione corrente dell'header JP2/J2K, un'API di stream guidata da callback e bug fix e fix di sicurezza accumulati dal progetto upstream. L'API pubblica TJpeg2000Bitmap è invariata.
Version 3.9.1
Corretto
- Corretto il rendering di pagine JPEG e l'esportazione di immagini dopo l'aggiornamento di libjpeg-turbo, ripristinando la conversione JPG di PdfToImage e l'output TPDFJPEGImage.SaveToStream su Win32 e Win64.
- Corrette le binding ABI Win32 di libjpeg-turbo in modo che callback, allineamento di struttura, campi booleani e destinazioni JPEG basate su memoria corrispondano a libjpeg-turbo 3.1.90.
- Corretta la decompressione del flusso FlateDecode Win32 con il backend zlib 1.3.2 in bundle, ripristinando il caricamento del flusso xref PDF per file come il documento di esempio PdfToImage.
Version 3.9.0
Modificato
- Aggiornato il backend JPEG 2000 in bundle dal vecchio OpenJPEG 1.5 a OpenJPEG 2.5.4. Il caricamento e salvataggio JPEG 2000 ora utilizzano il codec moderno, l'API di stream guidata da callback e la gestione corrente dell'header JP2/J2K preservando l'API pubblica TJpeg2000Bitmap.
Corretto
- L'output JPEG 2000 ora seleziona automaticamente un conteggio di risoluzione OpenJPEG valido per immagini piccole, e il backend statico Win32 non dipende più da export helper MSVCRT mancanti.
Version 3.8.1
Corretto
- Eliminati tutti i 16 avvisi cosmetici del linker W1028 "Bad global symbol definition" su Win32 e Win64. Le rinominazioni a livello di sorgente rimuovono i duplicati lato Pascal ridondanti (jpeg_std_error e gli stub di allocatore jmemnobs ora si risolvono esclusivamente dal layer obj); i tre simboli obj bcc32 / vc64 rimanenti (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table) che devono rimanere risolti dal linker contro i dati lato Pascal vengono ora spogliati dei loro nomi di simbolo COFF tramite una fase di post-elaborazione ObjConv durante thirdparty\build-jpeg-vc64.bat. Nessuna modifica all'API pubblica; output del linker pulito sia per le build Delphi Win32 che Win64.
Version 3.8.0
Sicurezza
- Codec JPEG Win64 aggiornato da libjpeg in stile IJG a libjpeg-turbo 3.1.90, completando la migrazione JPEG iniziata in v3.7.0 (Win32). Entrambi i percorsi Win32 e Win64 condividono ora lo stesso codec JPEG moderno, con gli stessi cicli interni ottimizzati SIMD e oltre 30 fix CVE / fuzz accumulati dall'upstream. API pubblica PDFlibPas invariata.
Version 3.7.0
Sicurezza
- Codec JPEG Win32 aggiornato da IJG libjpeg-6b a libjpeg-turbo 3.1.90. Codifica/decodifica JPEG significativamente più veloce grazie a cicli interni ottimizzati SIMD, più gli oltre 30 fix CVE / fuzz accumulati nell'upstream libjpeg-turbo. L'API pubblica PDFlibPas (classe TPDFJPEGImage, funzioni DumpJPEG) è invariata; i percorsi di codice PDF/JPEG esistenti funzionano più velocemente senza modifiche al codice sorgente richieste.
Version 3.6.0
Modificato
- Il percorso zlib Win64 è invariato in questa release - continua a utilizzare l'unità System.ZLib in bundle con Delphi.
- Attivato lo shim CRT al link-time Win64 PDFlibCLibs.pas (introdotto in v3.5.0) per il percorso zlib Win32, fornendo i simboli memcpy / memset / malloc / free che i nuovi file obj zlib 1.3.2 referenziano.
Sicurezza
- Win32 zlib aggiornato da 1.2.x a 1.3.2. Include i 25+ fix CVE / fuzz standard accumulati upstream dal 1.2.8, più i nuovi punti di ingresso inflateBack9 / inflateTree9 utilizzati dai flussi a finestra a 64 bit. L'API pubblica PDFlibPas (DeflateStr / InflateStr / InflateStrParms) è invariata.
Version 3.5.0
Aggiunto
- Aggiunta infrastruttura di build per OpenJPEG 2.5.4. L'albero sorgente OpenJPEG stesso viene recuperato indipendentemente dall'utente (git clone uclouvain/openjpeg in Lib/thirdparty/OpenJPEG/) in modo che possa essere aggiornato senza toccare la configurazione di build di PDFlibPas.
- Aggiunto Lib/PDFlibCLibs.pas, uno shim CRT a tempo di link Win64 usato dal backend Win64. Colma il divario tra i file obj C compilati con MSVC e i linker Win64 di Delphi (dcc64 / Win64x ld.lld / BCB ilink64), che non includono automaticamente msvcrt.dll.
Modificato
- Aggiunta infrastruttura di build fresca per le librerie C di immagini / compressione in bundle: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Gli script di build sia per Embarcadero bcc32 (Win32) che MSVC cl.exe (Win64) si trovano in Lib/thirdparty/ insieme agli alberi sorgente, in modo che chiunque abbia RAD Studio + VS2022 possa ricostruire i file obj statici da sorgenti pulite.
Version 3.4.0
Sicurezza
- Rafforzata la generazione della chiave di cifratura, del vettore di inizializzazione AES e del blocco di permessi Perms contro fonti di numeri casuali prevedibili. I PDF cifrati prodotti su sistemi avviati in tempi di wall-clock vicini non sono più banalmente correlabili; i documenti AES-256 ora mantengono la loro piena forza chiave.
- Rafforzato il parsing del dizionario delle immagini contro PDF malformati o ostili che dichiarano conteggi Width, Height, BitsPerComponent o componenti DeviceN irragionevoli. I valori fuori intervallo vengono limitati prima di qualsiasi aritmetica sui buffer di pixel, prevenendo crash all'apertura di tali file.
- Rafforzata la traversata cross-reference e dell'albero delle pagine contro documenti le cui catene xref /Prev o link di pagina /Parent formano un ciclo o sono eccessivamente profonde. Il lettore ora rifiuta le strutture malformate in modo pulito invece di ricorrere finché non esaurisce lo stack.
Version 3.3.1
Aggiunto
- Aggiunti commenti inline di motivazione attorno alle correzioni di rendering PDFlibRenderer.pas che erano già presenti nella baseline Git iniziale. I commenti documentano perché SetPen scala le larghezze di tratto tramite la trasformazione canvas attiva e perché gli operatori d0/d1 di CharProc dei font Type 3 devono consumare i loro operandi. Nessuna modifica del comportamento a runtime.
Corretto
- Razionalizzati gli script di build Windows per componente. Le cartelle DLL/, OCX/ e Dylib/ non portano più varianti separate build12-* / build13-*: ciascuna piattaforma ora ha un singolo script build-Win32 / build-Win64 che si fissa al più recente RAD Studio e accetta un argomento opzionale "debug".
Version 3.3.0
Corretto
- Corretto il rendering dei tratti trasformati in PDFlibRenderer.pas. SetPen ora applica la scala della trasformazione canvas corrente alle larghezze di linea PDF prima di chiamare Picasso, prevenendo tratti sovradimensionati o sottodimensionati su percorsi le cui coordinate sono già state trasformate. Ciò corregge i contorni dei glifi Type 3 che potrebbero renderizzare come blocchi spessi e irregolari.
- Corretta la gestione di CharProc d0/d1 dei font Type 3 nel parser del flusso di contenuto. d0 ora consuma i suoi due operandi di larghezza, e d1 consuma i suoi sei operandi di larghezza/bounding box prima dell'esecuzione dei comandi di disegno successivi, prevenendo che operandi obsoleti corrompano la geometria dei glifi o dei percorsi.