Note di rilascio PDFium Delphi Component
Cronologia delle versioni per funzioni visibili all'utente, correzioni, miglioramenti del visualizzatore, generazione documenti, output PDF/A, rendering e aggiornamenti della documentazione di PDFium Delphi Component
Ultima versione
- Ultima versione: 3.137.1; Data di rilascio:
Version 3.137.1
Corretto (Fixed)
- I controlli di revoca online OpenSSL mantengono stato, motivo, errore nativo e certificato interessato della precedente valutazione CRL quando non sono disponibili prove o responder OCSP, conservando la corretta diagnostica delle CRL scadute
Version 3.137.0
Aggiunto (Added)
- Le build native Free Pascal/LCL supportano Linux Qt6 e macOS Cocoa con risoluzione dei font, storage temporaneo privato, caricamento, modifica, form, salvataggio e rendering dei documenti
- La firma macOS Keychain supporta un percorso Keychain locale alla query e l'esportazione offline limitata della catena di certificati, con firma e trasporti timestamp nativi Free Pascal e Delphi
- Il rendering parallelo segnala percorso reale del modulo, indirizzo di inizializzazione e risultato di scaricamento di ogni worker, rifiutando loader nativi che riutilizzano un'immagine PDFium esistente
Corretto (Fixed)
- I binding PDFium Unix mantengono le larghezze LP64 unsigned-long di Callback e buffer, comprese letture di stream personalizzati oltre 4 GiB
- Il rendering LCL nativo rispetta ordine dei byte e layout dei canali bitmap, mantenendo i colori nell'output Cocoa e nel rendering su contesto dispositivo
- Il rendering bitmap, tile e progressivo mantiene l'alpha dello sfondo trasparente per clNone e clDefault indipendentemente dalla query nativa sulla trasparenza della pagina
- La firma identifica correttamente gli algoritmi della chiave pubblica del certificato, incluse le chiavi EC; la verifica CMS macOS mantiene risultati indipendenti di firma esterna e timestamp e segnala esplicitamente la verifica RSA-PSS non supportata
- La validazione dei timestamp PAdES richiede un EKU id-kp-timeStamping critical ed esclusivo; OpenSSL valuta le catene TSA di base senza applicare erroneamente un purpose S/MIME
- I commit atomici dei file Unix mantengono la nuova baseline incrementale se il flush della directory fallisce dopo la sostituzione, esponendo l'eccezione di output già confermato e il risultato di durabilità incompleto
Modificato (Changed)
- I future Delphi POSIX accettano la priorità predefinita del thread e rifiutano richieste di priorità non supportate prima di avviare un worker
Version 3.136.0
Aggiunto (Added)
- Le trasformazioni ICC LittleCMS opzionali e la conversione dei colori del documento usano componenti originali di testo, vettori e immagini a 8 o 16 bit, mantengono le tinte piatte selezionate e segnalano esplicitamente i contenuti non supportati
- La redazione complessa mantiene contenuto supportato in Form XObject annidati, tracciati curvi riempiti e immagini ruotate, riflesse o con shear, con limiti geometrici finiti e report dettagliati delle rimozioni
- La lettura degli oggetti attivi espone limiti indipendenti dei corpi e degli object stream compressi prima di materializzazione e decodifica
Sicurezza (Security)
- La redazione rifiuta testo sostitutivo Tagged, XFA, livelli di contenuto opzionale, clipping del testo e stati di disegno non verificabili, anche con operatori divisi tra stream di contenuto, impedendo l'esportazione di semantica sensibile non supportata
Version 3.135.0
Aggiunto (Added)
- Il confronto di annotazioni e widget AcroForm segnala modifiche alle proprietà indipendentemente dai pixel della pagina, usando nomi stabili, mappature esplicite, report di ambiguità e limiti degli overlay prima e dopo
- Le celle delle tabelle supportano stili di testo misti e immagini con testo alternativo, continuazione opzionale delle celle estese su più pagine, subtotali ed etichette di continuazione mantenendo le relazioni Tagged PDF
Corretto (Fixed)
- La generazione del layout Tagged inizializza la libreria nativa prima di controllarne le capacità, consentendo di usarla come prima operazione su un nuovo componente documento
- Più sostituzioni nello stesso oggetto di testo vengono adattate una sola volta ai limiti originali, rispettando la scala orizzontale minima complessiva ed evitando modifiche intermedie inutili
Version 3.134.0
Aggiunto (Added)
- L'unione della navigazione mantiene destinazioni nominate e link interni tra pagine selezionate, riordinate e ripetute, con politiche esplicite di collisione e verifica transazionale
- La sostituzione del testo con stile aggiunge piani sorgente verificati, anteprime indipendenti, riuso del font nativo, fallback esplicito, adattamento orizzontale limitato e rollback dopo modifiche fallite o annullate
- La firma OpenSSL accetta chiavi private e catene di certificati configurate esplicitamente per RSA-PSS, RSA PKCS#1 v1.5 ed ECDSA, inclusa la risoluzione predefinita del firmatario fuori da Windows
- La verifica OpenSSL aggiunge prove OCSP offline autenticate e online limitate, identità dei certificati in errore e diagnostica opzionale per ogni firmatario CMS
- Il verificatore FPC macOS Security.framework segnala esiti indipendenti di crittografia, attendibilità della catena e revoca con trust anchor espliciti e prove OCSP fornite
Corretto (Fixed)
- L'estrazione dell'URI delle annotazioni di link fornisce tutto il buffer nativo, terminatore compreso, restituendo correttamente i target validi
Version 3.133.0
Aggiunto (Added)
- L'unione transazionale AcroForm supporta pagine selezionate, rifiuto dei campi, rinomina, namespace e campi testo/scelta condivisi compatibili, con risorse, aspetti e ordine di calcolo isolati
- Il provider opzionale di codici a barre genera Code128, QR, DataMatrix e PDF417 e riconosce immagini in scala di grigi, con dipendenze native esplicite e limiti di elaborazione finiti
Corretto (Fixed)
- FormField legge valori ereditati dai campi padre e conferma coerentemente modifiche di testo nei widget condivisi, con valori persistenti dopo salvataggio e riapertura e controlli di sola lettura
- La rigenerazione degli aspetti dei widget di testo ereditati ripristina i valori padre senza lasciare valori ombra nei widget e un'assegnazione riuscita invalida le cache di pagina condivise
Version 3.132.0
Aggiunto (Added)
- L'allineamento opzionale identifica pagine inserite, eliminate e spostate, con modifiche Unicode limitate, regioni visive connesse e overlay di confronto esportabili
- L'unione transazionale della navigazione mantiene gerarchia degli outline, stili, azioni URI e destinazioni rimappate durante importazioni selezionate, ripetute e riordinate
- Il provider OCR Tesseract opzionale supporta diagnostica esplicita delle dipendenze, geometria Unicode delle parole, annullamento e limiti di riconoscimento, con verifica di salvataggio e riapertura del livello ricercabile
Sicurezza (Security)
- La politica RSA-PSS valuta tutti i parametri della firma e della chiave pubblica limitata, rifiutando DER malformato e restrizioni incompatibili di hash, mask, salt o trailer
Corretto (Fixed)
- La verifica di salvataggio degli outline non rifiuta più i segnalibri foglia per differenze nello stato espanso applicabile solo ai rami
Version 3.131.0
Aggiunto (Added)
- WatermarkStamp accetta PDF di destinazione e timbro, un intervallo di pagine e output con soli numeri di pagina, con posizionamento proporzionale per dimensioni miste
- MergePDF mostra in anteprima pagine selezionate e intervallo di destinazione di ogni input prima dell'unione e supporta un solo input per estrarre pagine
Corretto (Fixed)
- MergePDF valida ogni sorgente prima dell'importazione e si ferma per input illeggibili, intervalli non validi, importazioni fallite o annullamento, anziché salvare un'unione incompleta
- WatermarkStamp mantiene file sorgente e modello e salva affidabilmente i numeri di pagina anche quando entrambi gli overlay di timbro sono disabilitati
Modificato (Changed)
- Ogni directory di demo nativi è organizzata attorno a 22 workflow completi; SecurityAudit e XfdfLab sono spostati in Miscellaneous con percorsi dei progetti e navigazione corretti
Rimosso (Removed)
- Eliminata la guida fissa AnnotationsLab; creazione, ispezione e scambio delle annotazioni restano coperti dagli esempi XFDF, estrazione del contenuto e test API
Version 3.130.0
Modificato (Changed)
- Ogni directory dei demo nativi è stata riorganizzata attorno a 24 workflow completi, con nove argomenti API mirati sotto Miscellaneous e una guida dedicata alla scelta del primo demo
- Gli esempi mirati di annotazioni, accessibilità, font, navigazione, esportazione del testo, rendering delle pagine in immagini, preferenze di stampa, interazione e XFA restano disponibili con il proprio sorgente e gli input in bundle
Rimosso (Removed)
- I progetti minimali CJKTextLab e RTLTextLab sono stati rimossi; la creazione di testo Unicode resta disponibile in CreatePDF, e le API per il testo con shaping restano documentate nell'API reference
Corretto (Fixed)
- Corretto il percorso tra le API di accessibilità di C++Builder che falliva quando esportava lo script di sintesi vocale
- Corretto l'esempio di annotazione di C++Builder che usava offset di array errati per le coordinate di evidenziazione
Version 3.129.0
Modificato (Changed)
- Ogni demo nativo è ora autosufficiente: la logica di esempio è stata spostata nei progetti che la usano, i PDF showcase sono stati inclusi nei progetti di visualizzazione ed estrazione interessati, e la directory Demo/Shared è stata rimossa
- I feature tour offline, le anteprime live, i moduli modificabili, i report precompilati, gli allegati, la navigazione, le preferenze di stampa e l'ispezione dello XFA statico restano disponibili anche quando i progetti vengono copiati in modo indipendente
- FontProperties si apre ora con le metriche reali di font e caratteri già visualizzate, e analizza subito il primo oggetto di testo dopo l'apertura di un altro documento
Corretto (Fixed)
- Posizionamento e sfondo della barra delle esperienze di PDFViewer sono stati allineati tra le varianti native, e FontProperties ora rilascia l'associazione con il proprio visualizzatore prima della chiusura
Version 3.128.0
Aggiunto (Added)
- Aggiunta una demo showcase offline di sei pagine con testo ricercabile, grafici vettoriali, immagini incorporate, una tabella, campi AcroForm, segnalibri, link, annotazioni e allegati
- Aggiunte esperienze di visualizzazione a un clic per ricerca del testo, layout a due pagine, lettura notturna, ispezione dei documenti ed esplorazione dei moduli in tutte le varianti native di PDFViewer
Modificato (Changed)
- CreatePDF ora apre un'anteprima live a due pagine con metadati modificabili, opzioni per i contenuti, oggetti immagine e annotazioni reali, oltre a una pagina Unicode opzionale prima del salvataggio
- Gli esempi mirati di visualizzazione, ricerca, estrazione, moduli e navigazione ora aprono workflow già popolati; gli esempi dedicati ad allegati, preferenze di stampa e XFA statico includono dati reali specifici di ciascuna funzione
Corretto (Fixed)
- Corretta la gestione del ciclo di vita del visualizzatore e del focus durante avvio, sostituzione del documento, rigenerazione dell'anteprima e chiusura
- Corretto l'editor dei valori di FormFill in Lazarus che restava disattivato dopo la selezione del primo campo all'avvio
- Corretti il binding del documento in SearchAndSelect e i report di estrazione che omettevano i campi modulo nelle pagine successive o interrogavano header di file non disponibili per i campioni generati in memoria
Version 3.127.0
Modificato (Changed)
- I demo MultiPageViewer usano le API di selezione del testo e degli appunti integrate nel visualizzatore, mantenendo la selezione coerente tra i layout di pagina ed eliminando la modalità di selezione separata al doppio clic
- La guida degli esempi mappa tutti i 35 argomenti dei demo sui rispettivi workflow distinti, e gli esempi console di accessibilità, acquisizione e preflight per Delphi e Lazarus condividono le implementazioni Pascal
Aggiunto (Added)
- XfdfLab può salvare il PDF dopo l'importazione XFDF: la GUI Delphi offre Save PDF, mentre le varianti console accettano un secondo percorso di output esplicito
Corretto (Fixed)
- I demo MultiPageViewer di C++Builder e Lazarus si aprono senza proprietà di modulo non supportate, e tutti i demo MultiPageViewer disconnettono il proprio documento prima della chiusura
- Il workbench di accessibilità di Lazarus genera miniature JPEG delle pagine per il proprio report di revisione HTML
- I demo ExtractImages creano un campione di due pagine contenente oggetti immagine incorporati reali, così il workflow di estrazione predefinito produce quattro immagini
- Il campione console di round-trip XFDF preserva i contenuti delle annotazioni e i dati dell'autore, e rifiuta i percorsi di output PDF in conflitto o già esistenti prima di scrivere l'output
Version 3.126.2
Corretto (Fixed)
- La visualizzazione XFA Full funziona con le impostazioni predefinite di selezione del testo, sostituisce il testo selezionato durante l'input da tastiera, rispetta i campi in sola lettura e gli eventi modulo disattivati, e aggiorna gli handle di pagina visualizzati dopo le modifiche dinamiche del layout
- Le librerie V8 Windows rifiutano attributi XDP malformati, attributi duplicati, usi non validi dei namespace e dichiarazioni XML incoerenti prima di modificare lo stream XFA salvato
Sicurezza (Security)
- L'analisi delle revisioni di firma preserva la proprietà del contenuto di pagina quando widget e oggetti appearance fanno riferimento allo stesso grafo di oggetti, impedendo che successive modifiche alla pagina vengano accettate come aggiornamenti permessi di moduli o annotazioni sotto DocMDP
- I blocchi FieldMDP restano effettivi quando un campo bloccato e un'annotazione condividono un oggetto valore indiretto
Version 3.126.1
Corretto (Fixed)
- La ripaginizzazione XFA dinamica ora aggiorna
TPdf.PageCounteOnXfaPageCountChangedcon il conteggio totale effettivo delle pagine dopo aggiunte o rimozioni, mantenendo la navigazione dell'host sincronizzata con il layout del modulo - Nelle librerie V8 Windows aggiornate la geometria dei widget di input viene rinfrescata dopo le modifiche di layout XFA dinamiche, così testo e aree di hit dell'input restano allineate quando i campi si spostano su un'altra pagina
Version 3.126.0
Aggiunto (Added)
- Le librerie V8 Win32 e Win64 aggiornate preservano i commenti XML e le processing instruction fuori dai dataset live e dai pacchetti del modulo quando salvano documenti XFA single-stream supportati, inclusi input UTF-8 e UTF-16
Corretto (Fixed)
- Il salvataggio XFA single-stream rifiuta codifiche UTF-8 o UTF-16 non valide, tag incompleti, riferimenti a entità non validi e processing instruction malformate invece di riscrivere silenziosamente quegli input; i costrutti non supportati nei pacchetti di dati live, le dichiarazioni DTD e XMLDSig restano fallimenti espliciti del salvataggio
- Copia, taglia e incolla moduli del visualizzatore riprovano brevemente quando un altro thread o applicazione trattiene gli appunti di Windows, lasciando sbollire una contesa transitoria; un taglia fallito continua comunque a preservare il testo originale del campo
Version 3.125.3
Corretto (Fixed)
- Le librerie
pdfium.dllordinarie Win32 e Win64 aggiornate ora riportano un fallimento quando la scrittura finale bufferizzata del PDF fallisce, allineandosi alla correzione già distribuita nelle librerie V8
Version 3.125.2
Corretto (Fixed)
- Le librerie V8 Windows aggiornate preservano il testo XFA modificato attraverso salvataggio e riapertura, inclusi valori vuoti, spazi originali, interruzioni di riga e caratteri Unicode supplementary, per array di pacchetti e documenti XDP single-stream supportati
- Gli errori di esportazione dei pacchetti XFA e i fallimenti del writer finale bufferizzato ora riportano il fallimento del salvataggio nelle librerie V8 aggiornate, senza azzerare lo stato di modifica del documento; i documenti single-stream che contengono costrutti XML non supportati o firme XML vengono rifiutati
- Le librerie V8 aggiornate preservano la piattaforma V8 e l'isolate forniti esplicitamente dall'applicazione host attraverso l'inizializzazione e la distruzione di PDFium
- Un percorso esplicito in
LibraryNameora seleziona esattamente quel runtime in entrambe le modalità motore, inclusaEnableV8Engine=True; un percorso esplicito assente fa fallire il caricamento invece di caricare un'altra libreria in bundle
Version 3.125.1
Corretto (Fixed)
ValidatePdfFilesParallelnon corrompe più il motore PDFium condiviso: i thread worker aprivano e ispezionavano i documenti in concorrenza, il che faceva fallire alcuni documenti con errori di caricamento o access violation e poteva mandare in crash il processo o compromettere le successive operazioni PDF; la parte PDFium di ogni documento viene ora elaborata una alla volta mentre la valutazione delle regole continua a girare in parallelo- Un documento che non può essere aperto durante la validazione batch ora riporta l'errore di caricamento effettivo invece del messaggio successivo "nessun documento PDF attivo"
Version 3.125.0
Aggiunto (Added)
PdfLibraryConfigurationSupportErrorriporta se unaTPdfLibraryConfigurationpuò essere usata con una build di PDFium dotata o meno delle capacità Skia e Fontations richieste
Corretto (Fixed)
- Richiedere
prpSkiasu una build di PDFium senza Skia, opfbpFontationssu una build senza Fontations, ora fa sollevareEPdfErroral caricamento della libreria invece di incontrare un controllo nativo che fermava il processo o lasciava PDFium mezzo inizializzato; la configurazione resta non sigillata così l'applicazione può scegliere altre impostazioni e ritentare il caricamento
Version 3.124.0
Modificato (Changed)
- La validazione PAdES ora applica le signature suite ETSI TS 119 312 alle firme RSA invece di accettare qualunque algoritmo RSA:
AlgorithmPolicyStatusèpcsInvalidper i digest MD2, MD4 e MD5 epcsIndeterminateper SHA-1 e i digest a 112 bit come SHA-224, che non sono più convenuti per la validazione corrente; le firme SHA-1 conservano il risultato complessivo di integrità e vengono segnalate per revisione anziché rifiutate - Una firma RSA il cui
digestAlgorithmdifferisce dal digest fissato dal suo algoritmo di firma (per esempio sha256WithRSAEncryption su un digest SHA-1) ora viene riportata comeppeiSignatureAlgorithmMismatche fallisce l'integrità, così come gli algoritmi di firma RSA su una chiave del firmatario non RSA - Le firme RSA il cui certificato del firmatario non può essere trovato ora riportano
pcsIndeterminate, allineandosi al comportamento già esistente di ECDSA; i digest non riconosciuti e gli OID RSA non di firma riportanopcsUnsupported - Le firme RSA PKCS #1 v1.5 con digest SHA3 e l'identificatore legacy OIW sha1WithRSASignature ora vengono riconosciute come RSA
Version 3.123.0
Aggiunto (Added)
PdfNativeRendererTyperiporta quale renderer seleziona unaTPdfRendererPreferenceper una data build di PDFium, conprpDefaultche si risolve in Skia per i runtime con Skia abilitato e in AGG altrimenti
Corretto (Fixed)
- Abilitare
BrotliEnabledoIsolatePerDocumentinConfigurePdfLibrarynon passa più il rendering da Skia ad AGG quando la preferenza del renderer resta suprpDefault; i runtime in bundle con Skia abilitato ora mantengono il proprio renderer predefinito, così l'output delle pagine non cambia più con queste opzioni non correlate
Version 3.122.2
Corretto (Fixed)
- Le build Free Pascal e Lazarus ora passano nomi file e password a PDFium come UTF-8 in ogni percorso di caricamento (file, memoria, stream personalizzato e caricamento progressivo), così i documenti in cartelle con nomi cinesi, giapponesi o altro non ASCII, e i documenti cifrati con password non ASCII, si aprono anche quando il programma non usa la modalità stringa UTF-8 di Lazarus
Version 3.122.1
Corretto (Fixed)
LastLoadReportora viene sostituito a ogni caricamento fallito: unActive:= Truefallito, che lascia il componente inattivo senza sollevare eccezioni, e le chiamateLoadDocumentoLoadCustomDocumentsemplici fallite riportanoplsFailedcon il testo dell'errore, così il codice batch che riusa un soloTPdfnon vede più il file precedente segnalato come caricato- La pagina della guida di
Activeora descrive il comportamento effettivo in caso di fallimento (nessuna eccezione, componente che resta inattivo, dettagli inLastLoadReport) e il fatto cheFileNamepuò essere cambiato solo mentre il componente è inattivo
Version 3.122.0
Aggiunto (Added)
EPdfAssocFilesErrorinFPdfAssocFilesriporta perchéInjectAssociateFilesnon è riuscito a iniettare: nessun trailer o catalogo leggibile nella sorgente, oppure unaTargetPagenegativa o che indica una pagina inesistente; lo stream di destinazione resta invariato
Modificato (Changed)
SaveAsWithAssociateFileseSaveAsWithAssociateFilesToStreamora sollevanoEPdfErrorquandoTAssocFilesOptions.TargetPageè fuori da0..PageCount; tali valori prima venivano allegati al catalogo del documento, contrariamente al comportamento documentato
Corretto (Fixed)
SaveAsWithAssociateFileseSaveAsWithAssociateFilesToStreamora restituisconoFalsequando il documento salvato non può essere analizzato per l'iniezione, invece di scriverlo invariato e restituireTruesenza i file richiestiSaveAsWithAssociateFilesnon tronca più un file di destinazione esistente prima che l'output sia stato prodotto; un salvataggio rifiutato o fallito lascia il file intatto
Version 3.121.4
Corretto (Fixed)
- I file associati a livello di pagina (
TAssocFilesOptions.TargetPage) ora vengono allegati alla pagina che occupa quella posizione nell'ordine delle pagine del documento; prima i file potevano finire su una pagina diversa quando gli oggetti pagina erano memorizzati nel file in un ordine diverso da quello visualizzato, per esempio dopo riordinamenti o inserimenti di pagine
Version 3.121.3
Corretto (Fixed)
- I file associati salvati con
SaveAsWithAssociateFilesora mantengono intatti nomi file e descrizioni cinesi, giapponesi e altro non ASCII:/UFe/Descvengono scritti come text string PDF Unicode invece di essere convertiti attraverso la code page ANSI di sistema (Delphi) o emessi come byte UTF-8 grezzi (Free Pascal) - Il nome file legacy
/Fora è sempre ASCII stampabile portabile, con i caratteri non ASCII sostituiti da_, così i reader che decodificano/Fcon la propria code page non mostrano più mojibake
Version 3.121.2
Corretto (Fixed)
- I file associati ora codificano i tipi MIME come nomi PDF validi, così valori come
text/plainnon producono più dizionari di file incorporati malformati né impediscono la validazione PDF/A-3
Version 3.121.1
Corretto (Fixed)
- Leggere un'annotazione e riscrivere le modifiche non crea più appearance stream rollover e down vuoti quando questi stream sono assenti, preservando i requisiti di aspetto delle annotazioni PDF/A
Version 3.121.0
Aggiunto (Added)
- La verifica CMS OpenSSL può recuperare certificati intermedi AIA HTTP(S) e CRL quando
OnlineRetrievalè abilitato, con limiti condivisi su timeout, numero di richieste e dimensione delle risposte; i certificati scaricati restano non attendibili finché la catena di fiducia configurata non li valida - Il recupero online usa WinHTTP su Windows e libcurl quando disponibile su Unix con FPC, preserva la validazione dei certificati HTTPS ed espone le configurazioni di trasporto non supportate attraverso la diagnostica delle capacità esistente
Corretto (Fixed)
- La ricostruzione classica dei riferimenti incrociati alloca la tabella di output una sola volta e riempie direttamente gli slot degli oggetti, evitando lavoro quadratico con numeri di oggetti sparsi grandi, conservando i limiti di risorse del parser e le generazioni più recenti degli oggetti
- L'output PDF/X-1a richiede un profilo stampante ICC v2 CMYK strutturalmente valido invece di incorporare silenziosamente il profilo RGB predefinito; i profili non validi fanno fallire l'operazione prima che un file di destinazione esistente venga aperto per la sostituzione
- La validazione PDF/X-1a controlla il profilo incorporato e la sua dichiarazione a quattro componenti, e i report di preflight identificano i profili di output non validi; le etichette di output-condition predefinite seguono il profilo fornito, mentre le etichette esplicite del chiamante vengono preservate
Version 3.120.4
Corretto (Fixed)
- La modalità batch del demo di estrazione tabelle di nuovo elabora ogni PDF della cartella: l'istanza condivisa del documento restava attiva da un file all'altro, quindi dal secondo file in poi veniva sollevato un errore di assegnazione e i file risultavano segnalati come falliti; ora ogni documento ha la sua istanza nelle edizioni Delphi, Lazarus e C++Builder
- Il documento di esempio del demo watermark mantiene le pagine nell'ordine di creazione (1, 2, 3, 4) invece di ruotare la prima pagina in coda tramite una chiamata di inserimento per indice
- I demo XFA e XFDF riportano l'apertura fallita di un documento come messaggio invece di un'eccezione non gestita, il demo degli allegati può avviare un nuovo documento mentre un altro è già caricato, e il visualizzatore Lazarus libera la bitmap che salva
- Il demo di stampa Delphi ora applica i controlli di orientamento, duplex, scala di grigi, qualità e DPI al lavoro di stampa, rispetta il numero di copie scelto nella finestra di stampa, salta le pagine che non riescono a renderizzare e ripristina l'anteprima dopo la stampa
- I demo interattivi il cui loader ingoia i fallimenti di apertura non mostrano più uno stato caricato fuorviante, i file di output dell'estrazione portano un BOM UTF-8, i demo console CJK e RTL portano la console su UTF-8 prima di stampare il testo estratto, e l'input della confidenza interpreta i decimali indipendentemente dalle impostazioni locali di sistema
- Il test del timestamp PAdES ora verifica davvero che il validatore raggiunga il livello B-T dopo l'iniezione del timestamp di firma, con un documento di test con ByteRange autoconsistente
- I test di copertura API e PDF/A non trattano più qualsiasi fallimento di caricamento come uno skip dell'ambiente quando pdfium.dll è caricata, e un nuovo test di regressione copre la decifratura dei documenti i cui valori stringa sono serializzati come literal string da writer di terze parti
Version 3.120.3
Corretto (Fixed)
EncryptDocumentBytesnon scarta più tutti gli oggetti della revisione di base quando il PDF di origine è stato salvato in modo incrementale: la catena classica dei riferimenti incrociati ora viene percorsa attraverso/Prevdalla più recente in giù con vittoria delle voci più nuove, la sorgente viene rifiutata se già cifrata, una parola chiavestreamdeve chiudere un dizionario prima di essere trattata come dati di stream, e l'estensione dell'ultimo oggetto è delimitata dallo xref della sorgente invece che dal primoendobjdentro i suoi byte- I documenti cifrati i cui valori stringa sono serializzati come literal string, prodotti da writer di terze parti, ora si decifrano invece di fallire con un errore di autenticazione
- L'iniezione dei marker PDF/E non numera più il dizionario Info sintetizzato con lo stesso numero dello stream del profilo ICC incorporato quando il trailer della sorgente non ha
/Info, il che faceva puntare/DestOutputProfiledello xref incrementale all'oggetto sbagliato - La validazione PDF/X confronta il valore XMP
pdfxid:GTS_PDFXVersionprivato degli spazi bianchi circostanti, così l'XMP in forma di elemento con padding legittimo non riporta più un falso mismatch dell'Info - La validazione PDF/UA riconosce l'XMP
pdfuaid:partin forma di attributo, espande gli object stream prima delle sue scansioni di byte come gli altri validatori degli standard, controlla il bit/Pdi cifratura anche per i documenti con cross-reference stream e richiede un valoredc:titlenon vuoto; l'iniezione dei marker non emette più una voce di titolo vuota - L'iniezione dei marker PDF/VT non raccoglie e riscrive più due volte ogni oggetto di pagina quando la sorgente porta una gerarchia DPart rotta che fallisce la validazione dopo che la lista delle pagine è già stata riempita
- Firmare a livello PAdES B-T o superiore senza un
TsaUrlora solleva un errore invece di produrre in silenzio una firma B-B, e il document time-stamp B-LTA deriva il proprio nonce invece di reinviare quello del chiamante - L'iniezione del signature time-stamp CMS rifiuta l'input multi-firmatario invece di scartare in silenzio ogni SignerInfo dopo il primo, la versione di SignedData diventa 3 con un sid subjectKeyIdentifier,
certReq FALSEviene omesso dalle richieste di timestamp come vuole DER, e un guasto di trasporto WinHTTP a metà corpo viene riportato come errore di trasporto invece che come corpo DER troncato - L'incorporamento dei font di sistema risolve la faccia reale della TrueType Collection per la famiglia richiesta e la estrae come font autonomo, così richiedere una faccia diversa dalla prima di un
.ttc(per esempio NSimSun) non incorpora e renderizza più la faccia 0 BuildToUnicodeCMapabbina correttamente i glifi ai caratteri surrogate pair ed emette le mappature supplementary come voci bfchar, invece di spostare ogni voce dopo il primo carattere astrale- L'inserimento di testo con shaping, testo CID e OCR controlla il risultato dell'inserimento in pagina prima di registrare l'oggetto per il rollback, così un inserimento fallito non può più lasciare appeso un handle che verrebbe distrutto due volte
- Il rilevamento della parola chiave stream nel compressore e nella riparazione ToUnicode accetta la terminazione di riga CR singola consentita da ISO 32000-1 7.3.8.1
Modificato (Changed)
- La build del pacchetto C++Builder Win64x della trial rimuove un COFF
PDFiumPas.libstantio lasciato da una build completa precedente così le due varianti di import library non possono viaggiare insieme, l'installatore FULL esclude i file di sviluppo solo locali (packagefiles.xml, documenti di stato) dalla sua regola catch-all, e le build dei demo post-installazione fissano la radice dell'IDE tramite la variabilePDFiumPas_BDS_ROOTche gli script di build leggono davvero
Version 3.120.2
Corretto (Fixed)
- Il testo inserito con
AddText,SetText, la generazione del layout e il livello di ricerca OCR ora viene estratto con i suoi code point esatti sia dal documento attivo sia dopo un salvataggio: con l'attuale build di PDFium gli spazi non tornano più come U+00A0 e i trattini non più come U+00AD - I font di sistema vengono incorporati come font CID con chiave sul code point, con un CID per ogni carattere Unicode e un
CIDToGIDMapesplicito, così un glifo condiviso da più caratteri (spazio e spazio unificatore, trattino e trattino morbido, Omega e simbolo Ohm) viene riprodotto fedelmente uno per uno in qualsiasi viewer; i font senza una subtable cmap Unicode mantengono la precedente via di incorporamento
Version 3.120.1
Corretto (Fixed)
- I documenti salvati con font subset non corrompono più il testo estratto al ricaricamento: il CMap ToUnicode che pdfium serializza poteva mappare un CID a due code point diversi (spazi come U+00A0, trattini come U+00AD), e ogni salvataggio completo ora ripara quelle mappature contraddittorie sul posto lasciando la struttura del CMap byte-identica, così il reader PDFium, MuPDF e qpdf estraggono tutti i caratteri originali
- I salvataggi incrementali, gli aggiornamenti sparsi e i documenti con cross-reference stream non vengono mai riscritti dalla riparazione e passano invariati; i file senza una mappatura contraddittoria vengono copiati byte per byte
- La fixture di test
sample.pdfnel repository è stata rigenerata attraverso il percorso di salvataggio riparato, e i test della load policy ora localizzano le voci xref dinamicamente invece di cablare gli offset della fixture
Version 3.120.0
Aggiunto (Added)
- I segnalibri riportano il loro stile di testo outline:
TBookmark.Styleporta i flag corsivo e grassetto letti tramite il nuovo bindingFPDFBookmark_GetStyle, eBookmarkStyleFeaturesAvailabledice se la pdfium.dll caricata lo esporta - Gli allegati espongono la loro relazione associated-file di PDF 2.0:
AttachmentRelationship[], il campoRelationshipdiTPdfAttachmentMetadatae diTPdfAnnotationAttachmentleggono il nome/AFRelationshiptramite il nuovo bindingFPDFAttachment_GetAFRelationship, protetti daAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrasterizza il pattern di tiling con cui un oggetto tracciato viene delineato in una bitmap di proprietà del chiamante tramite il nuovo bindingFPDFPageObj_GetRenderedStrokePattern;StrokePatternRenderingFeaturesAvailableriporta l'esportazioneTPdfLibraryConfiguration.IsolatePerDocumentcorrisponde al flagm_IsolatePerDocumentdiFPDF_LIBRARY_CONFIGversione 7, così le build V8 possono dare a ogni documento il proprio isolate;ConfigurePdfLibraryrifiuta il flag insieme a unV8Isolateesplicito
Modificato (Changed)
- Tutti i 476 export pubblici degli header PDFium correnti sono legati; i tre nuovi punti d'ingresso si caricano in modo tollerante così le distribuzioni con una pdfium.dll più vecchia continuano a funzionare, con le funzionalità corrispondenti che riportano risultati vuoti o
nil
Version 3.119.1
Corretto (Fixed)
- La validazione di fiducia Windows offline limita anche il recupero della revoca ai dati in cache, impedendo richieste di rete implicite CRL o OCSP quando il recupero online è disattivato
- I guasti di revoca Windows preservano l'errore indipendente di fiducia della catena ed espongono motivi di revoca e diagnostiche native ai risultati PAdES e ai report di evidenze
Version 3.119.0
Aggiunto (Added)
- La validazione di fiducia PAdES e i report di evidenze espongono motivi di revoca ed errori nativi separati per le firme del documento e per i timestamp, inclusi campi JSON e colonne CSV aggiunte in coda
Version 3.118.0
Aggiunto (Added)
- I risultati della verifica CMS espongono
RevocationReasoneRevocationError, con diagnostiche OpenSSL per CRL locali scadute, non disponibili e non valide
Corretto (Fixed)
- OpenSSL riporta i certificati esplicitamente revocati come non validi quando la fiducia della catena riesce e la verifica CRL locale conferma la revoca, preservando risultati separati per firma e fiducia
Version 3.117.1
Corretto (Fixed)
- I salvataggi a versione esplicita accettano moduli multipagina validi con cross-reference stream compressi con predictor invece di riportare erroneamente una sezione di riferimenti incrociati malformata
Version 3.117.0
Aggiunto (Added)
- Il rilevamento delle tabelle legge bordi e ombreggiature disegnati come rettangoli riempiti: un riquadro riempito con spessore non maggiore del nuovo
MaxRulingThicknessdiventa una riga di delimitazione e un riquadro riempito più grande contribuisce con i suoi bordi, così le tabelle esportate da Word, Google Docs e dai browser ora vengono trovate come griglie con righe di delimitazione e righe di didascalia unite invece che frammenti di spazi.DetectFilledRulingsdisattiva questo comportamento - Le coordinate delle righe di delimitazione si agganciano entro
RulingSnapToleranceprima che le griglie vengano assemblate, il che unisce in un'unica tabella i pezzi di bordo per cella, i bordi doppi e le celle ombreggiate separate da una piccola intercapedine - Le righe di delimitazione dentro i form XObjects partecipano al rilevamento attraverso le matrici oggetto combinate, controllato da
IncludeFormXObjects ExtractDocumentTablescollega i frammenti di continuazione che terminano dove finisce il contenuto della pagina e riprendono dove inizia il contenuto della pagina successiva, non solo i frammenti che toccano i bordi di pagina, e tiene una singola riga fuoriuscita come parte della sua catena- TableExtractionLab espone
DetectFilledRulingsnel suo pannello opzioni nelle varianti Delphi, Lazarus e C++Builder
Modificato (Changed)
- Il rilevamento tramite spazi ignora le parole che appartengono già a una griglia con righe di delimitazione e richiede che ogni confine di colonna sia un corridoio privo di testo attraverso le righe che separa, così i paragrafi giustificati e gli elenchi puntati non vengono più riportati come tabelle
- Un candidato di continuazione la cui prima riga è una sola cella su tutta la larghezza viene trattato come una nuova tabella con didascalia invece che come resto della precedente
MinRowsaccetta 1 per le griglie con righe di delimitazione; il rilevamento tramite spazi mantiene il suo minimo di due righe, e il budget predefinito diMaxRulingSegmentssale a 16384 perché i riquadri di bordo per cella arrivano in numeri molto maggiori delle linee di griglia tracciate- Il testo delle celle viene assemblato riga per riga dai riquadri delle parole sovrapposti, così le parole i cui riquadri glifo differiscono in altezza mantengono il loro ordine da sinistra a destra
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installatore riportano 3.117.0
Version 3.116.4
Aggiunto (Added)
- TableExtractionLab guadagna l'elaborazione in batch di cartelle:
Batch folderesegueExtractDocumentTablessu ogni PDF di una cartella selezionata, elenca i conteggi delle tabelle per documento, contrassegna per OCR i documenti senza livello di testo e impedisce che i file danneggiati o bloccati facciano abortire l'esecuzione Export all CSVscrive ogni tabella rilevata come<document>-<n>-page<p>-t<i>.csvin una sottocartellatablesper le esecuzioni in batch, o accanto al documento caricato per un singolo file- Un selettore di preset di rilevamento espone
TPdfTableExtractionOptionstarati: Default, Compact columns (MinColumnGap4 conAlignmentTolerance5 per le esportazioni fitte da word processor) e Compact + wide rows (MaxRowGapFactor6 per interlinenze di 1.5-2x) - I documenti che non producono alcuna tabella con il preset Default vengono ritentati una volta con Compact columns sia nell'estrazione a documento singolo che in batch, e le righe del batch riportano quale preset ha prodotto il risultato
Corretto (Fixed)
- L'estrazione in batch apre ogni documento nella sua istanza di
TPdfinvece di ricaricare un unico componente condiviso, il che elimina i guasti di caricamento silenziosi che emergevano come errori di componente inattivo a metà di un'esecuzione di cartella
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installatore riportano 3.116.4
Version 3.116.3
Modificato (Changed)
- L'esempio TableExtractionLab in tutti e tre i toolchain ora scrive il suo documento dimostrativo generato in
TableExtractionSample.pdfaccanto all'eseguibile del demo invece di tenerlo solo in memoria; quando la cartella non è scrivibile il lab ripiega sul precedente comportamento in memoria e lo riporta nella riga di stato TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore riportano 3.116.3
Version 3.116.2
Corretto (Fixed)
- La libreria ha smesso di compilare sulle versioni Delphi più vecchie. L'helper di tick a 64 bit e i codec XML di trusted list e produzione chiamavano
GetTickCount64eCP_UTF8da unit RTL che li portano dentro solo i compilatori più recenti; lo scrittore HTML di reflow incapsulava un letterale stringa CSS oltre il tetto di 255 elementi che quei compilatori impongono a un singolo letterale, e il merge dei dataset XFA assegnava traTBytese un campo dynamic array semplice, cosa che i compilatori pre-XE7 rifiutano. I compilatori vecchi ora leganoGetTickCount64da kernel32 e dichiaranoCP_UTF8localmente quando la RTL non lo fa, il foglio di stile viaggia come letterali corti concatenati e il payload del pacchetto viene copiato elemento per elemento
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore riportano 3.116.2
Version 3.116.1
Aggiunto (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabeDemo\Lazarus\TableExtractionLabtrasformano il rilevamento delle tabelle in un unico flusso di lavoro. Il lab costruisce un documento dimostrativo con una tabella a righe di delimitazione con celle di intestazione unite, una tabella allineata tramite spazi senza righe di delimitazione e una tabella lunga che si spezza su un confine di pagina, poi esegueExtractTablesoExtractDocumentTablesed elenca righe, colonne, celle unite, flag di intestazione, modalità di rilevamento, confidenza e gruppi di continuazione- Il lab esporta la tabella selezionata tramite
TPdfTable.ToCsveTPdfTable.ToJson, modificaDetectRuledTables,DetectWhitespaceTables,DetectContinuationseMinConfidencedal pannello opzioni, e copia il report completo negli appunti TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installatore riportano 3.116.1
Version 3.114.21
Corretto (Fixed)
- La validazione PDF/A riportava un riferimento a file esterno su qualsiasi documento contenente un'annotazione. ISO 19005-1 §6.1.7 vieta
/F,/FFiltere/FDecodeParmsnel dizionario di un oggetto stream, ma il controllo cercava quei nomi in tutto il file, e/Fè anche la chiave dei flag di annotazione che §6.5.3 richiede a ogni annotazione. Il controllo ora guarda solo dentro i dizionari degli oggetti stream
Version 3.114.20
Corretto (Fixed)
- Le firme RSASSA-PSS trasportavano parametri di algoritmo malformati su tutti e tre i backend di firma. RFC 4055 etichetta tutti e quattro i campi di RSASSA-PSS-params; la lunghezza del salt veniva scritta come intero nudo, che un parser legge come inizio di un campo diverso, e il campo trailer veniva scritto anche se il suo valore è uguale al default che DER richiede di omettere. Un verificatore o non riusciva a fare il parsing dei parametri o ripiegava sul salt di default di 20 byte mentre la firma usava 32, così le firme PSS venivano rifiutate. Le firme PKCS#1 v1.5 e ECDSA non erano interessate
Version 3.114.19
Corretto (Fixed)
- Chiedere un timestamp con un digest diverso da SHA-256 costruiva una richiesta che dichiarava quell'algoritmo trasportando un digest SHA-256, e un'autorità di timestamp o lo rifiuta o, peggio, appone il timestamp tal quale. Viene calcolato solo SHA-256, così qualsiasi altro identificatore ora viene rifiutato in toto; un identificatore vuoto continua a selezionare il default SHA-256. L'esempio PDF Viewer per Lazarus e C++Builder legava anche un gestore di espansione segnalibri che il suo file del form nomina ma il suo codice non definisce, il che fallisce quando il form viene caricato; il gestore è portato dall'esempio Delphi
Version 3.114.18
Corretto (Fixed)
- Gli esempi XFA Lab e XFDF Lab per Delphi, e l'esempio XFA Lab per Lazarus, fallivano all'avvio. Ognuno costruisce i suoi controlli dal gestore di creazione del suo form, ma la risorsa del form non era né presente né linkata, così creare il form principale sollevava un errore di risorsa non trovata e il gestore non veniva mai eseguito. Tutti e tre ora portano il file del form e la direttiva che lo incapsula
Version 3.114.17
Corretto (Fixed)
- Due risorse native erano gestite male quando un'operazione falliva a metà. Un render di miniatura fallito liberava il bitmap di destinazione prima di chiudere il render nativo, e quando il render stava disegnando direttamente nei pixel dello stesso bitmap il teardown leggeva poi memoria già rilasciata. Un'allocazione di bitmap fallita in
AddBitmaplasciava l'oggetto immagine appena creato senza proprietario e senza modo di raggiungerlo di nuovo
Version 3.114.16
Corretto (Fixed)
- Leggere testo FDF produceva i caratteri sbagliati sopra
0x7E. La tabella PDFDocEncoding dell'Allegato D.2 di ISO 32000-1 inizia a0x80con il bullet, ma il mapping lo faceva iniziare a0x7F, così l'intero blocco fino a0x9Fera spostato di un posto: una daga veniva letta come bullet, una lineetta emme come ellissi, e così via fino a zcaron, che cadeva fuori dalla fine del tutto. L'Euro a0xA0mancava anch'esso e tornava come spazio unificatore. Nomi e valori di campo dell'FDF importato ora si decodificano correttamente
Version 3.114.15
Corretto (Fixed)
- Validare la fiducia su un documento il cui trailer o catalog non può essere letto scriveva oltre la fine di un array. La passata di conformità molla senza registrare alcuna firma in quel caso, mentre il collettore che gira dopo lavora direttamente sul flusso di byte e può ancora trovare dizionari di firma, così una voce per dizionario trovato veniva scritta in un array che non ne conteneva nessuna. Il conteggio ora viene limitato a ciò che la passata di conformità ha prodotto
Version 3.114.14
Corretto (Fixed)
- Eseguire un piano di riparazione PDF/A applicava passi che il planner aveva bloccato. Un passo è bloccato quando il documento porta firme, il passo le invaliderebbe e il chiamante non lo consente; l'executor provava solo il livello di sicurezza del passo, che non esprime la condizione, così un documento firmato poteva vedere le sue firme invalidate da una riparazione automatica che il piano aveva già rifiutato. I passi bloccati ora vengono saltati e contati come saltati
Version 3.114.13
Corretto (Fixed)
- Aggiungere un timestamp di firma a un valore CMS il cui set di certificati era più grande di 127 byte, cioè ogni certificato reale, corrompeva il risultato. L'helper che individua l'inizio di una struttura annidata camminava all'indietro sugli ottetti di lunghezza e scambiava l'ultimo per il primo, così la fetta che tagliava iniziava ben prima della struttura richiesta. La lunghezza dell'intestazione ora si ricava dalla lunghezza del contenuto, cosa che DER afferma senza ambiguità. I self-check non se ne sono accorti perché i loro certificati di prova erano abbastanza piccoli da usare la forma corta
Version 3.114.12
Corretto (Fixed)
- Gli attributi firmati venivano emessi nell'ordine in cui erano costruiti invece che ordinati per le loro codifiche, come X.690 §11.6 richiede a un DER SET OF. Un verificatore che ri-incapsula il set di attributi prima di digerirlo, come fanno sia OpenSSL che BouncyCastle, calcolava quindi un digest diverso e riportava come invalida una firma PAdES sana. Le firme che questa libreria produce ora verificano in quegli stack; la validazione attraverso il layer Windows non era interessata perché digerisce i byte come ricevuti
Version 3.114.11
Corretto (Fixed)
- Un DER INTEGER negativo più largo di due byte di contenuto veniva codificato con il valore sbagliato. Lo scrittore emula uno shift aritmetico re-iniettando il segno dopo uno shift logico, ma la maschera che usava accendeva ogni bit sopra il byte basso invece di solo il byte che lo shift aveva lasciato libero, così la grandezza ancora contenuta nei byte rimanenti veniva sovrascritta. Il valore -100000 veniva codificato come -34464, per esempio. I nonce delle richieste di timestamp e ogni altro intero con segno di quella dimensione ora si codificano correttamente
Version 3.114.10
Corretto (Fixed)
- La validazione PDF/A non riportava mai la parte di alpha costante della regola di trasparenza in ISO 19005-1 §6.4. L'helper costruisce la sua chiave di ricerca prefissando una barra, e il chiamante ne passava una a sua volta, così cercava
//CAe non trovava nulla. Entrambi i controlli alpha accettavano anche solo i testi esatti1e1.0, il che segnalava come violazione un/CA 1.00completamente opaco; un valore di uno ora viene riconosciuto comunque sia scritto
Version 3.114.9
Corretto (Fixed)
- L'azione URI a livello di pagina restituiva testo rovinato. Il percorso torna dal layer nativo come byte UTF-8 e veniva scritto direttamente in una wide string, che accoppia i byte in code unit a 16 bit e lascia il resto del buffer con la memoria che c'era.
GetPageActionURIora decodifica i byte allo stesso modo in cui il percorso dell'azione a livello di documento faceva già
Version 3.114.8
Sicurezza (Security)
- Sulle destinazioni diverse da Windows i byte casuali dietro ogni chiave di cifratura, salt e vettore di inizializzazione venivano dal PRNG del runtime, il cui seme è una costante a meno che il programma chiami
Randomize. Ogni processo produceva quindi la stessa chiave di cifratura dei file, gli stessi salt/UEe/OE, gli stessi byte/Permse gli stessi nonce AES-GCM, il che rende l'output cifrato di una build Free Pascal su Linux o macOS banalmente recuperabile e ripete un nonce GCM sotto una chiave fissa. I byte ora arrivano da/dev/urandom, e un kernel pool non disponibile solleva un'eccezione invece di ripiegare, come già faceva unCryptGenRandomnon disponibile su Windows
Version 3.114.7
Corretto (Fixed)
- Un object stream malformato poteva far leggere ai punti d'ingresso di compressione e riparazione oltre la fine del buffer decodificato. Gli offset dei membri che uno stream dichiara ora vengono controllati per intervallo e ordine crescente non appena l'header viene analizzato, un conteggio di membri dichiarato più grande di quanto l'header possa contenere viene rifiutato prima di riservare memoria, e l'intervallo di byte di ogni membro viene validato prima di tagliare i suoi spazi bianchi finali invece che dopo
Version 3.114.6
Corretto (Fixed)
- Estrarre le immagini inline produceva un image XObject inutilizzabile. Il dizionario veniva scritto con una barra di troppo prima della sua prima chiave, il che apriva un nome vuoto e spostava ogni chiave sul valore della chiave precedente, e la tabella delle abbreviazioni inline mappava Decode su
Ginvece che suD, così un array/Dveniva perso e l'abbreviazione del valore DeviceGray scambiata per una chiave. Le immagini sollevate da un content stream ora portano un dizionario ben formato e conservano il loro array Decode
Version 3.114.5
Corretto (Fixed)
- Lo shaper HarfBuzz assegnava lunghezze di cluster ai glifi sbagliati nelle sequenze da destra a sinistra e dava lunghezza uno ai glifi che condividono un cluster, come segni diacritici e componenti di legatura. Il
ClusterLengthdi ogni glifo ora si estende dall'inizio del suo cluster al cluster successivo in ordine logico, in entrambe le direzioni, così il mapping carattere-glifo del testo arabo ed ebraico corrisponde a ciò che riporta il backend Uniscribe
Version 3.114.4
Corretto (Fixed)
- Il trasporto timestamp di libcurl passava le sue opzioni numeriche e leggeva il codice di stato HTTP come valori a 32 bit, mentre libcurl prende e restituisce un
longC, che su Linux e macOS è a 64 bit. La query di stato poteva sovrascrivere i quattro byte accanto al suo bersaglio sullo stack, e i valori delle opzioni dipendevano da ciò che la metà superiore del registro conteneva. Entrambi ora usano la larghezza dellongdella piattaforma, cosìFPdfTsaFpcè solido sulle destinazioni LP64
Version 3.114.3
Corretto (Fixed)
- Il backend PKCS#11 copiava i byte grezzi dell'etichetta di un oggetto token direttamente in una string, il che su Delphi fa atterrare byte UTF-8 su code unit UTF-16. Un certificato selezionato tramite
TPdfPkcs11Options.CertificateLabelnon poteva quindi mai corrispondere, eEnumerateCertificatesriportava unLabelTextincomprensibile. Le etichette ora vengono decodificate come l'UTF-8 che lo standard definisce, e il PIN consegnato aC_Loginviene codificato come UTF-8 invece che stretto attraverso la codepage dell'host, così un PIN non ASCII arriva intatto al token
Version 3.114.2
Corretto (Fixed)
- Il firmatario del Keychain di macOS chiedeva a
SecKeyIsAlgorithmSupportedl'operazione sbagliata quando decideva se una chiave accetta RSASSA-PSS: la query nominava l'operazione di decifratura invece della firma, così la risposta era sempre no e ogni firma RSA ripiegava silenziosamente su PKCS#1 v1.5. Una chiave che supporta PSS ora firma con PSS come richiedeTPadesSignerOptions.PaddingScheme, e l'argomento operazione viene passato alla larghezza che il framework dichiara
Version 3.114.1
Corretto (Fixed)
- Le coppie di parentesi annidate nel testo da destra a sinistra si risolvevano con la direzione sbagliata. La regola BD16 di UAX #9 processa le coppie nell'ordine in cui appaiono le loro parentesi di apertura, e una coppia risolta da N0 diventa il forte contesto precedente per una coppia che si apre dopo di essa; le coppie venivano invece processate nell'ordine in cui le loro parentesi di chiusura le completavano, così una coppia interna poteva seguire la lettera che racchiude invece del contesto stabilito dalla coppia esterna. Un testo come una frase araba o ebraica contenente una parentetica con una parentesi annidata ora si impagina come il lettore si aspetta
Version 3.114.0
Aggiunto (Added)
FPdfCryptoSslverifica firme PDF e token timestamp tramite OpenSSL, il quale chiude l'ultimo buco di piattaforma nella validazione delle firme: Linux non aveva alcun backend di verifica CMS.ConfigureSslCmsVerifierlo installa, libcrypto viene risolto per nome a runtime così niente viene linkato contro di esso, e si legano sia la serie 1.1 che la 3.x- La firma e la catena di certificati sono valutate in passate separate, così una firma sana sotto una catena che non raggiunge un trust anchor viene riportata come firma valida con fiducia invalida invece che come firma rotta
ConfigureSslTrustAnchorsaggiunge trust anchor DER all'archivio di sistema, eConfigureSslCrlsfornisce le CRL che un controllo di revoca può consultare. La revoca conta come controllata solo quando una CRL è davvero presente, perché OpenSSL da solo non ne recupera nessuna; senza CRL fornite il risultato dice unsupported invece di far passare una catena non controllataSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersioneSslAbiLayoutriportano cosa si è legato e cosa no, eConfigureSslLibraryPathpunta il backend a una libreria specifica quando i default della piattaforma non ne trovano una
Version 3.113.0
Aggiunto (Added)
TPdfKeychainCmsVerifierverifica firme PDF e token timestamp su macOS tramiteCMSDecodere SecTrust, così la validazione delle firme non è più limitata a Windows.ConfigureKeychainCmsVerifierlo installa, e la stessa unit ora copre entrambe le metà del supporto macOS così comeFPdfCryptoWinfa per Windows- Il controllo di revoca è onorato: quando richiesto, una policy di revoca si affianca a quella X.509 di base, e la disattivazione del recupero online limita la valutazione alle risposte in cache. I checkpoint di avanzamento scattano per le fasi di firma, catena, recupero online e revoca esattamente come li riporta il backend Windows
KeychainVerificationAvailableriporta il supporto alla verifica separatamente dalla firma, poiché le due funzioni richiedono simboli di framework diversi e l'una può essere presente senza l'altra
Version 3.112.0
Aggiunto (Added)
FPdfCryptoMacfirma PAdES con un'identità Keychain di macOS, la controparte dell'archivio certificati di Windows: il certificato e la sua chiave privata provengono dal Keychain e la firma è prodotta daSecKeyCreateSignature, così la chiave non lascia mai il keystore di sistema.ConfigureKeychainSignerProviderlo installa, e nessun modulo deve essere distribuito accanto all'applicazione come invece richiederebbe un backend a token PKCS#11- Il firmatario segue il certificato: una chiave EC firma con ECDSA, una chiave RSA firma con RSASSA-PSS, e dove PSS non è disponibile - un macOS più datato o una chiave che non lo accetta - il padding ripiega su PKCS#1 v1.5 e l'AlgorithmIdentifier emesso lo dichiara invece di rivendicare PSS
KeychainMissingSymbolselenca ogni simbolo di framework che non è stato risolto, così una distribuzione che riporta il backend non disponibile può distinguere un framework assente da un nome sbagliato di questo binding
Version 3.111.0
Aggiunto (Added)
ConfigurePadesCmsVerifierinstalla il backend di verifica CMS usato dal validatore PAdES, così la verifica di firme e timestamp non è più legata a Windows.IPdfCmsVerifierdichiara le due operazioni a cui un backend risponde - detached per una firma PDF, attached per un token timestamp - ePadesCmsVerificationAvailableriporta se un backend è presente
Modificato (Changed)
- I record di risultato e opzioni di verifica sono spostati in
FPdfCryptocomeTPdfCmsVerify*. I nomiTWinCmsVerify*restano come alias, così il codice esistente continua a funzionare e un backend collegato parla gli stessi tipi di quello Windows - Il comportamento su Windows è invariato: senza alcun verificatore installato usa ancora CryptoAPI, e i checkpoint di avanzamento, le opzioni di revoca e i codici errore nativi sono gli stessi. Dove nessun backend risponde, ogni verdetto riporta unsupported invece di lasciare il controllo non effettuato
Version 3.110.0
Aggiunto (Added)
FPdfPkcs11firma PAdES con una chiave che resta all'interno di un token PKCS#11.ConfigurePkcs11SignerProviderlo installa come backend di firma, il modulo è caricato a runtime tramite percorso senza nulla di collegato staticamente, e lo stesso codice serve Windows, Linux e macOS. L'enumerazione dei token dichiarata dall'interfacciaIPdfPkcs11SignerProviderè implementata al suo fianco: slot, token e i certificati che ciascuno contiene- La firma fuori da Windows non richiede più un provider fornito dall'host per il caso comune: un modulo token più
TPdfPkcs11Optionssono sufficienti. RSA PKCS#1 v1.5, RSASSA-PSS ed ECDSA sono tutti prodotti tramite il token FPdfSha1aggiunge SHA-1 per un solo scopo, abbinare un certificato tramite il thumbprint cheTPadesSignerOptionstrasporta. Windows lo risolveva all'interno dell'archivio certificati; un token restituisce i byte del certificato e lascia l'abbinamento al chiamante. Non è un digest di firma e lo stack PAdES continua a firmare con SHA-256 per tutto
Modificato (Changed)
- Gli helper DER dei certificati che leggono l'OID dell'algoritmo a chiave pubblica, estraggono emittente e numero di serie e rincapsulano una firma ECDSA grezza sono spostati dal backend Windows a
FPdfCms, dove ogni backend di firma può raggiungerli
Version 3.109.0
Modificato (Changed)
- Il caricatore della libreria nativa non è più limitato a Windows.
LibraryNameassume come predefinitopdfium.dll,libpdfium.soolibpdfium.dylibper la destinazione, la build V8 viene cercata sotto il nome corrispondente, e caricamento e binding dei simboli passano per il caricatore portabile su Free Pascal. Il comportamento su Windows è invariato, incluso il layout di distribuzione Win32 e Win64 e la diagnostica di mismatch di architettura - Le directory di distribuzione sulle altre destinazioni seguono la grafia
<cpu>-<os>già usata dalle unit compilate, cosìDLLs/x86_64-linux/libpdfium.sosta accanto aLib/FPC/x86_64-linux. Il ripiego sulla directory di sistema resta limitato a Windows; altrove il percorso di ricerca del caricatore lo copre
Version 3.108.0
Aggiunto (Added)
TPdfHarfBuzzTextShapermodella testo bidirezionale e con script complessi sulle destinazioni Free Pascal prive di Uniscribe. Risolve i livelli di incorporamento conFPdfBidi, segmenta le sequenze per script, modella ogni sequenza con libharfbuzz e dispone le sequenze in ordine visivo. Si installa conConfigureTextShaper; libharfbuzz è risolto a runtime eHarfBuzzAvailableriferisce onestamente quando manca- Lo shaper non enumera i font. Uniscribe legge il binario del font da un contesto di dispositivo, che non ha equivalente portabile, così l'host fornisce un
TPdfFontDataResolverche mappa un nome di font sui byte del file del font e mantiene quella politica dove appartiene
Version 3.107.0
Aggiunto (Added)
FPdfBidiimplementa l'algoritmo bidirezionale Unicode (UAX #9) in Pascal puro:PdfResolveBidiLevelsrestituisce un livello di incorporamento per ogni code unit UTF-16,PdfBidiVisualOrderapplica il riordino L2, ePdfBidiClassOfespone il Bidi_Class di un code point. Sono coperte le regole P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 e L1-L2, inclusi gli initiator isolate e le coppie di parentesi BD16- L'unit è neutrale rispetto a compilatore e piattaforma, ed è ciò che permette di comporre testo bidirezionale dove Uniscribe non è disponibile. Un motore di shaping risolve i glifi per una sequenza la cui direzione è già nota, quindi questo è il componente che deve decidere prima la direzione
Version 3.106.0
Aggiunto (Added)
ConfigureTextShaperinstalla il backend di shaping del testo attraverso cui instrada l'intera libreria, conActiveTextShaper,ActiveTextShaperNameeClearTextShaperal suo fianco. SiaShapePdfTextcheTPdf.AddShapedTextora usano lo shaper installato invece di creare direttamente uno Uniscribe, così un host può fornire il proprio motore e un test può fornirne uno deterministico
Modificato (Changed)
FPdfTextShapingcompila su destinazioni diverse da Windows: il backend Uniscribe è ora il predefinito di piattaforma anziché l'unica implementazione, ed è confinato alla build Windows. Dove nessun backend è disponibile, i punti di ingresso di shaping lo riferiscono invece di non compilare
Version 3.105.1
Sicurezza (Security)
- Una risposta timestamp è ora limitata a 4 MB su entrambi i trasporti. Una TSA che continuava a inviare poteva in precedenza far crescere il buffer di ricezione senza limiti, trasformando una chiamata di firma in una crescita di memoria illimitata
Version 3.105.0
Aggiunto (Added)
- Il timestamping RFC 3161 funziona sulle destinazioni Free Pascal diverse da Windows: il nuovo backend libcurl invia il TimeStampReq e legge il TimeStampResp, così
PadesTsaAvailableriporta True e PAdES B-T, B-LT e B-LTA possono ottenere token anche lì. libcurl è risolto a runtime e non è una dipendenza in fase di build; quando è assente il backend riferisce non disponibile esattamente come fa quello WinHttp. Windows continua a usare WinHttp e non è interessato - La firma su quelle destinazioni richiede ancora materiale di chiave che la libreria non possiede: fornirlo tramite
ConfigurePadesSignerProvidercon unIPadesSignerProvider(oIPdfPkcs11SignerProviderper chiavi su token), poichéFPdfCryptoWinè limitato a Windows
Version 3.104.1
Aggiunto (Added)
- L'esempio lab di ispezione XFA è ora disponibile anche per Lazarus, così le sonde di capacità XFA, l'elenco dei pacchetti, l'export dei pacchetti e il fallback
OnXfaRuntimeMissingpossono essere esercitati dalla build LCL
Version 3.104.0
Modificato (Changed)
- La libreria compila pulita da diagnostica evitabile su Free Pascal 3.2: il timing interno legge il tick in millisecondi da
GetTickCount64invece della chiamata a 32 bit deprecata, gli accessori SSE alla control word deprecati sono sostituiti daGetMXCSReSetMXCSR, la base di offset dell'impronta del contenuto è tipizzata esplicitamente così da non far più scattare un controllo di intervallo in compilazione, e gli indirizzi delle scanline sono confrontati come puntatori senza segno quando un bitmap viene verificato per il layout top-down
Version 3.103.1
Corretto (Fixed)
- I metadati del documento portati in XMP conservano i loro caratteri non ASCII su Free Pascal: titoli, autori, oggetti, parole chiave e nomi del creatore che arrivano a
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfReSaveAsPdfVTsono ora convertiti tramite la codepage delle stringhe invece di essere copiati byte per byte, così il pacchetto di metadati resta UTF-8 valido come richiede ISO 19005-1 6.7.2 anche quando il programma host non gira su una codepage UTF-8 - L'export XFDF, i round-trip dei metadati di produzione e il parsing XML delle trusted list usano la stessa conversione corretta per codepage, così il testo che si sposta tra
TBytesestringnon dipende più dalla codepage dell'host
Version 3.103.0
Aggiunto (Added)
TPdfEuropeanTrustedListanalizza trusted list europee autenticate, ricarica cache con checksum tramite lo stesso autenticatore, accetta sorgenti di aggiornamento fornite dal chiamante, espone gli attuali trust anchor e valuta i servizi di firma qualificati a un tempo di validazione richiestoTPadesTrustValidationOptions.QualifiedTrustEvaluatorapplica una policy di fiducia qualificata offline a ogni firmatario validato senza aggiungere accesso di rete al validatore PAdES
Version 3.102.0
Aggiunto (Added)
BeginIncrementalSaveeCommitIncrementalSaveora aggiungono revisioni autenticate a documenti cifrati AES-256 preservando il riferimento/Encryptoriginale, i parametri di sicurezza, le generazioni esatte degli oggetti e i byte precedenti
Modificato (Changed)
- L'overload di commit su file ora esegue un flush durevole e riapre rigorosamente un file laterale nella stessa directory, verifica il suo confine di revisione e sostituisce atomicamente la destinazione ripristinando la sessione dopo qualsiasi fallimento
Version 3.101.0
Modificato (Changed)
SaveAsRedactedora preserva le porzioni sicure di testo parzialmente intersecante, tracciati rettangolari e immagini allineati agli assi, quindi rimuove i nomi di risorse non più referenziate da pagina, Form XObject, pattern, appearance e ambiti di risorse annidati
Version 3.100.0
Modificato (Changed)
OptimizeImagesora seleziona il ricampionamento box, bilineare, bicubico, Lanczos o bilevel da scala, classe di contenuto, dettaglio misurato e qualità richiesta dal chiamante, con filtraggio consapevole dell'alpha e un rigido budget di memoria di lavoro
Version 3.99.0
Aggiunto (Added)
GraftPdfAcroFormimporta campi AcroForm gerarchici, widget, appearance, ordine di calcolo, risorse predefinite, azioni e valori tramite mappature di pagina esplicite e policy di collisioneTPdfCrossDocumentGraftMapriutilizza gli oggetti indiretti importati per identità di sorgente preservando cicli, riferimenti condivisi, generazioni esatte della sorgente e semantiche transazionali di fallimento
Version 3.98.0
Aggiunto (Added)
TPdfOutlineEditorcrea, sposta, elimina, stila, espande e ridirige gli elementi di outline, rimappa le destinazioni esplicite tramite i risultati dei piani di pagina e aggiunge una revisione incrementale verificata in modo indipendente
Version 3.97.0
Aggiunto (Added)
TPdfTreeEditorlegge, valida, aggiorna, bilancia, divide, unisce, serializza e salva incrementalmente strutture NameTree e NumberTree PDF arbitrarie preservando riferimenti indiretti riutilizzabili e valori grezzi delle voci
Version 3.96.0
Aggiunto (Added)
TPdfParserResourceBudgetfornisce un'unica policy thread-safe a livello di processo per ricorsione, token, oggetti, byte decodificati, rapporto di espansione, allocazione e scadenze attraverso parser PDF personalizzati, con snapshot immutabili per operazione e valori predefiniti configurabili
Version 3.95.0
Modificato (Changed)
ValidatePdfXora valida dizionari PDF/X attivi, metadati, output intent, font, caratteristiche proibite, trasparenza, spazi colore e page box tramite letture sparse limitate su documenti non cifrati con xref valido
Version 3.94.0
Modificato (Changed)
ValidatePdfRora valida dizionari PDF/R attivi, pagine, filtri immagine, metadati e marker di footer tramite letture sparse e a finestra limitate su documenti non cifrati con xref valido
Version 3.93.0
Modificato (Changed)
ValidatePdfEora valida dizionari PDF/E attivi, metadati, output intent, moduli e caratteristiche proibite tramite letture sparse limitate su documenti con xref valido
Version 3.92.0
Modificato (Changed)
ValidatePdfVTora esegue analisi avanzate di ambito, visibilità, incapsulamento e uso di Form annidati per gli XObject ricorrenti tramite letture sparse limitate su documenti con xref valido
Version 3.91.0
Aggiunto (Added)
TPdfSparseDictionaryReaderpuò risolvere la generazione attiva di un oggetto e decodificare uno stream diretto sotto un limite di byte fornito dal chiamante
Modificato (Changed)
ValidatePdfVTora usa letture sparse limitate per i controlli di metadati PDF/VT, DPart, OutputIntent, Info, pagina e dizionari ordinari sul percorso normale con xref valido
Version 3.90.0
Aggiunto (Added)
TPdfSparseDictionaryReadermantiene aperto un indice sparse di xref e object-stream per ripetute letture limitate di dizionari di oggetti indiretti
Modificato (Changed)
InjectPdfVTMarkersora valida e preserva una gerarchia DPart PDF/VT esistente con letture limitate della sorgente, mentre le gerarchie malformate proseguono attraverso il fallback di ricostruzione
Version 3.89.0
Aggiunto (Added)
ReadPdfSparsePageDictionariesrestituisce identità degli oggetti pagina e byte di dizionario limitati in ordine di page tree tramite l'indice sparse di oggetti
Modificato (Changed)
InjectPdfVTMarkersora sintetizza la gerarchia DPart PDF/VT e aggiunge gli oggetti marker con letture limitate della sorgente quando il PDF salvato non contiene già una gerarchia DPart
Version 3.88.0
Aggiunto (Added)
ReadPdfSparseCatalogSubDictlegge un sotto-dizionario del catalogo diretto o indiretto tramite l'indice sparse di oggetti, usato dall'iniezione di marker PDF/UA perMarkInfoeViewerPreferences
Modificato (Changed)
InjectPdfUaMarkersora risolveMarkInfoeViewerPreferencesdel catalogo tramite lookup sparse e aggiunge la revisione PDF/UA con letture limitate della sorgente sul percorso xref normale
Version 3.87.0
Aggiunto (Added)
AppendPdfSparseUpdateaggiunge in streaming una revisione sparse a un PDF salvato: byte della sorgente verbatim, corpi di oggetti forniti dal chiamante agli offset registrati e un singolo blocco incrementale xref/trailer concatenato tramite/PrevNormalizePageViewRectnormalizza due angoli mappati nello spazio pagina nel rettangolo visibile limitato alla pagina, oppure riferisce che nulla della pagina è visibile- L'iniezione di marker PDF/E sintetizza un nuovo oggetto Info con
/ISO_PDFEVersionquando il documento sorgente non ha un dizionario Info
Modificato (Changed)
- L'iniezione di marker PDF/E, PDF/X e PDF/R ora risolve catalogo, Info e trailer tramite lookup sparse e aggiunge le revisioni tramite
AppendPdfSparseUpdatecon letture limitate della sorgente sul percorso xref normale - Il callback form-fill
FFI_GetPageViewRectora riferisce la parte della pagina effettivamente visibile nelTPdfViewcollegato invece di restituire sempre l'intero page box, con ripiego sulle dimensioni della pagina per i documenti headless TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.87.0 in modo coerente
Corretto (Fixed)
- I punti di controllo dei segmenti di tracciato esposti dal binding
FPDFPath_GetBezierControlPointsnon sono mai stati popolati: l'export nativo risponde solo per l'indice dell'endpoint di ogni cubica a tre voci, così la query ora avviene una volta per curva e tutte e tre le voci portano i punti di controllo della curva
Version 3.86.0
Aggiunto (Added)
ReadPdfSparseRevisionInfoespone informazioni limitate su ultima revisione, catalogo, cifratura, ID documento e struttura tagged per i postprocessori di streamComposePdfSparseUpdateIdpreserva o deriva gli identificatori di documento per gli aggiornamenti incrementali senza materializzare il PDF sorgente completo
Modificato (Changed)
InjectPdfAMarkersora risolve catalogo e trailer tramite lookup sparse, copia gli input grandi in blocchi limitati e aggiunge la revisione PDF/A senza allocare un array di byte grande quanto la sorgente sul percorso xref normale- L'iniezione di marker PDF/A preserva lo stile di output classico o xref-stream, le generazioni di catalogo e Info, gli identificatori del trailer, il comportamento di rifiuto con cifratura e le regole di downgrade al Level A
Version 3.85.0
Aggiunto (Added)
SanitiseActiveContentPdfStreamaccetta un workspace di potatura di proprietà del chiamante per storage personalizzato limitato o su disco
Modificato (Changed)
- La sanificazione degli active content ora aggiorna catalogo e trailer tramite lookup sparse, finestre di parsing limitate e copia di intervalli a dimensione fissa invece di leggere il PDF completo in un unico array di byte sul percorso xref normale
TPdf.SaveAsSanitisedapplicaSaveMemoryLimiteSaveTemporaryDirectoryal suo workspace di potatura e ne riferisce la diagnostica di spill
Corretto (Fixed)
StripMetadata=Trueora rimuove un riferimento/Infodel trailer anche quando il catalogo non ha una voce/Metadata
Version 3.84.0
Modificato (Changed)
TPdf.PdfVersionora riutilizza lo stato del parser PDFium tramiteFPDF_GetFileVersioninvece di riparsare il PDF sorgente completo- Le interrogazioni di versione leggono al massimo l'intestazione PDF di otto byte per impedire che una dichiarazione di catalogo malformata declassi la versione effettiva
Version 3.83.0
Modificato (Changed)
PageLabelledPdfStreamora risolve e aggiorna il catalogo tramite finestre di stream limitate e l'indice sparse lazy di oggetti- L'output delle etichette di pagina copia i PDF sorgente grandi in intervalli a dimensione fissa invece di allocare un array di byte dell'intero documento sul percorso xref normale
Version 3.82.0
Modificato (Changed)
ApplyDefaultOpenActionora legge revisioni classiche, xref-stream, ibride e object-stream tramite un indice sparse lazy di oggetti, inclusi i documenti con numeri di oggetto molto alti- L'elaborazione dell'azione di apertura predefinita usa finestre a dimensione fissa e copia di intervalli limitata invece di caricare il PDF completo in un unico array di byte
Version 3.81.0
Aggiunto (Added)
PostProcessSavedPdfaccetta tre workspace seekable di proprietà del chiamante per limiti di memoria personalizzati ed elaborazione su disco
Modificato (Changed)
TPdf.SaveAsapplicaSaveMemoryLimiteSaveTemporaryDirectorya ogni workspace di post-elaborazione dei PDF salvati e include i loro spill nella diagnostica- La riparazione nativa incrementale degli xref-stream usa finestre di coda e dizionario a dimensione fissa con copia di intervalli limitata invece di array di byte dell'intero file e ripetute riallocazioni complete del file
Version 3.80.0
Aggiunto (Added)
ReadAttachmentMetadatacattura nomi, descrizioni, sottotipi MIME, dimensioni decodificate e leggibilità degli allegati in un'unica enumerazione nativa limitataExtractAttachmentsToStreamsscrive un batch su stream di proprietà del chiamante con limiti di byte per file e aggregati, chunk di scrittura configurabili, annullamento e risultati per elemento
Modificato (Changed)
- L'estrazione in batch trattiene al massimo un allegato decodificato nella memoria di PDFium Delphi Component invece di materializzare ogni payload del batch
Version 3.79.0
Aggiunto (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, le interrogazioni di uso per tipo e la telemetria coordinano la memoria di cache trattenuta tramite un unico budget globale di byte LRU thread-safeTPdfTileCachee la cache di font di sistema a livello di processo possono aderire a un governor scelto dal chiamante con contabilizzazione esatta di bitmap e byte di font
Modificato (Changed)
- Scene di pagina analizzate, miniature, dati di struttura, snapshot di testo e snapshot di oggetti pagina ora competono sotto un budget predefinito di 256 MiB per
TPdfpreservando i loro esistenti limiti di numero di voci - Le scene di pagina attive restano bloccate finché il rendering non è completato, e le scene di pagina native opache usano un addebito stimato esplicito perché PDFium non espone alcuna API configurabile di byte totali di cache
Version 3.78.0
Aggiunto (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlaneTPdf.GeneratePagedLayoutscrivono in streaming i comandi di layout in storage seekable scelto dal chiamante e materializzano una pagina alla volta
Modificato (Changed)
- I layout generati grandi possono versare i comandi in storage temporaneo, trattenere una cache di pagine LRU configurabile, ripristinare segmenti di intestazione e piè di pagina non contigui e rilasciare il testo a capo dopo ogni elemento di flusso
Version 3.77.0
Aggiunto (Added)
TPdfLayoutTable, righe, celle e opzioni di tabella aggiungono tabelle attraverso le pagine con tracce di griglia risolte, didascalie, righe di intestazione ripetute, righe di corpo divisibili, collegamenti e bordi configurabili
Modificato (Changed)
- Le tabelle tagged generate preservano un'unica struttura continua Table / TR / TH / TD attraverso le pagine, mantengono atomici i gruppi che attraversano le righe e associano automaticamente le celle di dati agli ID di intestazione
Version 3.76.0
Aggiunto (Added)
TPdfLayoutConstraintseSetLastItemConstraintsaggiungono ai layout generati il controllo keep-together, keep-with-next, page-break-before / after fisico e configurabile delle righe vedove / orfane
Modificato (Changed)
BuildPlanriutilizza ogni risultato di testo a capo per la predizione di paginazione e l'emissione dei comandi, impedendo a keep-with-next di ripetere la misurazione del testo
Version 3.75.0
Aggiunto (Added)
TPdf.InspectPdfUaUnicodeCoverageriferisce evidenze limitate a livello di oggetto per mappature Unicode dirette, sostituzioniActualText, errori di mappatura, valori Unicode mancanti e oggetti sorgente irrisolti
Modificato (Changed)
TPdf.ValidatePdfUaora riutilizza un'unica scansione di caratteri con ambito di oggetto che esclude i caratteri Artifact e generati e impedisce che l'ActualTextdi un oggetto testo mascheri il contenuto adiacente
Version 3.74.0
Modificato (Changed)
ValidatePdfUaPageContentTaggingeTPdf.ValidatePdfUaora riferisconopvuaiArtifactInStructureTreequando un oggetto pagina Artifact è rivendicato da un MCID dell'albero di struttura, inclusi gli artifact di paginazione basati su tracciati- La scansione del contenuto di pagina PDF/UA ora va in corto circuito solo dopo aver rilevato sia contenuto reale non taggato sia contenimento Artifact non valido, preservando la copertura attraverso le pagine senza ripetere i controlli già completati
Version 3.73.0
Aggiunto (Added)
TPdf.InspectPdfUaLanguageCoverageriferisce evidenze limitate su oggetti pagina e stringhe di struttura per gli intervalli in linguaggio naturale, inclusi lingua effettiva, sorgente della dichiarazione, MCID, indice di struttura ed estratti di testoResolvePdfUaEffectiveLanguagerisolve le dichiarazioni di lingua del marked-content, dell'antenato di struttura più vicino e del catalogo con evidenze esplicite di validità
Modificato (Changed)
TPdf.ValidatePdfUaora riferiscepvuaiNaturalLanguageUncoveredquando testo non artifact o stringhe di accessibilità non hanno una dichiarazione/Langeffettiva valida
Version 3.72.0
Aggiunto (Added)
TPdf.InspectPdfAMetadatariferisce evidenze di equivalenza tipizzate campo per campo per tutte e otto le mappature Info-to-XMP di ISO 19005-1, inclusi valori vuoti espliciti e fallimenti di parsing delle dateTPdf.NormalizePdfAMetadataripara solo le proprietà XMP mappate non corrispondenti preservando namespace non correlati e alternative di lingua non predefinite
Modificato (Changed)
TPdf.ValidatePdfAora riferiscepvaiInfoXmpValueMismatchquando i valori Info decodificati da PDFium differiscono dai valori XMP tipizzati correttamente dopo un confronto Unicode o di date consapevole del fuso orario
Version 3.71.0
Aggiunto (Added)
InspectPdfVT2sStreamrestituisce evidenze sulle condizioni di stampa per ogni parte MIME PDF/VT, inclusi identità dell'OutputIntent, provenienza del profilo incorporato o MIME, hash ICC e informazioni dell'intestazione, e conteggi di pagine e record DPartFPdfIccProfilefornisce ispezione limitata di intestazioni e tabelle tag ICC con supporto per MD5, SHA-256, spazio colore, versione, classe di dispositivo, profile-ID e descrizione multilingue del profilo
Modificato (Changed)
- La validazione PDF/VT-2s ora risolve gli allegati MIME ICC precedenti tramite specifiche di file URL
DestOutputProfileRefe validaCheckSum,ICCVersion,ProfileCS,ProfileName, classe di dispositivo e spazi colore di processo consentiti - Tutte le parti PDF/VT ora richiedono un unico OutputIntent
GTS_PDFXautorevole, un packaging del profilo incorporato o esterno appropriato alla base PDF/X e la stessa condizione di stampa caratterizzata, mentre gli allegati solo PDF/X restano fuori dai confronti PDF/VT - La validazione PDF/VT-2 su file singolo ora riconosce
DestOutputProfileRefcome profilo di destinazione esterno invece di riferirlo come mancante
Version 3.70.0
Modificato (Changed)
- La validazione PDF/VT ora controlla
GTS_Scope,GTS_XID,GTS_EnveGTS_Encapsulateddirettamente su ogni XObject invece di permettere che dizionari vicini o annidati soddisfino i requisiti degli hint - L'ambito
Recordora risolveRecordLeveldal dizionario indirettoDPartRoot, mentre l'ambitoStreamè respinto nei file PDF/VT-1 - Gli stream di contenuto decodificati di pagine e Form XObject ora validano la visibilità delle risorse
Do, i conteggi di occorrenzeSingleUsee la proprietà dei record destinatari tramite risorse ereditate effettive e la gerarchia DPart - Gli XObject incapsulati ora validano la forma booleana, l'ambito raccomandato, l'
Intentdelle Image, i gruppi di trasparenza isolati, gli spazi colore di blending e le dipendenze di optional content dirette o annidate
Version 3.69.0
Modificato (Changed)
- La validazione PAdES ora respinge voci duplicate di
Contents,ByteRange,SubFilter,FiltereTypeinvece di accettare il valore selezionato dal parser - Il rilevamento delle firme ora usa una scansione lineare dei dizionari consapevole degli stream, riconosce i token di nomi PDF con escape e non può essere dirottato da un dizionario annidato chiuso collocato prima del vero
ByteRange - La validazione del
ByteRangedelle firme ora richiede che il gap escluso corrisponda esattamente al token esadecimale direttoContentsconsentendo comunque le successive revisioni incrementali - I dizionari di firma ora richiedono un unico
Filtercon valore nome e impongono combinazioni coerenti di tipo e subfilterSigoDocTimeStamp
Version 3.68.0
Aggiunto (Added)
TPdf.BuildPadesEvidenceReportcorrela fatti di firma PDFium, policy CMS, stato di fiducia e timestamp, hash del percorso dei certificati, copertura DSS/VRI e decisioni delle revisioni successive per ogni firmaTPadesEvidenceReportesporta evidenze multi-firma limitate come JSON o CSV e riferisce telemetria su sorgente, firma, DSS, revisione e troncamento
Modificato (Changed)
- La validazione di fiducia PAdES ora registra identità SHA-256 per il certificato del firmatario e il percorso ordinato dei certificati Windows preservando la validazione offline per impostazione predefinita
- La generazione di evidenze riutilizza un'unica cattura trattenuta dei byte della sorgente attraverso le analisi di conformità, fiducia, DSS e revisione invece di copiare il PDF originale in un nuovo stream per ogni fase
Version 3.67.0
Aggiunto (Added)
TPadesSignatureFieldOptionscrea nomi di campi firma configurabili, valori seed richiesti, elenchi di motivi e attestazioni legali, certificati di firmatario accettabili e blocchi di campo- La firma locale e remota può creare firme di approvazione o certificazione con le trasformazioni ISO 32000-1
FieldMDPeDocMDP
Modificato (Changed)
- Le firme di certificazione preservano i permessi esistenti del catalogo registrando la nuova firma tramite
/Perms /DocMDP
Version 3.66.0
Aggiunto (Added)
RenderPageBandedToStreamscrive output PNG o TIFF direttamente su uno stream del chiamante con altezza di banda configurabile, compressione PNG e limiti di byte in uscitaRenderPageBandedToEncoderalimenta codec definiti dal chiamante con bande di pagina sequenziali e restituisce telemetria su banda, riga, memoria, completamento e output
Corretto (Fixed)
RenderPageBandedora preserva la geometria di rendering dell'intera pagina e ritaglia ogni banda richiesta invece di ridimensionare la pagina completa in ogni banda
Version 3.65.0
Aggiunto (Added)
TPdfParallelRenderReportora riferisce dimensione della sorgente, picco di memoria catturata, backend di storage e tipo di backing condiviso
Modificato (Changed)
RenderPagesParallelcondivide la sorgente catturata tramite memoria immutabile, una mappatura di file in sola lettura o l'accesso casualeFPDF_LoadCustomDocumentinvece di allocare un secondo array di byte dell'intero documento- Le sorgenti di rendering parallelo versate su disco restano sotto
SaveMemoryLimite non richiedono più di ricaricare il PDF completo nella memoria indirizzabile del processo
Version 3.64.0
Aggiunto (Added)
ImportImposedora ha un overload che restituisceTPdfImpositionExecutionReportcon conteggi di importazioni native, sorgenti uniche, slot vuoti, template XObject, oggetti modulo, generazione di contenuto e pagine di output
Modificato (Changed)
- L'imposizione a geometria zero invia ogni pagina sorgente ordinata attraverso una singola chiamata
FPDF_ImportPagesByIndexprima dell'inserimento di pagine vuote e della composizione N-up nativa - L'imposizione a geometria personalizzata riutilizza un template XObject nativo per ogni pagina sorgente unica, legge le metriche di pagina in cache senza cambiare la pagina sorgente e prealloca lo storage esatto del piano
Version 3.63.0
Aggiunto (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactioneRollbackPageObjectEditTransactionraggruppano le mutazioni native degli oggetti pagina in un batch atomico con ambito di pagina e rollback da snapshot validatoPageObjectEditTransactionStatusriferisce la pagina collegata, lo stato dirty, il conteggio delle mutazioni riuscite e il conteggio delle generazioni di contenuto
Modificato (Changed)
- I batch di oggetti confermati ora invocano
FPDFPage_GenerateContentuna sola volta invece che per ogni mutazione di inserimento, rimozione, trasformazione, proprietà, mark, oggetto annotazione o appearance - Salvataggi, cambi di pagina, eliminazioni di pagina, transazioni di modifica annidate e aggiornamenti nativi falliti di inserimenti o annotazioni sono respinti prima che il contenuto differito possa andare perduto
Version 3.62.0
Aggiunto (Added)
ReadPageObjectsSnapshotcattura informazioni sugli oggetti pagina di proprietà del chiamante con budget su oggetti, tracciati, clip, mark, testo, stringhe e scadenzaPageObjectsSnapshotfornisce riutilizzo LRU consapevole delle revisioni con capacità configurabile e telemetria di occupazione, hit e miss
Modificato (Changed)
PageComplexityora riutilizza lo snapshot immutabile degli oggetti pagina invece di ripetere enumerazioni native di oggetti e interrogazioni su trasparenza, tracciati e immagini
Version 3.61.0
Aggiunto (Added)
TPdfora espone un LRU unificato di miniature per anteprime incorporate e renderizzate con limiti massimi configurabili di voci e byte più telemetria di hit, miss, espulsione, occupazione e revisioneRenderPageThumbnailaccetta rotazione, opzioni di rendering, colore di sfondo eTPdfColorSchemepreservando il contratto di bitmap di proprietà del chiamante
Modificato (Changed)
- L'estrazione e il rendering ripetuti di miniature riutilizzano i risultati nativi di PDFium tramite chiavi di revisione, pagina, sorgente, dimensione, rotazione, flag, sfondo e schema colore, inclusa l'assenza in cache delle miniature incorporate opzionali
TPdfThumbnailViewsincronizza la sua cache di bitmap della pagina visibile con le revisioni delle miniature del documento così le modifiche non possono lasciare anteprime obsolete
Version 3.60.0
Aggiunto (Added)
ReadTextPageSnapshotcattura Unicode, mappature UTF-16, geometria e stile dei caratteri e metadati normalizzati degli oggetti testo in un'unica passata con budget espliciti su caratteri, oggetti, nomi di font e scadenzaTextPageSnapshotfornisce copie profonde di proprietà del chiamante tramite un LRU configurabile consapevole delle revisioni con telemetria di capacità, conteggio, hit e miss
Modificato (Changed)
GetStructuredTexteGetTextInReadingOrdercon layout fisico ora riutilizzano lo stesso snapshot di testo e applicano un ordinamento geometrico O(n log n)
Corretto (Fixed)
- Le piccole cache di snapshot di testo e struttura ora espellono la pagina più vecchia mentre memorizzano i nuovi dati sotto l'indice di pagina richiesto, prevenendo l'aliasing cross-page della cache
Version 3.59.0
Aggiunto (Added)
LifecycleActionPolicyseleziona l'esecuzione automatica disabilitata, solo esplicita o compatibile delle azioni di ciclo di vita di documenti e pagine PDFExecuteDocumentLifecycleActionespone azioni JavaScript di documento, open, close, save e print, mentreExecutePageLifecycleActionesegue azioni open e close di pagina senza cambiarePageNumber
Modificato (Changed)
- I caricamenti di pagina headless ora ricevono le stesse azioni automatiche open e close di pagina dei caricamenti guidati dal viewer, con pagine temporanee riutilizzate o rilasciate sotto il lock di rendering
Version 3.58.0
Aggiunto (Added)
ReadStructureElementseVisitStructureElementsforniscono l'attraversamento iterativo della struttura tagged con budget espliciti su profondità, elementi, attributi e tempo più uno stato di completamento dettagliatoStructureElementsForPageespone snapshot di pagina a base uno senza cambiarePageNumber, supportati da una cache LRU configurabile consapevole delle revisioni con telemetria di hit, miss e conteggio
Modificato (Changed)
- I consumatori di accessibilità, reflow, validazione e viewer ora riutilizzano snapshot di struttura di proprietà del chiamante finché una modifica pertinente al documento o alla pagina non li invalida
Version 3.57.0
Aggiunto (Added)
- I callback nativi completi di form host ora forniscono handle di pagina lazy sicuri per il ciclo di vita, routing del cursore della vista di interazione, notifiche di cambio valore, rettangoli di testo selezionato, eventi URI ed eventi di destinazione GoTo
FormHostCallbacksCompleteriferisce la prontezza dei callback, mentreFormSelectionRectseClearFormSelectionRectsespongono la geometria di selezione limitata nello spazio pagina
Corretto (Fixed)
- I callback della pagina corrente XFA ora traducono correttamente tra gli indici di pagina a base zero di PDFium e la
PageNumbera base uno del componente - I callback URI di AcroForm e XFA ora preservano i byte grezzi dell'URI e richiedono l'approvazione esplicita dell'host prima di qualsiasi avvio esterno
Version 3.56.0
Aggiunto (Added)
- Gli snapshot indicizzati
PageMetricsespongono dimensioni, rotazione, etichetta, trasparenza e i cinque page box standard di una pagina senza cambiare la pagina attiva
Modificato (Changed)
- Le letture ripetute dei metadati di pagina riutilizzano una cache di snapshot nativa invalidata automaticamente, riducendo le aperture di pagina nei carichi di lavoro di miniature, preflight e analisi del documento
Version 3.55.0
Aggiunto (Added)
- L'ispezione dei tracciati espone i punti di controllo esatti delle cubiche di Bézier quando la build PDFium caricata fornisce
FPDFPath_GetBezierControlPoints, con una sonda opzionale di capacità per DLL più vecchie FormFieldTypeAtPoint,TPdfView.FormFieldTypeAte le proprietà indicizzateFontFlagsespongono informazioni native su moduli e font senza handle grezziTPdf.Signaturesrestituisce tutti i contenuti delle firme native, ByteRange, subfilter, motivi, tempi e permessi in un unico snapshot di proprietà del chiamante
Modificato (Changed)
- I controlli di presenza dei campi modulo ora usano hit testing nativo diretto sui punti invece di aprire e chiudere handle di annotazione
Corretto (Fixed)
- La validazione PDF/E-1 ora permette campi AcroForm ordinari, file incorporati e annotazioni FileAttachment riferendo con precisione
/XFAe/NeedAppearances trueAcroForm di primo livello, inclusi i valori indiretti e object-stream
Version 3.54.0
Aggiunto (Added)
FPdfProductionaggiunge la selezione misurata di immagini multi-codec, backend di elaborazione di colori e font, percorsi SVG, piani di sostituzione con stile, aggiornamenti transazionali dei pacchetti XFA, vettori di codici a barre, modelli Portfolio e l'estrazione sicura di RichMediaFPdfStandardsExecutionaggiunge misura e conversione GeoPDF, riparazione transazionale PDF/A, piani PDF/UA-2, profili multicolore esterni, evidenza DSS e VRI storica, query DPart, fatti approfonditi PDF/E e strisce PDF/R a memoria fissaTPdf.ImportImposedcompone piani N-up e libretto delimitati tramite percorsi N-up nativi o page-XObject con geometria esatta di gutter, bleed e creep, mentreTPdf.CompareWithriporta differenze semantiche, geometriche e di pixel tolleranti- La firma PAdES ora supporta validatori di percorso e provider HSM collegabili, PDF MAC collegato alla firma,
cms-algorithm-protectione documenti di policy di firma offline
Modificato (Changed)
- Il motore di layout accetta HTML e Markdown delimitati, fluisce attraverso le colonne e risolve tracce di griglia fisse, automatiche e frazionarie
- I cicli XFDF ora conservano campi multivalore e rich-text, popup, azioni, destinazioni, overlay di aspetto, namespace personalizzati e stato di presenza esplicito
Version 3.53.0
Aggiunto (Added)
ConfigurePdfLibraryfornisce una configurazione nativa immutabile di renderer, font, V8, Brotli, percorso dei font utente e sandbox prima del primo caricamento di PDFium- Attributi di struttura nativi, relazioni tra annotazioni, allegati file delle annotazioni, valori di dizionario tipizzati, politiche di attivazione, query z-order su collegamenti e moduli e diagnostica della mappatura TTF predefinita sono disponibili tramite API di alto livello delimitate
TPdfView.ReplaceFormTextAndKeepSelectionpreserva la selezione attiva tra modifiche ripetute e gli eventi di rilascio del pulsante destro ora raggiungono il motore dei moduli nativo
Modificato (Changed)
- Il tempo deterministico dei documenti ora usa una conversione di calendario UTC stabile oltre all'epoca fissa, producendo gli stessi metadati in ogni fuso orario dell'host
- Le scritture di stringhe degli allegati validano il risultato nativo e codificano le chiavi del dizionario come UTF-8
Version 3.52.0
Aggiunto (Added)
TPdf.GetImageObjectRenderedBitmaprestituisce il risultato renderizzato di un oggetto immagine con la matrice corrente, lo spazio colore, le maschere e lo stato di rendering applicatiTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizeeTPdf.SetTextObjectFontSizeespongono la misurazione nativa dei glifi e la modifica esatta della dimensione del font degli oggetti di testoTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarkeTPdf.IsAnnotationObjectSubtypeSupportedaggiungono la modifica precisa degli oggetti di contenuto e l'ispezione delle capacità
Version 3.51.0
Corretto (Fixed)
- Otto membri di
TPdfche le note di rilascio precedenti annunciavano erano dichiarati nella sezione privata e non potevano essere chiamati dall'esterno dell'unitàPDFium; ora sono pubblici come documentato:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValueeSetAttachmentStringValue
Modificato (Changed)
- La documentazione di riferimento inglese ora copre ogni membro pubblico di
TPdfeTPdfView: 88 membri che non avevano una pagina di riferimento ora ne hanno una, e le pagine delle classi, l'indice di navigazione e il riferimento API li elencano tutti - Le pagine di riferimento che in precedenza puntavano a una pagina condivisa ora rimandano alla pagina del membro stesso, così un risultato di ricerca apre la descrizione dell'API cercata
- Il riferimento API documenta le enumerazioni e i record raggiungibili dalle firme pubbliche, inclusi i tipi di segnalazione di caricamento e flusso, i tipi di testo, font e OCR, i tipi del costruttore di layout, i tipi di validazione PAdES, i tipi di batch e validazione e i tipi di rendering parallelo
Version 3.50.0
Aggiunto (Added)
- Ogni demo GUI ora si apre con contenuto pronto all'uso invece di un modulo vuoto: i demo di visualizzazione e di laboratorio caricano un documento campione generato, i demo di report producono un report completato all'avvio e i demo di elaborazione pre-generano input campione, così l'azione principale parte con un clic
MultiPageViewer,SplitVieweFontPropertiesgenerano in memoria documenti campione all'avvio (una vetrina di sei pagine, due documenti di confronto affiancati e una pagina multi-carattere da ispezionare al clic)- I demo di elaborazione come
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFePrintPreferencespre-generano PDF campione accanto all'eseguibile e precompilano i controlli di input, con rigenerazione idempotente che non sovrascrive mai i file esistenti FormFilleExtractImagescaricano automaticamente i file campione forniti nelle rispettive cartelle dei demo,ImageToPDFgenera due bitmap campione,WatermarkStamppredispone i propri campioni di timbro eXfdfLabsi apre su un documento generato con annotazioni di testo e di evidenziazione
Modificato (Changed)
CreatePDFora generaSample.pdfaccanto all'eseguibile all'avvio senza mostrare una finestra di dialogo, così il documento esiste nel momento in cui il demo si apreTPdf.AboutInfoe i metadati dell'installatore ora riportano Version 3.50.0 in modo coerente
Version 3.49.0
Aggiunto (Added)
FORM_GetTextDirectioneFORM_SetTextDirectiondei binari PDFium aggiornati sono ora associati, mantenendo il livello di associazione dinamica alla copertura completa di tutte le 472 esportazioni PDFiumTPdf.FocusedFormFieldTextDirectioneTPdf.SetFocusedFormFieldTextDirectionespongono la direzione del testo in memoria del widget focalizzato tramite il nuovo enumTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), con contropartiTPdfViewche ridisegnano la scena della pagina dopo un cambio di direzione
Modificato (Changed)
FPDF_LIBRARY_CONFIGora rispecchia il layout della versione 6 di PDFium con il campo sperimentalem_BrotliEnabledper i binari compilati conPDF_ENABLE_BROTLITPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.49.0 in modo coerente
Version 3.48.0
Aggiunto (Added)
- Il demo
PDFViewerora genera in memoria un documento dimostrativo di sei pagine all'avvio tramite la API di creazione, così il visualizzatore si apre con contenuto renderizzato e senza alcun file di esempio sul disco - Un pannello di miniature basato su
TPdfThumbnailViewoffre anteprime delle pagine con navigazione tramite clic accanto all'albero dei segnalibri in tutti e tre i port del demo - La ricerca del visualizzatore ora evidenzia tutte le corrispondenze nella pagina corrente tramite
HighlightSearchTextinvece di un singolo rettangolo di risultato, con il conteggio delle corrispondenze riportato nella barra di stato - I pulsanti
Nighte2-Updella barra degli strumenti attivano con un solo clic la modalità di rendering notturno duotono e la modalità di visualizzazione a doppia pagina
Modificato (Changed)
- La selezione del testo nel visualizzatore ora usa il motore di selezione integrato di
TPdfViewcon selezione della parola tramite doppio clic, selezione per trascinamento e scorciatoie per gli appunti, in sostituzione del codice di selezione scritto a mano - Le pagine vengono renderizzate con ombra portata e scorrimento fluido per un'esperienza di lettura moderna
TPdf.AboutInfoe i metadati dell'installatore ora riportano Version 3.48.0 in modo coerente
Version 3.47.0
Aggiunto (Added)
FPdfBenchmarkesegue corpora PDF limitati con cicli di riscaldamento e misurazione configurabili, limiti di pagina e pixel, annullamento cooperativo e stato per singolo caso tra superato, fallito o saltatoTPdfBenchmarkReportregistra le dimensioni in byte dell'input e del file salvato, la latenza di caricamento e di prima pagina, la velocità effettiva di rendering, i tempi di salvataggio e riapertura, il working set di picco campionato, gli hash SHA-256 semantici e per pixel, la stabilità tra esecuzioni ripetute, i gate sugli hash attesi e l'equivalenza indipendente alla riapertura- I report benchmark esportano CSV sicuri per le formule e JSON strutturati per CI, qualificazione dei rilasci e tracciamento longitudinale delle prestazioni
GetSkiaRenderCapabilities,RenderPageSkiaeRenderPageSkiaByIndexespongono il rendering nativo opzionale di pagine e moduli tramite Skia con riuso della cache delle pagine analizzate e senza alcun requisito rigido di esportazione DLL- Un ABI di output di stampa versionato e governato dalle capacità espone l'enumerazione esatta delle lastre di tinte piatte, il rendering delle lastre, il rilevamento della sovrastampa e l'anteprima della sovrastampa quando forniti dal modulo PDFium caricato
Corretto (Fixed)
- I build di PDFium senza
PDF_USE_SKIAora si caricano normalmente invece di fallire perché le esportazioni sperimentali di Skia sono assenti
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.47.0 in modo coerente
Version 3.46.0
Aggiunto (Added)
ValidatePdfRora verifica il contenuto di pagina solo raster, la geometria delle strisce, i modelli di colore, la risoluzione effettiva, i parametri di compressione, i metadati obbligatori e i profili PDF 2.0 crittografati tramite opzioni di validazione configurabiliBuildPdfARepairPlantrasforma le evidenze di validazione in passaggi di correzione ordinati per dipendenza, con classi di sicurezza, protezioni sull'impatto delle firme e output JSONBuildPdfXProductionPreflightriporta i box di pagina, i font incorporati, gli output intent, i coloranti, la trasparenza, la sovrastampa, le separazioni, la risoluzione delle immagini e l'idoneità alla produzione senza decodificare i payload delle immagini- La validazione della struttura PDF/UA-2 ora verifica la proprietà dei file associati, l'ordine di lettura, le descrizioni, le relazioni e l'individuabilità
Modificato (Changed)
TAssociateFile.Description,TPdf.ImageInfoeTPdf.PageComplexityespongono i metadati richiesti dai flussi di lavoro preflight dei file associati e di produzioneTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.46.0 in modo coerente
Version 3.45.0
Aggiunto (Added)
TPdfXmpPacketanalizza, modifica, clona e serializza XMP consapevole dei namespace con namespace sconosciuti, contenitori RDF tipizzati, valori URI e risorsa, qualificatori, alternative linguistiche, wrapper di pacchetto e padding preservatoTPdf.ReadXmpPacketeSaveAsWithXmpPacketespongono la lettura dei metadati ad alto livello e l'output atomico, con le modifiche ai documenti firmati che richiedono un'autorizzazione esplicita
Sicurezza (Security)
- Il lettore XML limitato rifiuta DTD ed entità esterne e limita i byte del pacchetto, l'annidamento, i nodi, gli attributi e i riferimenti numerici a caratteri
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.45.0 in modo coerente
Version 3.44.0
Aggiunto (Added)
TPdfValidationRuleRegistryregistra clausole di profilo con gravità, dipendenze, indicazioni di riparazione, evidenze e predicati integrati o personalizzatiTPdfValidationBudgeteTPdfValidationExecutionContextlimitano regole, errori, oggetti, ricorsione, evidenze UTF-8, memoria riservata, tempo trascorso, fail fast e annullamento cooperativoValidatePdfFilesParallelvalida i file tramite documenti di lavoro isolati preservando l'ordine di input e aggregando distribuzioni dei problemi, tempi, errori, annullamenti ed errori di caricamento
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.44.0 in modo coerente
Version 3.43.0
Aggiunto (Added)
TPdfStructureElementora trasporta fatti di namespace, mappatura dei ruoli di namespace, riferimento, file associato, annotazione, widget, etichetta e aspetto per la validazione semantica PDF/UA-2ValidatePdfUa2StructureElementse i suoi validatori mirati verificano namespace e contenimento ISO/TS 32005, griglie di tabella limitate, annotazioni, moduli, associazioni Formula/MathML, file associati, radici dei documenti, FENote, elenchi, riferimenti TOC, titoli e didascalie senza caricarepdfium.dllClassifyPdfUaNamespaceidentifica i namespace di struttura PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, personalizzati e mancantiPdfUa2StructureHasIssuefornisce una query a problema singolo sicura per C++Builder senza restituire un set Pascal per valore
Modificato (Changed)
ValidatePdfUaStructureElementsapplica automaticamente il nuovo insieme di regole semantiche perpuc2preservando il percorso di regole PDF/UA-1TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.43.0 in modo coerente
Version 3.42.0
Aggiunto (Added)
TPdfUaSaveOptions.PdfUa2crea output PDF/UA-2 conpdfuaid:part2,pdfuaid:rev2024 e una versione effettiva del catalogo PDF 2.0ValidatePdfUarilevapuc2e riporta metadati di revisione mancanti, file non PDF 2.0, configurazioni di contenuto facoltativo senza nome, annotazioni deprecate e intestazioni H generiche
Modificato (Changed)
- La validazione PDF/UA ora seleziona regole di ordine di tabulazione, XFA e intestazioni specifiche del profilo per PDF/UA-1 e PDF/UA-2
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.42.0 in modo coerente
Version 3.41.0
Aggiunto (Added)
SetPageObjectMarkParamaggiunge o sostituisce un parametro integer, real, string o blob su una voce di contenuto marcato esistente senza sostituire il contrassegnoRemovePageObjectMarkParamrimuove una singola proprietà selezionata preservando il nome del contrassegno e tutte le proprietà non correlate
Modificato (Changed)
- I numeri non interi del contenuto marcato ora compiono un round trip come
pmpFloatinvece di essere troncati in snapshot integer - La validazione dei parametri non riuscita durante
AddPageObjectMarkrimuove il contrassegno nativo parzialmente creato TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.41.0 in modo coerente
Version 3.40.0
Aggiunto (Added)
ConfigureSystemFontProviderinstalla un mapper di font dell'applicazione prima che PDFium si avvii e fornisce byte TrueType o OpenType validati per i font del documento mancanti o sostituitiTPdfSystemFontPolicycontrolla la sostituzione dei caratteri, il fallback nativo, i limiti di byte per font e una cache limitata delle richiesteGetSystemFontProviderStatisticsriporta l'attività di mappatura, cache, fallback, rifiuto, tabelle dati e handle attivi
Modificato (Changed)
- I callback del provider espongono face, peso, stile, charset e pitch richiesti da PDFium mantenendo gli errori dei callback all'interno del confine nativo
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.40.0 in modo coerente
Version 3.39.0
Aggiunto (Added)
AddCidType2Textincorpora dati TrueType forniti dal chiamante con geometria CID-to-GID esplicita per glifo e mappature CID-to-UnicodeTPdfCidFontOptionsseleziona l'incorporamento completo, il subsetting preferito con fallback o il subsetting obbligatorio e configura budget limitati di font, glifi e UnicodeTPdfCidFontReportriporta le decisioni di subset, le dimensioni in byte, i glifi univoci, lo stato di incorporamento, il testo atteso, il testo estratto e l'integrità dell'estrazione
Modificato (Changed)
- Il subsetting TrueType preserva gli identificatori di glifo richiesti, rifiuta l'output non sicuro ed esegue il rollback di ogni oggetto pagina inserito se la verifica della mappatura o dell'estrazione fallisce
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.39.0 in modo coerente
Version 3.38.0
Aggiunto (Added)
BuildReflowDocumentcrea un albero di nodi semantici riutilizzabile e limitato a partire dalla struttura Tagged PDF o dall'inferenza del layout fisico su un intervallo di pagine selezionatoTPdfReflowDocument.ToHtmlemette con escape intestazioni, paragrafi, elenchi, figure, didascalie, sezioni di pagina e tabelle responsive con semantica di intestazione e spanTPdfReflowOptionscontrolla il rilevamento delle tabelle, le sezioni di pagina, la geometria, i CSS, le interruzioni di riga, l'intervallo di pagine, l'annullamento e i budget di risorse
Modificato (Changed)
- Il contenuto delle tabelle sostituisce i blocchi di paragrafo sovrapposti durante il reflow e lo stato della pagina attiva viene ripristinato dopo successo, errore o annullamento
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.38.0 in modo coerente
Version 3.37.0
Aggiunto (Added)
ApplyOcrSearchLayeresegue il rendering delle pagine selezionate tramite PDFium e invia pixel BGRA top-down limitati a unIPdfOcrProviderfornito dal chiamanteTPdfOcrWordtrasporta testo Unicode, confidenza e quadrilaterali nello spazio dei pixel che vengono mappati attraverso la geometria nativa della pagina in testo ricercabile invisibileTPdfOcrReportregistra il completamento per pagina, i salti per testo esistente, gli errori, l'annullamento, i pixel renderizzati e le parole accettate o rifiutate
Modificato (Changed)
- L'inserimento OCR preserva i flussi immagine della scansione originale, filtra i risultati malformati o a bassa confidenza, esegue il commit una volta per pagina e ripristina la pagina attiva
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.37.0 in modo coerente
Version 3.36.0
Aggiunto (Added)
ExtractTablesrileva tabelle con righe di delimitazione e tabelle allineate tramite spazi a partire dalla geometria nativa delle parole e dalle rette di tracciato trasformateTPdfTableriporta righe, colonne, celle unite, limiti di pagina, celle di intestazione, modalità di rilevamento, confidenza e output diretto CSV o JSONExtractDocumentTablesanalizza ogni pagina sotto budget condivisi e contrassegna le tabelle corrispondenti che continuano attraverso i confini di pagina
Modificato (Changed)
- L'estrazione delle tabelle applica limiti configurabili di parole, righe di delimitazione, celle e tabelle e ripristina la pagina attiva dopo le analisi a livello di documento
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.36.0 in modo coerente
Version 3.35.0
Aggiunto (Added)
GenerateTaggedLayoutcrea un nuovo documento di layout semantico con contenuto marcato nativo, un albero di struttura Document, mappature ParentTree e IDTree e metadati di lingua del documentoTPdfLayoutSemanticsmodella intestazioni, sezioni, elenchi, figure, didascalie, tabelle, associazioni di intestazione, span, testo alternativo, testo effettivo, lingue e ID di elementoTPdfLayoutDocument.AddLinkemette annotazioni Link URI e associa ogni annotazione al proprio elemento di struttura Link tramite mappature OBJR e StructParent
Modificato (Changed)
- Il testo del layout usa per impostazione predefinita la semantica di paragrafo, mentre intestazioni, piè di pagina, filetti, immagini e moduli riutilizzabili diventano artefatti per impostazione predefinita a meno che non siano taggati esplicitamente
- La validazione del piano semantico rifiuta ID duplicati, padri mancanti, cicli, contenimento di elenchi o tabelle non valido, figure senza testo sostitutivo e ID di intestazione di tabella non risolti prima dell'emissione del documento
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.35.0 in modo coerente
Version 3.34.0
Aggiunto (Added)
TPdf.AddShapedTextscrive sequenze di glifi RTL, bidi, contestuali e con legature tramite lo shaping nativo di sistema e le API dei font CID Type 2 di PDFiumShapePdfTexteTPdfUniscribeTextShaperespongono ID di glifo posizionati, advance, offset, cluster di origine, posizioni visive delle sequenze e livelli bidi senza modificare un documento
Modificato (Changed)
- Le mappe ToUnicode generate coprono ogni glifo con shaping mentre
ActualTextmemorizza la stringa Unicode logica originale per i consumer di estrazione e accessibilità conformi - Le stringhe di contenuto marcato con byte order mark UTF-16 ora vengono decodificate correttamente tramite
PageObjectMarks TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.34.0 in modo coerente
Version 3.33.0
Aggiunto (Added)
TPdfLayoutCachedNodecostruisce contenuto di layout subclassato al primo utilizzo e supporta posizionamenti scalati ripetuti tramiteAddCachedNodeTPdfLayoutPlanriporta hit e miss della cache di misurazione, posizionamenti di nodi in cache e XObject nativi riusati
Modificato (Changed)
BuildPlanriusa i piani corrispondenti in base a vincoli di pagina completi, contenuto, font, stile, origine e identità del misuratore senza ripetere la misurazione del testoGenerateLayoutconverte ogni nodo in cache univoco in un XObject vincolato alla destinazione e crea oggetti Form leggeri per ogni posizionamentoTPdf.AboutInfo, i metadati del pacchetto e i metadati dell'installatore ora riportano Version 3.33.0 in modo coerente
Version 3.32.0
Aggiunto (Added)
TPdfLayoutDocumentcostruisce testo a capo, spaziatori, filetti, immagini, XObject di pagina riutilizzabili, interruzioni di pagina esplicite, intestazioni e piè di pagina in un piano di pagine misuratoGenerateLayoutimpagina il layout completo prima di aggiungere atomicamente pagine e oggetti pagina nativi, con riferimenti{page}e{pages}stabili
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto e i metadati dell'installatore ora riportano Version 3.32.0 in modo coerente
Version 3.31.0
Aggiunto (Added)
- I builder di
TPdfPagePlandescrivono operazioni di pagina di eliminazione, spostamento, inserimento, divisione e unione senza applicarle ValidatePagePlanrestituisce la mappa esatta dalle pagine vecchie a quelle nuove e inventaria segnalibri, destinazioni denominate, etichette di pagina, campi modulo, pagine taggate, funzionalità importate e firme interessate
Sicurezza (Security)
- I piani che lascerebbero destinazioni di navigazione pendenti o modificherebbero contenuto firmato senza autorizzazione esplicita vengono rifiutati prima che qualsiasi operazione nativa di pagina venga eseguita
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.31.0 in modo coerente
Version 3.30.0
Aggiunto (Added)
SaveRecoverySnapshotscrive un pacchetto di ripristino con checksum e dimensione limitata contenente l'impronta digitale dell'origine e il giornale verificato delle modifiche del documentoRestoreRecoverySnapshotriproduce un pacchetto di ripristino solo quando il suo checksum, la catena del giornale, l'impronta digitale dell'origine e l'impronta digitale ripristinata corrispondono tutteEnableRecoveryAutosaveaggiorna atomicamente un file di ripristino esplicito dopo ogni commit, annullamento o riapplicazione con modifiche senza riscrivere il PDF di origine
Modificato (Changed)
InspectRecoverySnapshotriporta l'origine del ripristino, le impronte digitali, il conteggio delle voci, la posizione e l'archiviazione limitata senza applicare il pacchettoImportEditJournale il ripristino di recupero ora richiedono l'autorizzazione esplicitaAllowSignedDocumentprima di applicare modifiche a un PDF firmato- L'archiviazione dei pacchetti di ripristino usa l'archivio ad accesso casuale limitato configurato e la sostituzione write-through nella stessa directory per giornali di grandi dimensioni e aggiornamenti autosave resistenti ai crash
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.30.0 in modo coerente
Version 3.29.0
Aggiunto (Added)
BeginEditTransaction,CommitEditTransactioneRollbackEditTransactionraggruppano modifiche arbitrarie del documento nativo in transazioni atomicheUndoEditeRedoEditapplicano delta inversi e in avanti verificati con SHA-256 su modifiche di pagina, oggetto, annotazione, allegato e metadatiExportEditJournaleImportEditJournalrendono persistenti delta portatili limitati con validazione dell'impronta digitale dell'origine e della catena di digest per una successiva riproduzione
Modificato (Changed)
- Gli snapshot delle transazioni usano output nativo riproducibile così che i commit senza modifiche rimangano vuoti anche quando i salvataggi ordinari di PDFium contengono identificatori o timestamp non deterministici
- I commit non riusciti e le riproduzioni di giornale non valide ripristinano atomicamente il precedente documento caricabile, mentre il conteggio delle voci, i byte memorizzati e la dimensione degli snapshot restano sotto i limiti configurati dal chiamante
- I PDF firmati richiedono l'autorizzazione esplicita
AllowSignedDocumentprima che una transazione di modifica del documento abbia inizio TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.29.0 in modo coerente
Version 3.28.0
Aggiunto (Added)
TPdf.InspectOptionalContentenumera i livelli OCG, le configurazioni predefinite e alternative, gli stati d'uso View/Print/Export, i metadati di zoom e lingua, i livelli bloccati, gli array di ordine, i radio group, le policy OCMD, le espressioni di visibilità e lo stato effettivo di renderingTPdf.SaveAsOptionalContentConfiguredscrive una copia rigorosamente verificata con gli stati dei livelli selezionati dal chiamante per un uso e una configurazione scelti
Modificato (Changed)
- L'output degli stati dei livelli ora aggiorna sia gli array
/ONe/OFFdella configurazione sia i dizionari di stato Usage degli OCG, così che PDFium applichi la visibilità richiesta attraverso il suo contesto di rendering nativo - Le scritture di configurazione rifiutano gruppi sconosciuti, modifiche a livelli bloccati, conflitti di radio group, file stadiati crittografati e file firmati senza autorizzazione esplicita, e rimuovono per impostazione predefinita le regole di stato automatico per mantenere deterministico il risultato selezionato
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.28.0 in modo coerente
Version 3.27.0
Aggiunto (Added)
TPdf.RenderPageByIndexesegue il rendering di qualsiasi pagina basata su uno a una dimensione esatta in pixel senza cambiare la pagina di modifica attiva né generare eventi di cambio paginaPageSceneCacheCapacity,PageSceneCacheCounteClearPageSceneCacheespongono controllo e diagnostica limitati della cache delle scene
Modificato (Changed)
- I rendering di pagine indicizzate, le miniature renderizzate e l'estrazione delle miniature incorporate ora riusano lo stato delle pagine di PDFium analizzato tramite una cache LRU a otto voci per impostazione predefinita
- Le voci della scena vengono invalidate all'attivazione della pagina, alla modifica, ai cambi dell'albero delle pagine, ai callback di stato del modulo, alla cancellazione esplicita e alla distruzione del documento, con i rendering in corso trattenuti in sicurezza fino al rilascio
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.27.0 in modo coerente
Version 3.26.0
Aggiunto (Added)
TPadesSignatureAlgorithmInforiporta per ogni firmatario CMS gli OID di digest, firma, chiave pubblica e curva denominata insieme al proprio stato di policy degli algoritmi valutato indipendentementeInspectPadesSignatureAlgorithmeEvaluatePadesSignatureAlgorithmriconoscono i profili P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 e Ed448
Sicurezza (Security)
- La validazione PAdES ora rifiuta discrepanze di curva ellittica e di digest, OID di firma ECDSA in disaccordo con il digest CMS, parametri EC senza nome, parametri Ed25519 e lunghezze di output SHAKE256 Ed448 diverse da 512 bit
- La verifica CMS nativa rimane la fonte di validità crittografica, mentre gli algoritmi non disponibili e le curve non riconosciute vengono riportati come
pcsUnsupportedinvece di essere trattati come firme non valide TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.26.0 in modo coerente
Version 3.25.0
Aggiunto (Added)
TPdf.ExportObjectGraphesporta gli oggetti attivi classici, a flusso xref e a flusso di oggetti come JSON tipizzato e limitato con dizionari, array, stringhe, nomi, valori scalari, riferimenti indiretti, conteggi di byte dei flussi e digest SHA-256 facoltativi dei flussi esplicitiTPdf.SaveAsObjectGraphPatchedimposta o rimuove valori di dizionario di primo livello verificati rispetto allo schema tramite valori di patch tipizzati null, Boolean, integer, real, name, text-string e indirect-reference
Sicurezza (Security)
- L'esportazione del grafo di oggetti applica budget di oggetti, ricorsione, stringhe e byte di output, mentre il patching valida ogni operazione prima della consegna, rifiuta riferimenti pendenti, operazioni duplicate, input crittografati, modifiche ai filtri o alle lunghezze dei flussi protetti e documenti firmati salvo autorizzazione esplicita
- Le patch del grafo di oggetti vengono stadiate come revisione incrementale, rimaterializzate per la verifica xref, caricate in modalità strict tramite PDFium e copiate o rinominate atomicamente solo dopo che tutti i controlli hanno successo
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.25.0 in modo coerente
Version 3.24.0
Aggiunto (Added)
TPdf.ValidatePadesTrustverifica ogni firma detached individuabile rispetto all'ByteRangeoriginale esatto, valuta il binding signing-certificate-v2 e l'attendibilità di sistema Windows corrente e riporta stati indipendenti di firma, catena, revoca e timestampTPdf.ValidatePadesTrustAsynccrea uno snapshot dell'origine caricata originale prima dell'invio, riporta l'avanzamento a stadi per analisi, crittografia, costruzione della catena, AIA, OCSP, CRL e lavoro di timestamp RFC 3161 e supporta l'annullamento cooperativoTPadesTrustValidationOptionsseleziona l'attendibilità offline o online, la verifica facoltativa di revoca e timestamp, un timeout limitato di recupero URL, un token di annullamento e un callback di avanzamento
Sicurezza (Security)
- I token di timestamp della firma e di Document Time-stamp ora validano la propria impronta del messaggio SHA-256, la firma CMS allegata, la catena TSA e lo stato di revoca facoltativo indipendentemente dalla firma ordinaria del documento
- La validazione dell'attendibilità non calcola mai l'hash di una copia risalvata da PDFium, predefinisce il recupero dei certificati solo dalla cache offline e riporta stati non supportati o indeterminati invece di trattare come valide le evidenze di attendibilità o revoca native non disponibili
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.24.0 in modo coerente
Version 3.23.0
Aggiunto (Added)
TPdf.RenewPadesArchiveTimestampeRenewPadesArchiveTimestampToStreamaggiungono un nuovo Document Time-stamp RFC 3161 a una catena di firme PAdES esistente senza modificare alcun byte storicoTPadesArchiveTimestampOptionscontrolla l'accesso TSA, il nonce, la capacità riservata del token e un aggiornamento completo facoltativo del DSS mentreTPadesArchiveTimestampReportregistra i livelli di origine e risultato, le lunghezze delle catene, le lunghezze in byte e l'identità del timestamp restituito
Corretto (Fixed)
- L'output PAdES B-LTA nuovo e rinnovato dichiara ESIC ExtensionLevel 2, mentre la validazione B-LT non richiede più il Level 2 a meno che non sia presente un Document Time-stamp
Sicurezza (Security)
- Il rinnovo calcola l'hash dei byte originali caricati esatti più qualsiasi aggiornamento DSS richiesto, rifiuta origini crittografate o incomplete, valida il risultato B-LTA individuabile prima di scrivere l'output e stadia l'output su file prima della sostituzione
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.23.0 in modo coerente
Version 3.22.0
Aggiunto (Added)
TPdf.AnalyzeSignatureRevisionsricostruisce la catena originale di revisioni incrementali e restituisce le modifiche degli oggetti per ogni firma classificate rispetto ai permessi DocMDP e FieldMDPTPadesRevisionAnalysisReportdistingue gli aggiornamenti consentiti di moduli, annotazioni, firme e materiali di validazione dalle modifiche non consentite di pagina o documento, dai casi non risolti e dalle definizioni shadow sospette
Sicurezza (Security)
- L'analisi delle revisioni rileva definizioni di oggetti non referenziate, ridefinizioni di oggetti firma, contenuto attivo, catene di revisione malformate e oggetti compressi non risolti applicando budget limitati di revisioni, oggetti e modifiche
- L'analisi usa sempre il file originale caricato, il buffer in memoria, lo stream personalizzato o l'origine progressiva completata anziché byte riscritti da PDFium
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.22.0 in modo coerente
Version 3.21.0
Aggiunto (Added)
TPdf.PreparePadesRemoteSignaturecrea un segnaposto a larghezza fissa per firma detached e restituisce una richiesta persistente contenente il digest SHA-256 del documento, l'ByteRangeesatto, le coordinate della prenotazione e l'impronta digitale del PDF preparatoTPdf.CompletePadesRemoteSignatureconclude le sessioni di firma HSM, cloud o interrotte dopo aver validato la richiesta persistente e il CMS restituitoTPdf.SavePadesRemoteSigningRequesteTPdf.LoadPadesRemoteSigningRequestforniscono un formato di sessione binario versionato e stabile per i confini di processo e di macchina
Sicurezza (Security)
- Il completamento rifiuta PDF preparati modificati, coordinate
ByteRangealterate, segnaposto non vuoti riusati, valori CMS troppo grandi, forme SignedData non supportate, attributi signing-certificate-v2 mancanti e digest di messaggio CMS che non corrispondono al documento preparato TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.21.0 in modo coerente
Version 3.20.0
Aggiunto (Added)
TPadesDssOptions.Vrisscrive un dizionario indiretto/Type /VRIper firma, con chiave lo SHA-1 maiuscolo del valore/Contentsdecodificato completo incluso il paddingTPadesDssVriseleziona il materiale di certificati, OCSP e CRL tramite indici validati mentre la firma PAdES B-LT e B-LTA ora crea automaticamente il VRI della nuova firma
Modificato (Changed)
- I certificati DSS, le risposte OCSP e le CRL vengono deduplicati per hash del contenuto con ordinamento stabile alla prima occorrenza, controlli di collisione byte-esatti e rimappatura dei riferimenti VRI prima che qualsiasi byte di destinazione venga scritto
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.20.0 in modo coerente
Version 3.19.0
Aggiunto (Added)
TPdf.GetStructuredTextconverte la pagina corrente in record riutilizzabili di blocco, riga e span con stile preservando gli indici dei caratteri di origine, gli scalari Unicode, la geometria, i nomi dei font, le dimensioni, i pesi e gli angoli del testoTPdfStructuredTextOptionsseleziona l'ordine del content stream o del layout fisico, l'arricchimento facoltativo di font e semantica e un budget massimo di caratteri fail-closed- I frammenti leggibili di Tagged PDF ed euristici arricchiscono i blocchi con tipo di struttura, livello di intestazione, lingua, origine e identità dell'elemento di struttura mentre il testo alternativo delle Figure senza corrispondenza resta rappresentato
Modificato (Changed)
- L'estrazione del layout fisico ora usa un ordinamento dei caratteri O(n log n), buffer di righe e span a crescita geometrica, clustering di righe e colonne, costruzione Unicode bufferizzata e cache dei font per oggetti testo adiacenti non null per prestazioni prevedibili sulle pagine di grandi dimensioni
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.19.0 in modo coerente
Version 3.18.0
Sicurezza (Security)
TPdf.SaveAsRedactedapplica ogni rettangolo/Redacta uno snapshot isolato del documento, rimuove ogni oggetto pagina di primo livello intersecante e dipinge un rettangolo di sostituzione opaco senza cambiare il documento caricato- L'output redatto rimuove le annotazioni di redazione, rimuove facoltativamente le altre annotazioni intersecanti, elimina gli allegati incorporati nativi e rimuove
/AFdel catalogo, il contenuto attivo, i moduli, i metadati e gli oggetti delle revisioni precedenti non raggiungibili TPdfRedactionOptionscontrolla il colore di sostituzione, la rimozione delle annotazioni sovrapposte e un budget fail-closed di scansione degli oggetti pagina mentreTPdfRedactionReportregistra ogni rimozione e metrica di outputTPdfSanitiseOptions.StripAssociatedFilesora rimuove per impostazione predefinita i riferimenti ai file associati a livello di catalogo
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.18.0 in modo coerente
Version 3.17.0
Aggiunto (Added)
TPdf.RenderPagesParallelesegue il rendering in simultanea di richieste di pagine basate su uno mentre ogni worker possiede un modulo PDFium, un documento e uno stato di pagina caricati indipendentemente a partire da un unico snapshot del documento acquisitoTPdfParallelRenderOptionscontrolla DPI, numero di worker, rotazione, flag di rendering nativi, colore di sfondo, limiti di pixel per pagina e limiti aggregati di output trattenutoTPdfParallelRenderReportpreserva l'ordine delle richieste e restituisce buffer BGRA o RGBA top-down di proprietà del chiamante con successo, annullamento, errore, dimensioni, tempi e dettagli diagnostici per pagina- Il rendering progressivo dei worker esegue il polling di
IPdfCancellationTokentra i blocchi nativi mentre le richieste non valide e i superamenti di budget restano isolati nei rispettivi risultati TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.17.0 in modo coerente
Version 3.16.0
Aggiunto (Added)
TPdfEncryptionRevision.erR7aggiunge l'output ISO/TS 32003 AES-256-GCM con/V 6,/R 7,/CFM /AESV4e l'estensione per sviluppatori PDF 2.0 obbligatoria- Ogni stringa e flusso crittografato riceve un IV univoco a 96 bit, un testo cifrato di lunghezza invariata e un tag di autenticazione a 128 bit, mentre
EncryptMetadata = Falsepreserva i byte del flusso di metadati DecryptAesGcmDocumentBytesvalida le password utente o proprietario, i permessi crittografati, i dati PDF MAC standalone facoltativi e ogni tag GCM prima di restituire byte in chiaro compatibili con PDFium- L'output AESV4 può essere combinato con
TPdfEncryptOptions.EnableIntegrityProtectioncosì che l'autenticazione GCM per oggetto e la protezione PDF MAC ISO/TS 32004 dell'intero documento coesistano - La crittografia ora usa voci di cross-reference classiche valide invece di interpretare testo a forma di oggetto dentro i dati dei flussi come oggetti indiretti
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.16.0 in modo coerente
Version 3.15.0
Aggiunto (Added)
TPdfEncryptOptions.EnableIntegrityProtectionscrive codici di autenticazione PDF MAC standalone ISO/TS 32004 per documenti AES-256 Standard Security Handler revision 5 e 6TPdf.ValidatePdfMacverifica i byte esatti dell'origine originale, lo/ByteRangerigoroso che copre fino a EOF,AuthenticatedDataCMS, la chiave del file derivata dalla password, gli attributi autenticati, la chiave MAC wrappata e il valore HMACFPdfHmacaggiunge HMAC-SHA256 e HKDF-SHA256 mentreFPdfAesaggiunge le primitive di Key Wrap AES-256 RFC 3394 e di unwrap autenticatoTPdfMacValidationResultdistingue codici di autenticazione validi, assenti, non validi e non supportati con testo diagnosticoTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.15.0 in modo coerente
Version 3.14.0
Aggiunto (Added)
TPdf.ValidatePadesora verifica le firme CMS detached rispetto ai segmenti/ByteRangeoriginali esatti su Windows, inclusi gli attributi firmati e il valore della firmaTPadesValidationResultespone lo stato di integrità aggregato e gli stati per firma di ByteRange, CMS,signing-certificate-v2, attendibilità di sistema, revoca e timestamp senza confondere evidenze non supportate o non verificate con una firma non valida- Il binding del certificato del firmatario viene verificato con SHA-256, le catene di certificati usano la valutazione dell'attendibilità di sistema Windows solo da cache e i codici di errore nativi restano disponibili per la diagnostica
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.14.0 in modo coerente
Version 3.13.1
Corretto (Fixed)
TPdf.ValidatePadesora ispeziona il file originale, la memoria bufferizzata o i byte dello stream personalizzato invece di una copia risalvata da PDFium che potrebbe invalidare offset o scartare dizionari di firma- I controlli
/ByteRangePAdES ora accettano firme che coprono una precedente revisione PDF completa seguita da aggiornamenti incrementali validi, validando anche gli intervalli dei Document Time-stamp TPadesValidationResult.SourceStatusdistingue la validazione dell'origine originale dall'input progressivo non disponibile o incompleto e i predicati di conformità rifiutano i risultati senza byte originaliTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.13.1 in modo coerente
Version 3.13.0
Aggiunto (Added)
FPdfSha3fornisce primitive SHA3-256, SHA3-384, SHA3-512 e SHAKE256 senza dipendenze per ISO/TS 32001 e il relativo lavoro crittografico PDF 2.x- I contesti incrementali assorbono input suddivisi arbitrariamente mentre SHAKE256 supporta chiamate squeeze ripetute e output che attraversa i confini di rate dello sponge
- Helper monofase per array di byte e esadecimale in minuscolo completano l'API in streaming, con validazione esplicita di ciclo di vita e dimensioni su Delphi, C++Builder e Lazarus
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.13.0 in modo coerente
Version 3.12.0
Aggiunto (Added)
TPdf.ImportFDFimporta dati di modulo FDF da file o stream e applica i valori analizzati tramite il percorso esistente dei campi widgetFdfImportFromStreameFdfImportFromFileanalizzano campi gerarchici diretti o indiretti, stringhe letterali ed esadecimali PDF, PDFDocEncoding, testo Unicode, valori nome e valori vuoti espliciti sotto budget di risorse limitati- L'esportazione FDF ora scrive nomi di campo e valori non ASCII come stringhe di testo UTF-16BE conformi agli standard e applica un escape sicuro ai nomi dei file di origine
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.12.0 in modo coerente
Version 3.11.0
Aggiunto (Added)
TPdf.DetectPageSkewesegue il rendering della pagina corrente a basso DPI e rileva l'angolo di inclinazione proiettando i pixel scuri su angoli di rotazione candidati, restituendo l'angolo che massimizza la varianza delle somme di riga (allineamento delle righe di testo) con una precisione di ~0.1 gradiTPdfSkewReportespone l'angolo rilevato, la confidenza e le dimensioni del campioneTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.11.0 in modo coerente
Version 3.10.0
Aggiunto (Added)
TPdf.GetTextInReadingOrderestrae il testo della pagina corrente in ordine di content stream grezzo o in ordine di layout fisico (dall'alto verso il basso, da sinistra a destra) tramiteFPDFText_GetCharBox+ estrazione di caratteri ordinata per posizione, così che il testo a più colonne e riordinato visivamente si legga in modo naturale- L'enum
TPdfReadingOrderseleziona traroContentOrdereroPhysicalLayout TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.10.0 in modo coerente
Version 3.09.0
Aggiunto (Added)
TPdfImageOptimizeOptions.PreserveBilevelsalta le immagini bicromatiche a 1 bit (ImageMask / scansioni di line-art) duranteOptimizeImagescosì che il downsampling nearest-neighbour non ne distrugga i bordi nettiTPdfImageOptimizeOptions.MinDimensionsalta le immagini più piccole della soglia (in genere icone o elementi decorativi che non traggono beneficio da un'ulteriore riduzione)TPdfImageOptimizeOptions.Defaultfornisce il punto di partenza consigliato (150 DPI di destinazione, rapporto 1.5, bicromatiche preservate, dimensione minima 8)TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.09.0 in modo coerente
Version 3.08.0
Aggiunto (Added)
TPdfTileCachefornisce una cache LRU limitata di tile di pagina renderizzati con chiave revisione del documento, pagina, zoom, rotazione, flag di rendering e rettangolo di dispositivo, così che i tile invariati non vengano ri-renderizzati ai repaint e i tile obsoleti di un salvataggio precedente vengano rimossi automaticamenteTTileKeyespone la chiave di cache composita con una factoryCreatestatica e un comparatoreEqualsTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.08.0 in modo coerente
Version 3.07.0
Aggiunto (Added)
TPdf.GetAnnotationFontColoreTPdf.SetAnnotationFontColorincapsulano le già bindate ma inutilizzateFPDFAnnot_GetFontColoreFPDFAnnot_SetFontColor, esponendo lettura e scrittura del colore del testo dei widget per la modifica dei campi modulo senza toccare direttamente il dizionario dell'annotazioneTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.07.0 in modo coerente
Version 3.06.0
Aggiunto (Added)
TPdf.RenderPageBandedesegue il rendering della pagina corrente in bande orizzontali tramite un callback, così che poster e pagine tecniche possano essere esportati senza mai allocare una bitmap di destinazione completa — ogni banda viene renderizzata in unaTBitmapappena creata dell'altezza di banda richiesta e liberata dopo il ritorno del callbackTPdfBandCallbackespone il contratto per banda (indice di banda, offset top-y, bitmap) con un valore di ritorno Boolean che consente ai chiamanti di annullare in anticipo il rendering a bandeTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.06.0 in modo coerente
Version 3.05.0
Aggiunto (Added)
TPdf.RenderPageProgressiveWithColorSchemeguida il ciclo di rendering progressivo nativo con uno schema di colore per ipovedenti tramiteFPDF_RenderPageBitmapWithColorScheme_Start, permettendo ai chiamanti di sovrascrivere i colori di riempimento / contorno dei tracciati e di riempimento / contorno del testo per l'accessibilità mantenendo il ciclo Continue consapevole dell'annullamentoTPdfColorSchemeespone i quattro campi di overrideTColorcon unDefaultche delega ai colori integrati di PDFium quando tutti i campi sonoclDefaultTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.05.0 in modo coerente
Version 3.04.0
Aggiunto (Added)
TPdf.ExportFDFserializza i valori dei campi modulo come documento FDF (ISO 32000-1 §12.7.11) accanto al percorso XFDF esistente, riusando lo stesso modello di datiTXfdfFieldcosì che i chiamanti raccolgano i campi una volta sola ed emettano l'uno o l'altro formatoFdfExportToStreameFdfExportToFileinFPdfXfdfespongono il serializzatore FDF di basso livello per i chiamanti che costruiscono raccolte di campi indipendentemente da unTPdfcaricatoTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.04.0 in modo coerente
Version 3.03.0
Aggiunto (Added)
TPdf.SaveAsSanitisedscrive una copia pulita a revisione singola che rimuove il contenuto attivo dal catalogo (/OpenAction,/AAdel catalogo,/Names,/AcroForm,/Metadata) e poi pota gli oggetti non raggiungibili così che i corpi orfani di JavaScript, azioni e allegati scompaiano dal corpo del fileTPdfSanitiseOptionsespone controlli di rimozione indipendenti per vettore più una passata facoltativa di potatura della raggiungibilità;TPdfSanitiseReportregistra il conteggio delle voci rimosse, il conteggio degli oggetti potati, i conteggi in byte ed eventuali erroriTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.03.0 in modo coerente
Version 3.02.0
Aggiunto (Added)
TPdf.SaveAsPageLabelledscrive una copia PDF completa il cui number tree/PageLabelsdel catalogo viene sostituito con gli intervalli forniti, applicando stili di numerazione decimali, romani maiuscoli/minuscoli e alfabetici maiuscoli/minuscoli con stringhe di testo prefisso facoltative e numeri iniziali secondo ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyleeTPdfPageLabelReportespongono il modello di intervalli, l'enum di stile e i conteggi di byte/intervalli per salvataggio- Le voci
/PageLabelsesistenti del catalogo vengono rilevate e rifiutate a meno che non venga passatoReplaceExisting=True, nel qual caso la vecchia voce viene rimossa prima di iniettare i nuovi intervalli TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.02.0 in modo coerente
Version 3.01.0
Aggiunto (Added)
TPdf.FlattenPageRotationincorpora l'attuale/Rotatedi ogni pagina nel content stream, nei box di pagina e nei rettangoli delle annotazioni, poi azzera/Rotatea 0 — incapsulandoFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotationcosì che il layout visivo sia preservato senza dipendere dal suggerimento di visualizzazione della rotazioneTPdfFlattenRotationOptionsespone i controlli per pagina di trasformazione delle annotazioni, scambio dei box di pagina e aggiornamento automatico;TPdfFlattenRotationReportregistra le pagine elaborate, saltate e fallite più il totale degli oggetti e delle annotazioni trasformatiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.01.0 in modo coerente
Version 3.00.0
Aggiunto (Added)
TPdf.StampPagesFromPdfapplica come timbro una pagina di origine sotto forma di overlay o underlay Form XObject posizionato, scalato e facoltativamente ruotato su una o più pagine di destinazione, incapsulandoCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexcon policy esplicite di box di pagina, ancoraggio, margine, scala, rotazione, fusione e z-orderTPdfOverlayOptionseTPdfOverlayReportespongono i controlli di posizionamento, trasformazione, fusione e z-order più i conteggi per pagina di timbri applicati, falliti e saltatiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 3.00.0 in modo coerente
Version 2.99.0
Aggiunto (Added)
TPdf.RefreshAppearancerigenera selettivamente l'appearance stream di un singolo widget tramiteFPDFAnnot_SetAP, evitando una ricostruzioneNeedAppearancesdell'intera paginaTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.99.0 in modo coerente
Version 2.98.0
Aggiunto (Added)
TPdfView.MouseDownora instrada gli eventi del pulsante destro al motore nativo di riempimento moduli tramiteFORM_OnRButtonDown, abilitando menu contestuali e interazioni widget al clic destro- Le voci 78 della mappa dei percorsi (mappatura delle annotazioni Link), 82 (presentazione dei widget) e 83 (modello degli attributi di struttura) confermate come già completate tramite l'infrastruttura esistente
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.98.0 in modo coerente
Version 2.97.0
Aggiunto (Added)
TPdf.SetDeterministicTimeeTPdf.RestoreActualTimeconsentono a test e build riproducibili di iniettare un'ora di creazione, modifica e corrente fissa tramite callback nativi supportatiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.97.0 in modo coerente
Version 2.96.0
Aggiunto (Added)
TPdf.GetWidgetAdditionalActionJavaScriptlegge il JavaScript delle azioni aggiuntive del widget per un dato trigger di evento tramiteFPDFAnnot_GetFormAdditionalActionJavaScriptsenza eseguire alcuno scriptTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.96.0 in modo coerente
Version 2.95.0
Aggiunto (Added)
TPdf.GetObjectTextestrae il testo Unicode di un oggetto pagina di testo tramiteFPDFTextObj_GetTextper la modifica precisa del contenuto e la diagnostica della codificaTPdf.GetObjectsByTyperestituisce gli indici di tutti gli oggetti pagina corrispondenti a una categoria (testo, tracciato, immagine, modulo, sfumatura) per un output selettivo per categoriaTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.95.0 in modo coerente
Version 2.94.0
Aggiunto (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueeSetAttachmentStringValueleggono, scrivono e verificano valori di estensione file-spec personalizzati sugli allegati incorporatiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.94.0 in modo coerente
Version 2.93.0
Aggiunto (Added)
TPdf.InsertObjectAtIndexinserisce un oggetto pagina in una posizione richiesta dello stack tramiteFPDFPage_InsertObjectAtIndexinvece di accodarlo sempreTPdf.UpdateAnnotationObjectesegue il commit di un oggetto aspetto annotazione modificato tramiteFPDFAnnot_UpdateObjectcosì che le modifiche agli oggetti pagina di proprietà dell'annotazione persistano in modo affidabileTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.93.0 in modo coerente
Version 2.92.0
Aggiunto (Added)
TPdf.InsertClipPathcrea un clip path rettangolare e lo inserisce nella pagina corrente tramite i percorsi nativiFPDF_CreateClipPatheFPDFPage_InsertClipPath, completando l'ispettorePageObjectClipPathesistenteTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.92.0 in modo coerente
Version 2.91.0
Aggiunto (Added)
TPdf.GetPageComplexityanalizza la pagina corrente e riporta i conteggi degli oggetti immagine, tracciato e testo più i segmenti totali dei tracciati, i pixel totali delle immagini e la presenza di trasparenza per la pianificazione del renderingTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.91.0 in modo coerente
Version 2.90.0
Aggiunto (Added)
TPdf.IsAnnotationSubtypeSupportedchiede alla DLL PDFium caricata quali sottotipi di annotazione supporta prima della modificaTPdf.ChooseRenderFlagsseleziona i flag di rendering nativi (halftone, cache immagini limitata) a partire da scala finale e dimensione di destinazione per un subsampling adattivo delle immaginiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.90.0 in modo coerente
Version 2.89.0
Aggiunto (Added)
TPdf.GetTextRenderModeespone la modalità nativa di rendering del testo (riempimento, contorno, clip) di un oggetto pagina di testo per la diagnostica di authoringTPdf.GetTextObjectRenderedBitmaprenderizza un singolo oggetto testo in una bitmap isolata tramite il percorso nativoFPDFTextObj_GetRenderedBitmapTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.89.0 in modo coerente
Version 2.88.0
Aggiunto (Added)
TPdf.GetThumbnailora ricade sul rendering di una miniatura sostitutiva quando la pagina non ne ha una incorporata, implementando la preferenza prima la miniatura incorporataTPdf.LinkAtPointrestituisce se esiste un link nativo a una coordinata nello spazio di pagina usandoFPDFLink_GetLinkAtPointanziché scansioni basate solo su rettangoliTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.88.0 in modo coerente
Version 2.87.0
Aggiunto (Added)
TPdf.AuditActiveContentrestituisce uno snapshotTPdfActiveContentAuditcon il conteggio delle azioni JavaScript, il conteggio dei file incorporati, il conteggio delle firme, il tipo di modulo XFA e i permessi del documento senza eseguire alcuno script o azioneTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.87.0 in modo coerente
Version 2.86.0
Aggiunto (Added)
TPdf.GetFeatureInventoryanalizza ogni pagina una sola volta e restituisce un record unificato dei conteggi degli oggetti testo, tracciato, immagine, Form XObject e sfumatura insieme a fatti su allegati, firme, tipo di modulo, permessi e versione PDFTPdfFeatureInventoryaggrega in un unico snapshot i fatti a livello di documento che in precedenza richiedevano chiamate di proprietà separateTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.86.0 in modo coerente
Version 2.85.0
Aggiunto (Added)
TPdf.SaveAsReproducibleriscrive il documento così che due salvataggi dello stesso stato in memoria producano output identico byte per byte- I timestamp non deterministici di
/Info(/CreationDate,/ModDate) vengono rimossi e l'/IDdi origine (derivato da byte dipendenti dall'orologio) viene omesso, mentre l'ordine e la generazione degli oggetti restano stabili TPdfReproducibleReportriporta i conteggi degli oggetti mantenuti e potati più il numero di voci timestamp rimosseTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.85.0 in modo coerente
Version 2.84.0
Aggiunto (Added)
TPdf.SaveAsInlineImagesExternalisedriscrive il documento estraendo ogni immagine inlineBI/ID/EIin un image XObject riutilizzabile e sostituendo il blocco inline con un operatore/ImN Do- Le abbreviazioni del dizionario delle immagini inline (
/W,/H,/BPC,/CS,/F, valori di spazio colore e valori dei filtri) vengono espanse ai nomi completi degli image XObject così che l'oggetto estratto sia conforme agli standard - Il dizionario
/Resources /XObjectdella pagina viene aggiornato con i nuovi riferimenti XObject e il content stream riscritto viene compresso con Flate TPdfInlineImageExternaliseReportriporta i conteggi di esternalizzate, saltate e fallite più il numero di XObject creatiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.84.0 in modo coerente
Version 2.83.0
Aggiunto (Added)
TPdf.SaveAsFlateRecompressedriscrive il documento e ricodifica i flussiFlateDecodeidonei alla compressione massima, sostituendo un flusso solo quando il risparmio di byte misurato supera una soglia del chiamanteTPdfFlateRecompressOptionsseleziona un risparmio minimo in byte e un rapporto minimo di risparmio così che i flussi già ottimali restino invariatiTPdfFlateRecompressReportriporta i conteggi dei flussi ricompressi, saltati e falliti insieme ai totali in byte dei flussi originali e ricompressi- I numeri e le generazioni degli oggetti restano stabili; cambiano solo i payload dei flussi ricompressi e i loro valori
/Lengthdiretti, così che ogni cross-reference superstite rimanga valido TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.83.0 in modo coerente
Version 2.82.0
Aggiunto (Added)
TPdf.OptimizeImagespercorre ogni oggetto immagine di pagina e applica downsampling a quelle il cui DPI di posizionamento effettivo supera una destinazione selezionata dal chiamante, poi esegue il commit di ogni pagina toccata tramite il generatore di contenuto nativoTPdfImageOptimizeOptionsseleziona il DPI di destinazione e un rapporto minimo così che solo le immagini realmente sovracampionate vengano ricodificateTPdfImageOptimizeReportriporta i conteggi delle immagini ottimizzate, saltate e fallite insieme a un messaggio di errore strutturato- Il downsampling usa una passata nearest-neighbour sul buffer bitmap nativo di PDFium, preservando formato, stride e canale alpha di origine, e
FPDFImageObj_SetBitmapricodifica la superstite TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.82.0 in modo coerente
Version 2.81.0
Aggiunto (Added)
TPdf.SaveAsDeduplicatedriscrive il documento come un'unica revisione pulita che comprime font, immagini e Form XObject compatibili su un unico rappresentante condiviso- Un'impronta digitale ricorsiva del contenuto combina ogni dizionario di risorse, il suo sottografo raggiungibile completo e il suo payload di flusso grezzo, così che i duplicati si fondano solo quando il loro intero contenuto è identico
- Ogni cross-reference a un duplicato fuso viene riscritto al rappresentante superstite mentre la tabella di cross-reference classica ricostruita mantiene stabili i numeri degli oggetti
TPdfDedupReportriporta i conteggi degli oggetti mantenuti e potati più i conteggi per categoria di font, immagini e Form XObject fusiTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.81.0 in modo coerente
Version 2.80.0
Aggiunto (Added)
TPdf.SaveAsReachableriscrive il documento come un'unica revisione pulita che mantiene solo gli oggetti indiretti raggiungibili dal catalogo e dal dizionario /Info del trailerTPdfPruneReportriporta i conteggi degli oggetti indiretti mantenuti e potati insieme alle dimensioni in byte di origine e di output e a motivi di errore strutturati per input crittografato o malformato- Gli oggetti orfani non raggiungibili lasciati da aggiornamenti incrementali, unioni di pagine o salvataggi riparati vengono spazzati via, mentre il cross-reference classico e il trailer ricostruiti preservano
/Root,/Infoe/IDsenza rinumerare TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.80.0 in modo coerente
Version 2.79.0
Aggiunto (Added)
TPdf.CreateDocumentSearchcrea una ricerca in avanti o all'indietro sull'intero documento che restituisce una corrispondenza alla volta senza costruire un indice testuale dell'intero documentoTPdfDocumentSearchResultriporta la pagina basata su uno, l'intervallo di caratteri, il testo corrispondente e i rettangoli nello spazio di pagina per ogni risultato- Le sessioni di ricerca accettano
IPdfCancellationToken, trattengono solo gli handle di pagina e di testo PDFium correnti e vengono concluse in sicurezza alla chiusura del documento TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.79.0 in modo coerente
Version 2.78.0
Modificato (Changed)
TPdfRangeRequestSchedulerora anticipa i trasferimenti sovrapposti a priorità più bassa così che gli hint PDFium critici per la pagina non attendano dietro i download in background- I byte sparsi disponibili esternamente annullano i trasferimenti attivi ridondanti, mentre i callback di trasporto soppiantati o duplicati restituiscono False senza pubblicare coperture obsolete
- La promozione di priorità preserva le cronologie di retry indipendenti e l'anticipazione del trasporto non consuma più il budget di retry delle code di intervallo non interessate
TPdfRangeRequestStatistics.SupersededRequestCountriporta il lavoro di trasporto soppiantato da hint a priorità più alta o da copertura fornita esternamenteTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.78.0 in modo coerente
Version 2.77.0
Aggiunto (Added)
TPdf.SaveAsNormalizedContentscrive il contenuto di pagina normalizzato sintatticamente in uno stream o in un file sostituito atomicamente e riporta i conteggi delle pagine normalizzate, saltate e coalizzateNormalizePdfContentSequencefornisce una normalizzazione standalone limitata dei token per sequenze di content stream decodificate
Modificato (Changed)
- Gli array
/Contentsdi pagina ora possono essere coalizzati in un unico flusso preservando stringhe, nomi, payload di immagini inline, operatori sconosciuti e stato grafico tra flussi - Token malformati, ambiti di stato sbilanciati, filtri non supportati, input crittografato e riscritture di documenti firmati hanno policy esplicite e segnalazione di stato strutturata
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.77.0 in modo coerente
Version 2.76.0
Aggiunto (Added)
TPdfStreamInspectorinventaria oggetti flusso PDF fisici arbitrari e riporta offset degli oggetti, lunghezze grezze, catene di filtri, DecodeParms, marcatori di file esterni, stato di crittografia e percorsi nativi di immagini o allegatiCopyRawDatacopia payload codificati completi o finestre di byte validate, mentreDecodeDataapplica i predittori ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8 bit e PNG nell'ordine dichiaratoTPdfStreamInspectOptionslimita le risorse di origine, grezze, decodificate, di dizionario, di conteggio flussi e di rapporto di espansione, con report strutturati per limiti, dati malformati, codec non supportati, crittografia ed errori di scrittura
Modificato (Changed)
- La risoluzione della lunghezza dei flussi ora espone intervalli esatti per valori
/Lengthdiretti e indiretti, inclusi flussi di lunghezza zero e payload contenenti la sequenza letteraleendstream TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.76.0 in modo coerente
Version 2.75.0
Aggiunto (Added)
TPdfLoadOptionsaggiunge policy compatibile, strict e di ripristino al caricamento da file, memoria, intervallo di byte e stream personalizzatoTPdfLoadReportriporta il percorso di ripristino nativo, la validità xref, gli offset danneggiati, i conflitti di voci, i conteggi di revisione, i budget di audit e i problemi strutturati per documenti classici, ibridi e a flusso xrefTPdf.SaveAsRepairedcrea una copia completa a revisione singola e la carica indipendentemente in modalità strict prima di consegnare lo stream verificato o sostituire atomicamente un file di destinazione
Modificato (Changed)
- Gli overload di caricamento esistenti mantengono il comportamento compatibile e ora pubblicano la validità xref nativa e lo stato di ripristino tramite
LastLoadReport - Il caricamento strict rifiuta i documenti che hanno richiesto la ricostruzione xref nativa o che non hanno superato l'audit strutturale, mentre l'output di ripristino firmato richiede l'autorizzazione esplicita del chiamante
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.75.0 in modo coerente
Version 2.74.0
Aggiunto (Added)
TPdf.MergeFilesunisce elenchi di origini basate su file con intervalli di pagine e password per origine mantenendo aperto al massimo un documento di origineTPdfBatchMergeOptionsaggiunge la gestione degli errori con interruzione o salto, import per origine o a blocchi, policy di moduli e strutture, controllo dell'inserimento, callback di avanzamento, annullamento, copia delle preferenze del visualizzatore e controllo del rollbackTPdfBatchMergeReportriporta le pagine committate e sottoposte a rollback, gli esiti delle origini, le chiamate di importazione native, il blocco più grande, il picco di origini aperte, i rilevamenti delle policy, i problemi e lo stato terminale
Modificato (Changed)
- Il percorso batch predefinito esegue una importazione nativa di pagine per origine così che PDFium possa riusare gli oggetti clonati di quella origine, poi chiude l'origine prima di aprire il file successivo
- La modalità a blocchi fornisce punti di annullamento più fini e batch nativi più piccoli, mentre le origini parziali fallite e gli esiti di interruzione o annullamento possono rimuovere tutte le pagine inserite dall'operazione
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.74.0 in modo coerente
Version 2.73.0
Aggiunto (Added)
TPdfRandomAccessStorefornisce I/O sequenziale e posizionato thread-safe, mantiene il contenuto piccolo in memoria limitata e fa uno spill singolo su archiviazione temporanea privata a una soglia selezionata dal chiamanteTPdf.SaveMemoryLimiteSaveTemporaryDirectoryconfigurano lo stadio di salvataggio, mentreLastSaveSpillCounteLastSaveLargestMemoryBufferespongono diagnostica misurabile per salvataggio
Modificato (Changed)
- I buffer di stadio di salvataggio, conversione standard, validazione, crittografia, DSS e PAdES ora condividono archiviazione di lavoro limitata con file di spill esclusivi delete-on-close e scrubbing della memoria
- I callback di blocco PDFium personalizzati serializzano le seek ordinarie dello stream e usano letture posizionate indipendenti dal cursore quando basati su
TPdfRandomAccessStore - La scansione delle capacità XFA basata su file ora legge blocchi sovrapposti a dimensione fissa invece di copiare il PDF completo in memoria
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.73.0 in modo coerente
Version 2.72.0
Aggiunto (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveeEndIncrementalSaveforniscono una sessione di revisione che accoda solo oggetti indiretti modificati o di nuova creazioneTPdfIncrementalCommitInforiporta il conteggio degli oggetti modificati, i byte accodati, i byte totali di output e il conteggio delle revisioni riuscite per ogni commit
Modificato (Changed)
- Ogni commit sporco preserva l'output precedente completo come prefisso esatto di byte, non emette revisioni quando nulla è cambiato e prosegue nel formato classico o a flusso xref dell'origine
- L'output incrementale nativo a flusso xref viene riparato con il tipo, la voce self, la lunghezza, l'indice e il terminatore di oggetto richiesti prima dell'elaborazione successiva
- I documenti crittografati vengono rifiutati prima dell'inizio di una sessione, mentre i documenti firmati richiedono il permesso esplicito del chiamante così che la policy delle firme non possa essere aggirata accidentalmente
- L'overload su file completa un file temporaneo fratello prima di sostituire atomicamente la destinazione ed esegue il rollback dello stato della sessione dopo qualsiasi errore di scrittura o sostituzione
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.72.0 in modo coerente
Version 2.71.0
Aggiunto (Added)
TPdf.SaveAsObjectStreamscrive file PDF 1.5+ con gruppi di oggetti compressi limitati e un flusso xref puro contenente voci type-2 completePackPdfObjectStreamspuò modernizzare input classico, ibrido, a flusso xref e con object stream esistenti dopo aver risolto la revisione attiva
Modificato (Changed)
- L'ordinamento degli oggetti locale alla pagina, le larghezze adattive dei campi xref, l'accesso diretto al catalogo e i ceiling configurabili di membri e byte decodificati bilanciano dimensione del file e prestazioni di accesso casuale
- L'overload su file completa un file temporaneo fratello prima di sostituire atomicamente la destinazione, mentre le opzioni incrementali, di versione e di raggruppamento non valide vengono rifiutate prima dell'inizio dell'output
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.71.0 in modo coerente
Version 2.70.0
Aggiunto (Added)
TPdf.SaveAsLinearizedscrive un vero PDF Fast Web View su stream o file usando il raggruppamento degli oggetti della prima pagina, due sezioni di cross-reference e le tabelle hint Annex F degli offset di pagina e degli oggetti condivisi- I membri attivi degli object stream vengono materializzati automaticamente, permettendo a input a flusso xref e a object stream di diventare output adatto agli intervalli senza cambiare il contenuto visibile delle pagine
Modificato (Changed)
- L'overload su file completa un file temporaneo fratello prima di sostituire atomicamente la destinazione, mentre l'overload su stream mantiene le normali opzioni di salvataggio PDFium e i controlli espliciti di versione
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.70.0 in modo coerente
Version 2.69.0
Aggiunto (Added)
TPdfRangeRequestSchedulerconverte gli hint di intervallo di byte di PDFium in lavoro di trasporto con priorità, coalizzato e limitato in dimensione senza forzare un download contiguo- Completamento totale e parziale, retry limitati, deduplicazione della disponibilità sparsa, statistiche delle richieste e annullamento sicuro per generazione supportano pipeline di trasporto HTTP Range e personalizzate
TPdfProgressiveDocument.RangeRequestsriceve automaticamente gli hint di documento, modulo e pagina, promuovendo solo i byte esatti che bloccano una pagina interattiva
Modificato (Changed)
CancelProgressiveLoadora annulla il lavoro attivo sugli intervalli prima della rimozione di disponibilità e stream nativi e i completamenti di trasporto obsoleti vengono ignorati in sicurezzaTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.69.0 in modo coerente
Version 2.68.0
Aggiunto (Added)
TPdfProgressiveDocumentmantiene in vita la sessione di disponibilità di PDFium mentre uno stream remoto o in crescita ad accesso casuale riceve gli intervalli di byte richiesti da PDFiumCheckDocumentAvailability,CheckFormAvailabilityeLoadAvailablePagerestituiscono hintTPdfDownloadRangeuniti così che un host possa recuperare solo i dati necessari ad aprire e visualizzare una pagina linearizzataAvailableByteCountsupporta download contigui monotoni, mentreOnDataAvailablesupporta cache di intervalli sparse e fuori ordine
Modificato (Changed)
- I file linearizzati usano i gate nativi progressivi di documento, modulo e pagina di PDFium; i file non linearizzati passano automaticamente al loader nativo di stream personalizzati dopo che il file completo è presente
TPdfStreamAdapterpuò esporre una dimensione finale logica diversa dai byte attualmente memorizzati, preservando il limite esplicito di 4 GiB diFPDF_FILEACCESSTPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.68.0 in modo coerente
Version 2.67.0
Aggiunto (Added)
TPdfView.AllowFormEventsdisattiva gli eventi di mouse, tastiera e focus che il visualizzatore inoltra al livello di riempimento moduli, per un visualizzatore in sola lettura o uno che gestisce da sé l'interazione con i moduli- I campi modulo continuano a essere renderizzati normalmente quando è disattivato: caricamento e chiusura della pagina sono deliberatamente lasciati senza gate, poiché inizializzano il livello moduli anziché reagire all'input
- L'interruttore si affianca agli interruttori esistenti
AllowUserPageChangeeAllowUserTextSelectione predefinisce True, quindi il comportamento esistente rimane invariato
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.67.0 in modo coerente
Version 2.66.0
Aggiunto (Added)
- Le azioni denominate sollevate da un documento (ISO 32000-1 §12.6.4.11) ora raggiungono l'host tramite il nuovo evento
OnNamedAction; in precedenza ognuna di esse veniva scartata - Se lasciati non gestiti, i quattro nomi standard di navigazione —
NextPage,PrevPage,FirstPage,LastPage— spostano la pagina, bloccandosi alla prima e all'ultima invece di ricominciare dal capo opposto TPdf.PerformNamedActionconsente a un'applicazione di attivare direttamente lo stesso comportamento, restituendo False per un nome privo di significato fornito dalla libreria
Corretto (Fixed)
- Un test di crittografia misurava il corpo di un flusso scandendo all'indietro da
endstream, il che ogni tanto scambiava un byte del testo cifrato per un terminatore di riga e riportava un errore intermittente; la libreria è sempre stata corretta
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.66.0 in modo coerente
Version 2.65.0
Aggiunto (Added)
BuildToUnicodeCMapgenera il ToUnicode CMap (ISO 32000-1 §9.10.3) di cui un font CID ha bisogno così che il suo testo possa essere copiato, cercato e letto dalle tecnologie assistive — senza di esso il testo si renderizza correttamente ma si estrae come nulla- Le voci vengono spezzate al limite di 100 per blocco fissato dalla specifica, i glifi duplicati vengono scritti una sola volta e
.notdefviene saltato - Il CMap segue la convenzione CID = GID, quindi non è necessario alcun flusso
CIDToGIDMapaccanto ad esso
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.65.0 in modo coerente
Version 2.64.0
Aggiunto (Added)
- Le annotazioni Ink e stamp si disegnano dai propri oggetti pagina anziché dal content stream della pagina, e quegli oggetti ora sono raggiungibili:
AnnotationObjectCounteAnnotationObjectInfoli leggono,AddPathToAnnotationconsegna all'annotazione un tracciato costruito conCreatePatheRemoveAnnotationObjectne elimina uno - Costruire l'aspetto di uno stamp non richiede più uno strumento esterno: creare il tracciato come al solito, poi darlo all'annotazione invece che alla pagina
- PDFium accetta oggetti pagina solo sui sottotipi ink e stamp, quindi qualsiasi altro sottotipo viene rifiutato con un messaggio che nomina la restrizione anziché fallire in modo oscuro
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.64.0 in modo coerente
Version 2.63.0
Aggiunto (Added)
TPdf.AddStandardFontTextdisegna testo con uno dei 14 font che ogni lettore PDF è tenuto a fornire, senza incorporare alcun programma di font — il file risultante è misurabilmente più piccolo dello stesso testo disegnato conAddText, che incorpora la face di sistema che trova- Il nuovo enum
TPdfStandardFontnomina tutte e 14 le face, così che un chiamante non possa digitare male il nome di un font di base; PDFium confronta quei nomi esattamente e un errore di battitura produrrebbe silenziosamente nessun font - Sia PDF/A che PDF/X richiedono che ogni font sia incorporato, quindi l'output destinato a quei profili dovrebbe continuare a usare
AddText
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.63.0 in modo coerente
Version 2.62.0
Aggiunto (Added)
TPdf.TextObjectGlyphOutlinerestituisce il contorno di un glifo del font di un oggetto testo come segmenti di tracciato, per convertire testo in arte vettoriale o ispezionare un glifo che una sostituzione di font può aver alterato- Il risultato riusa il tipo
TPdfPathSegmentsesistente, quindi si legge esattamente come il contorno di un oggetto tracciato disegnato - Le coordinate sono nello spazio di progetto del font stesso, normalizzate così che un em valga 1.0; la dimensione di font richiesta non le scala, quindi un chiamante che voglia unità di dispositivo moltiplica per la dimensione in punti da sé
- Un risultato vuoto significa che il font non espone alcun contorno per quel glifo, il che non è un errore; chiedere un glifo di un oggetto non testuale solleva un'eccezione
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.62.0 in modo coerente
Version 2.61.0
Aggiunto (Added)
TPdf.InspectAvailabilityriporta ciò che PDFium può dire di un PDF senza caricarlo come documento: se il file è linearizzato (“web optimized”), se un'analisi completa riuscirebbe, se trasporta dati di modulo e quale pagina un visualizzatore mostrerebbe per prima- I nuovi tipi
TPdfAvailability,TPdfLinearizationeTPdfFormAvailabilitytrasportano le risposte; lo stream viene letto ma non trattenuto e la sua posizione viene ripristinata al ritorno - Questo chiude l'ultima lacuna nella famiglia
FPDFAvail_*, che era bindata e caricata ma non aveva alcun chiamante in tutta la libreria - Delphi, Lazarus e C++Builder coprono ciascuno i fatti riportati, la garanzia sulla posizione dello stream e il rifiuto dello stream nil
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.61.0 in modo coerente
Version 2.60.0
Aggiunto (Added)
- Il contenuto marcato (ISO 32000-1 §14.6) ora è raggiungibile dall'API di alto livello:
PageObjectMarkslegge ogni tag BDC e la sua lista di proprietà da un oggetto pagina,AddPageObjectMarkne scrive uno,RemovePageObjectMarkne elimina uno ePageObjectMarkedContentIDriporta l'MCID - I nuovi tipi
TPdfContentMark,TPdfContentMarkParameTPdfMarkParamKindtrasportano il nome del tag e i suoi parametri tipizzati (integer, float, string, blob), con il tipo di valore risolto da PDFium anziché dedotto dal getter che riesce - L'aggiunta di un contrassegno ricostruisce il content stream della pagina, così che il tag sopravviva a un salvataggio; questo doveva essere esplicito perché
SaveAsnon rigenera il contenuto da solo - Delphi, Lazarus e C++Builder portano ciascuno sei casi, incluso uno che decomprime il content stream salvato per confermare che l'operatore BDC e la sua lista di proprietà siano davvero arrivati
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.60.0 in modo coerente
Version 2.59.0
Aggiunto (Added)
TPdfAnnotationacquisisceHasLinkUrieLinkUri, così cheCreateAnnotationora possa produrre un link web funzionante: l'annotazione viene salvata con un'azione/URIche punta all'indirizzo fornito- Impostare un URI di link su qualsiasi sottotipo diverso da
anLinksolleva un'eccezione, poiché solo un'annotazione Link porta un dizionario di azione - Il campo per ora è di sola scrittura; rileggere una destinazione link passa attraverso la famiglia
FPDFLink_*, che richiede l'handle del documento - Delphi, Lazarus e C++Builder verificano tutti che i byte salvati portino l'azione
/URIe l'indirizzo di destinazione
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.59.0 in modo coerente
Version 2.58.12
Aggiunto (Added)
- La validazione PDF/X riporta
pvxiTrimBoxWithArtBoxquando una pagina porta insieme/TrimBoxe/ArtBox; entrambi dichiarano la pagina finita, quindi un RIP non ha modo di sapere quale sia autoritativo (ISO 15930) - La validazione PDF/X riporta
pvxiPageBoxOutsideMediaBoxquando/TrimBoxo/BleedBoxsborda fuori da/MediaBox, inclusi i box con origine negativa; un box oltre il supporto non può essere impresso - I rettangoli vengono normalizzati prima del confronto, quindi viene accettato qualsiasi ordine degli angoli e un box che tocca esattamente il bordo del supporto resta valido
- I report di preflight classificano entrambi i problemi sotto la struttura e nominano il rimedio concreto
- Delphi, Lazarus e C++Builder coprono tutti e due i casi rifiutati e quello conforme
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.12 in modo coerente
Version 2.58.11
Aggiunto (Added)
- La validazione PDF/UA riporta
pvuaiTociWithoutTocquando un documento tagga le voci TOCI ma non tagga mai il contenitore TOC a cui appartengono, il che lascia le tecnologie assistive ad annunciare voci di indice senza alcun indice (ISO 14289-1 §7.7) - I report di preflight classificano il problema sotto la struttura e raccomandano di avvolgere le voci in un elemento TOC
- C++Builder acquisisce la sua prima copertura di test PDF/UA accanto ai casi Delphi e Lazarus
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.11 in modo coerente
Version 2.58.10
Aggiunto (Added)
- La validazione PDF/A riporta
pvaiSymbolicTrueTypeEncodingquando un font TrueType simbolico porta una voce/Encoding; ISO 19005-1 §6.3.7 ammette solo la cmap integrata del font, quindi un/Encodingla contraddirebbe - Il flag simbolico viene letto dal
/FontDescriptor, sia che sia scritto inline nel dizionario del font sia che sia referenziato indirettamente; un font non simbolico mantiene il suo/WinAnsiEncodingo/MacRomanEncodingobbligatorio senza essere segnalato - I report di preflight classificano il problema sotto il contenuto e raccomandano di rimuovere la voce
- Delphi e Lazarus coprono il caso segnalato più entrambi i casi accettati; C++Builder copre il caso segnalato e quello non simbolico
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.10 in modo coerente
Version 2.58.9
Aggiunto (Added)
- La validazione PDF/A riporta i limiti di implementazione dei contenitori dell'allegato C di ISO 19005-1:
pvaiNameOverLimitper nomi più lunghi di 127 byte,pvaiArrayOverLimitoltre 8191 elementi,pvaiDictOverLimitoltre 4095 voci epvaiNestingOverLimitoltre 28 livelli di annidamento - I limiti sono inclusivi, quindi un contenitore esattamente su un limite resta valido; i test fissano sia il lato rifiutato sia quello accettato di ciascun confine
- I report di preflight classificano i quattro problemi sotto la struttura e nominano il limite concreto in ogni raccomandazione
- Delphi e Lazarus coprono tutti e quattro i limiti più i casi al confine; C++Builder copre il limite degli array e il confine
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.9 in modo coerente
Version 2.58.8
Aggiunto (Added)
- La validazione PDF/R riporta
pvriPageImageMismatchquando il conteggio delle immagini non corrisponde al conteggio delle pagine; ISO 23504-1 §6.5.1 fa di ogni pagina esattamente una immagine a strisce, quindi una pagina senza o con più immagini non è conforme - I test Delphi, Lazarus e C++Builder coprono una pagina senza immagine, una pagina con due e il caso conforme a immagine singola
Modificato (Changed)
- I test di iniezione marcatori PDF/R ora partono da una pagina di origine che porta già un'immagine a strisce, poiché l'iniezione dei marcatori aggiunge metadati e non può fornire contenuto di pagina
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.8 in modo coerente
Version 2.58.7
Aggiunto (Added)
- La validazione PDF/R riporta
pvriFontForbiddenquando una pagina nomina una risorsa font; una pagina PDF/raster trasporta l'immagine scansionata e nient'altro (ISO 23504-1 §6.5.2) - La validazione PDF/R riporta
pvriForbiddenImageFilterper le codifiche a strisce fuori dalla white list, quindi/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodee/Cryptvengono rifiutati mentre/CCITTFaxDecode,/DCTDecode,/JPXDecodee/FlateDecodepassano (ISO 23504-1 §6.6) - I report di preflight classificano entrambi i problemi sotto il contenuto e raccomandano il rimedio concreto
- I test Delphi, Lazarus e C++Builder coprono una risorsa font, un filtro rifiutato e una pagina che usa solo codifiche in white list
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.7 in modo coerente
Version 2.58.6
Aggiunto (Added)
- La validazione PDF/E riporta
pveiFontNotEmbeddedquando un documento mostra uso di font ma non porta alcun programma di font incorporato, così che il requisito venga verificato anche sul percorso senza DLL oltre che tramite PDFium - Un disegno tecnico deve renderizzarsi in modo identico decenni dopo, quindi ISO 24517-1 non esenta alcuno dei 14 font standard; il controllo si applica allo stesso modo a
/Type1,/TrueType,/Type0e/MMType1 - I report di preflight classificano il nuovo problema sotto il contenuto e raccomandano di incorporare ogni programma di font
- I test Delphi, Lazarus e C++Builder coprono un descriptor senza programma, un
/FontFile2incorporato e un documento che non usa alcun font
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.6 in modo coerente
Version 2.58.5
Aggiunto (Added)
InjectPdfEMarkersora scrive l'output intent richiesto da ISO 24517-1 §6.2: un profilo di destinazione ICC sRGB incorporato, un output intent/GTS_PDFE1che lo nomina e l'array/OutputIntentsdel catalogo, tutto come parte dello stesso aggiornamento incrementale- Il flusso del profilo deriva il proprio
/Ndall'intestazione ICC anziché presumere tre componenti, quindi un profilo CMYK verrebbe descritto correttamente - La validazione PDF/E riporta
pveiMissingOutputIntentepveiMissingIccProfile, quindi un candidato senza una condizione di colore dichiarata non viene più accettato - I test Delphi, Lazarus e C++Builder coprono un output intent accettato, uno senza profilo di destinazione e un catalogo senza alcun output intent
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.5 in modo coerente
Version 2.58.4
Aggiunto (Added)
- La validazione PDF/X ora riporta
pvxiFontNotEmbeddedda una scansione dei byte, così che un font non incorporato venga colto sul percorso senza DLL invece che solo tramite il controllo basato su PDFium - A differenza di PDF/A, i 14 font standard non sono esentati in PDF/X, quindi qualsiasi uso di font senza un programma di font incorporato viene riportato
- Il controllo resta conservativo: scatta solo quando il file mostra uso di font ma non porta affatto
/FontFile,/FontFile2o/FontFile3, perché contare i descriptor rispetto ai programmi produce falsi positivi sui descriptor condivisi - I test Delphi, Lazarus e C++Builder coprono un descriptor senza programma, un programma incorporato e un documento che non usa alcun font
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.4 in modo coerente
Version 2.58.3
Aggiunto (Added)
- La validazione PDF/X ora riporta
pvxiColorSpaceForbiddenquando un candidato PDF/X-1a porta/DeviceRGB,/CalRGBo/Lab, che ISO 15930-1 §6.2 esclude dal proprio scambio CMYK - Il controllo è attivato solo su PDF/X-1a, quindi PDF/X-3 e successivi continuano a permettere RGB e gli spazi device-independent che abbinano all'output intent
- Vengono verificati solo i token di nome dello spazio colore univoci; un flusso
ICCBasedrichiede la risoluzione del proprio/Ne resta al livello del modello a oggetti - I test Delphi, Lazarus e C++Builder coprono uno spazio RGB segnalato, uno spazio Lab segnalato, una coppia CMYK e scala di grigi accettata e il caso permesso su PDF/X-3
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.3 in modo coerente
Version 2.58.2
Aggiunto (Added)
- La validazione PDF/X ora riporta
pvxiTransparencyForbiddenper un gruppo di trasparenza o una soft mask attiva, che ISO 15930-1 §6.2 (PDF/X-1a) e ISO 15930-3 §6.3 (PDF/X-3) vietano - Il controllo è attivato sulla conformità rilevata, quindi PDF/X-4 e PDF/X-6 continuano a permettere la trasparenza e un file il cui livello non ha potuto essere identificato non viene mai segnalato per una regola che potrebbe non applicarsi ad esso
- Una soft mask esplicitamente disattivata con
/SMask /Nonenon viene trattata come trasparenza PdfHasActiveSMaskè passato daFPdfPdfaall'interfacciaFPdfPdfCommoncosì che ogni validatore possa condividere un'unica regola sulle soft mask- I test Delphi, Lazarus e C++Builder coprono un gruppo segnalato su X-1a, una soft mask segnalata su X-3, una soft mask disabilitata e il caso permesso su X-4
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.2 in modo coerente
Version 2.58.1
Aggiunto (Added)
- La validazione PDF/X ora verifica la forma dell'output intent richiesto da ISO 15930-7 §6.2.4:
pvxiOutputIntentSchemeriporta un sottotipo presente ma diverso da/GTS_PDFXepvxiOutputIntentMissingIdentifierriporta un/OutputConditionIdentifiermancante - Il sottotipo viene confrontato come token di nome completo, quindi un nome più lungo come
/GTS_PDFXVersionnon passa più, mentre una scrittura con escape#xxdello stesso nome continua a passare - Un output intent che non porta alcun sottotipo viene lasciato stare, perché la sua assenza è già riportata dai problemi a livello di marcatore
- I report di preflight archiviano entrambi i problemi sotto la categoria output intent e suggeriscono la correzione
- I test Delphi, Lazarus e C++Builder coprono il sottotipo accettato, un sottotipo PDF/A, un token di nome più lungo, un sottotipo assente e un identificatore di condizione mancante
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.58.1 in modo coerente
Version 2.58.0
Modificato (Changed)
- Tutti i 35 callback che PDFium invoca dai propri frame C++ (riempimento moduli, XFA, piattaforma JavaScript, pausa del rendering progressivo, lettura e scrittura degli stream) ora contengono qualsiasi eccezione Pascal e restituiscono il valore di fallimento documentato invece di propagarsi attraverso il confine di linguaggio
- Un gestore di eventi che solleva, un'allocazione che fallisce o un errore inatteso dentro un callback quindi non possono più abbattere il processo o lasciare PDFium in uno stato indefinito
Corretto (Fixed)
- La registrazione di un timer modulo perdeva la propria voce quando il timer sottostante non poteva essere creato
Aggiunto (Added)
- I test Delphi, Lazarus e C++Builder ora coprono il salvataggio in uno stream di destinazione che rifiuta le scritture e verificano che il documento resti utilizzabile e salvabile in seguito
Version 2.57.8
Corretto (Fixed)
- Le versioni di Delphi più datate (XE5 e precedenti) interrompevano la compilazione della libreria trial con
E2003 Undeclared identifier: 'GetTickCount64'inFPdfPades.pas, perché l'unit Windows fornita con quei compiler non esporta il simbolo - Gli stessi compiler fallivano anche su
GetUserDefaultLocaleNameinPDFium.pase sull'assegnazione daTBytesadarray of ByteinGetXfaFormPackets, quindi il callback delle impostazioni locali XFA e lo snapshot dei pacchetti ora compilano anche su quei compiler
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.8 in modo coerente
Version 2.57.7
Modificato (Changed)
- Ogni riscrittura in fase di salvataggio ora tronca lo stream di destinazione prima di scrivere invece di solo riavvolgerlo, così che un buffer fornito dal chiamante che conteneva già un documento più lungo non possa mantenere una coda obsoleta oltre il nuovo
%%EOF - I test Delphi, Lazarus e C++Builder ora coprono il salvataggio in uno stream precompilato
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.7 in modo coerente
Version 2.57.6
Corretto (Fixed)
- La scansione degli oggetti che precede la crittografia accettava sequenze di cifre di qualsiasi lunghezza, quindi un numero lungo in qualsiasi punto del file poteva trasformarsi in un numero di oggetto negativo o fasullo e aggiungere una voce fantasma alla tabella di cross-reference ricostruita
- I numeri di oggetto oltre il limite dell'allegato C di ISO 32000-1 e le generazioni oltre 65535 ora vengono rifiutati come intestazioni di oggetto invece di essere troncati
Aggiunto (Added)
- I test Delphi, Lazarus e C++Builder ora verificano il conteggio esatto delle voci in uso della tabella ricostruita
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.6 in modo coerente
Version 2.57.5
Corretto (Fixed)
- La crittografia con
EncryptMetadata = Falsescriveva/EncryptMetadata falsenel dizionario Encrypt ma cifrava comunque il flusso dei metadati del documento, quindi un lettore che seguiva quella dichiarazione trovava XMP illeggibile - Un flusso
/Type /Metadataora viene copiato invariato quando la crittografia dei metadati è disattivata, mentre ogni altro flusso continua a essere crittografato
Aggiunto (Added)
AnsiNameTokenMatchesKeyora fa parte dell'interfacciaFPdfPdfCommonper confronti di nomi consapevoli dei delimitatori- I test Delphi, Lazarus e C++Builder ora coprono entrambe le modalità di crittografia dei metadati
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.5 in modo coerente
Version 2.57.4
Corretto (Fixed)
- La tabella di cross-reference ricostruita durante la crittografia ometteva la testa della free list dell'oggetto 0 obbligatoria richiesta da ISO 32000-1 §7.5.4, quindi la sua prima sottosezione partiva un oggetto in ritardo
- Ogni voce ricostruita dichiarava generazione 0; gli oggetti scritti con una generazione superiore ora la mantengono, così che la tabella concordi con le intestazioni degli oggetti a cui punta
Aggiunto (Added)
- I test Delphi, Lazarus e C++Builder ora coprono la voce testa della free list e la preservazione della generazione nella tabella ricostruita
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.4 in modo coerente
Version 2.57.3
Corretto (Fixed)
- L'output crittografato ometteva la parola chiave
streamdi ogni oggetto flusso, quindi il file salvato non era più sintassi PDF valida e i lettori strict riportavano il contenuto della pagina come né un flusso né un array di flussi - La riscrittura di
/Lengthconfrontava/Lengthcome semplice sottostringa, quindi un dizionario di flusso con/Length1(qualsiasi font incorporato) vedeva il nome della propria chiave corrotto mentre la lunghezza reale restava obsoleta - Un flusso che dichiara la propria lunghezza indirettamente come
/Length N 0 Raveva il numero di oggetto sovrascritto con la nuova lunghezza; la voce ora viene sostituita dalla lunghezza crittografata diretta - Un dizionario di flusso del tutto privo di
/Lengthora ne riceve uno invece di lasciare il lettore senza una lunghezza
Aggiunto (Added)
AnsiFindDictKeyTokenora fa parte dell'interfacciaFPdfPdfCommonper ricerche di chiavi di dizionario di primo livello consapevoli dei delimitatori- I test Delphi, Lazarus e C++Builder ora coprono la preservazione di
/Length1, la sostituzione delle lunghezze indirette e la coerenza della dimensione del corpo dei flussi
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.3 in modo coerente
Version 2.57.2
Corretto (Fixed)
SaveAsEncryptedeSaveAsEncryptedToStreamconRevision = erR6producevano documenti che rifiutavano la propria password corretta circa una volta su quattro, perché il contatore di cicli dell'algoritmo 2.B di ISO 32000-2 §7.6.4.3 partiva un ciclo troppo basso e il ciclo extra cambiava i valori/U,/O,/UEe/OE- I documenti crittografati R6 ora si riaprono con la password utente o proprietario in qualsiasi lettore conforme e continuano a rifiutare una password errata
Aggiunto (Added)
- Le suite di test Lazarus e C++Builder hanno acquisito copertura della crittografia precedentemente solo Delphi: lunghezze di chiave R6, campi del dizionario Encrypt, un round trip ripetuto di crittografia e riapertura e il rifiuto delle password errate
Modificato (Changed)
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.2 in modo coerente
Version 2.57.1
Modificato (Changed)
- La digitazione in un campo modulo, lo spostamento del cursore e l'attivazione/disattivazione delle caselle di controllo ora ridipingono solo l'area che PDFium segnala come danneggiata invece dell'intero visualizzatore
- I box di danno vengono normalizzati per l'asse Y della pagina rivolto verso l'alto, ampliati di un pixel così che i bordi anti-aliased dei widget restino puliti e ritagliati sull'area client visibile
- Un box di danno fatto scorrere completamente fuori dal viewport non pianifica più un ridisegno, mentre una vista inattiva o una pagina non mappata ricade ancora in un ridisegno completo
- I test Delphi, Lazarus e C++Builder ora coprono l'invalidazione limitata dei moduli, i box di pagina capovolti, i box fuori schermo e la sicurezza delle viste inattive
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.1 in modo coerente
Version 2.57.0
Aggiunto (Added)
TPdfThumbnailView.Orientationsupporta layout di miniature verticali e orizzontali pur mantenendo l'impostazione verticale predefinita esistenteFirstVisiblePageIndex,LastVisiblePageIndexedEnsureCurrentPageVisibleespongono e controllano la finestra delle miniature con indici di pagina basati su uno
Modificato (Changed)
- La modifica di
CurrentPageIndexora scorre la miniatura selezionata nella vista in entrambe le orientazioni - I test Delphi, Lazarus e C++Builder ora coprono le impostazioni predefinite di orientazione, la commutazione, gli intervalli visibili e la visibilità della pagina selezionata
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.57.0 in modo coerente
Version 2.56.2
Modificato (Changed)
HighlightSearchText,AddSearchTextHighlighteClearHighlightora invalidano solo i rettangoli di dispositivo per gli intervalli di ricerca aggiunti o rimossi invece di ridipingere l'intera vista- Sostituire le evidenziazioni con le stesse corrispondenze o aggiungere corrispondenze duplicate non pianifica più un ridisegno non necessario
- I test Delphi, Lazarus e C++Builder ora coprono l'invalidazione limitata, gli aggiornamenti idempotenti, la cancellazione e la sicurezza delle viste inattive
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.56.2 in modo coerente
Version 2.56.1
Modificato (Changed)
TPdfThumbnailViewora riusa le bitmap renderizzate per le pagine che rimangono visibili tra ridisegni e posizioni di scorrimento adiacenti- La cache conserva solo l'intervallo di pagine visibili corrente e rilascia le voci precisamente quando le pagine lasciano quell'intervallo, il documento assegnato cambia o le dimensioni delle miniature cambiano
- I test Delphi, Lazarus e C++Builder ora coprono il riuso della cache, la potatura della finestra, l'invalidazione delle dimensioni, la sostituzione del documento e la distruzione del componente
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.56.1 in modo coerente
Version 2.56.0
Aggiunto (Added)
TPdfView.CutSelectedFormTextToClipboardeTPdfView.PasteFormTextFromClipboardforniscono modifica degli appunti Unicode per il widget di modulo modificabile con focus
Modificato (Changed)
- I redattori di modulo con focus ora gestiscono le scorciatoie da tastiera standard copia, taglia, incolla e seleziona tutto prima di inoltrare l'input di testo a PDFium
- Taglia e incolla rifiutano i campi di sola lettura e le sessioni senza autorizzazione di compilazione o modifica del modulo, mentre taglia copia correttamente prima di rimuovere il testo selezionato
- I test Delphi, Lazarus e C++Builder ora coprono il comportamento senza focus, il round trip delle scorciatoie e il rifiuto in sola lettura
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.56.0 in modo coerente
Version 2.55.0
Aggiunto (Added)
TPdfView.AddSearchTextHighlightaggiunge corrispondenze univoche per un altro termine di ricerca all'overlay di pagina corrente, permettendo a diverse query di rimanere evidenziate insieme
Modificato (Changed)
HighlightSearchTextrimane il punto di ingresso di sostituzione e ora condivide lo scanner additivo, mentre gli intervalli di caratteri duplicati vengono ignorati eClearHighlightrimuove l'intero insieme accumulato- I test Delphi, Lazarus e C++Builder ora coprono l'accumulo di query distinte e la soppressione degli intervalli duplicati
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.55.0 in modo coerente
Version 2.54.0
Aggiunto (Added)
TPdfora espone snapshot completi di oggetti pagina, aggiornamenti di stile in batch, trasformazioni affine di oggetti, segmenti di percorso, clip path e figli Form XObject- L'ispezione dei caratteri ora include colori di riempimento e tratto, nome e flag del font, limiti dei glifi laschi, matrici effettive, handle di oggetti testo e conversione da indice carattere a indice testo
- Le annotazioni ora restituiscono la geometria del bordo e i flussi di aspetto normal, rollover e down
- Nuovi accessori di miniature raw e decodificate, trasformazioni di contenuto di pagina e annotazione, e
RenderPageWithMatrixforniscono percorsi diretti avanzati di rendering e modifica
Modificato (Changed)
- Le modifiche di stile degli oggetti pagina possono essere commesse come un unico batch in modo che PDFium rigeneri il contenuto della pagina una sola volta
- Il rendering matriciale usa il percorso bitmap zero-copy esistente quando il layout della bitmap di destinazione è compatibile
Version 2.53.1
Corretto (Fixed)
- La didascalia del menu Copia cinese integrato ora usa punti di codice Unicode indipendenti dalla codifica e viene visualizzata correttamente nei build Lazarus
- Le toolchain Delphi più datate possono compilare
FPdfAsyncquando la loro unitWinapi.Windowsomette la dichiarazioneGetTickCount64
Version 2.53.0
Aggiunto (Added)
- Nuova fixture di test
Tests.ApiCoverageche copre le API TPdf pubbliche che in precedenza non avevano alcuna copertura di test end-to-end:GetPageBox/SetPageBox(lettura/scrittura MediaBox/CropBox, errori di box mancante e round trip di salvataggio),FlattenPage/FlattenAllPages(valore di ritorno e preservazione del conteggio pagine),GenerateFormAppearances(nessuna operazione su documenti senza modulo),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 con round trip di password — verifica che il file crittografato si rifiuti di aprirsi senza la password e si apra con essa), validazione dei limiti diDeletePage(pagina 0 e fuori intervallo sollevanoEPdfError) e le sentinelle di annotazioneHasContents/HasAuthorintrodotte in v2.38.0 (verificando cheDefault(TPdfAnnotation)le lasci aFalse)
Version 2.52.0
Aggiunto (Added)
TPdfView.CopySelectedFormTextToClipboardcopia la selezione di testo all'interno del widget AcroForm con focus negli appunti di Windows comeCF_UNICODETEXT
Modificato (Changed)
- Le operazioni di copia del testo di pagina e del modulo con focus ora condividono lo stesso scrittore difensivo degli appunti Unicode e lasciano gli appunti invariati quando la loro selezione è vuota
- I test Delphi, Lazarus e C++Builder ora coprono le chiamate di copia del modulo inattive o senza focus e un round trip di selezione del modulo con focus attraverso gli appunti di Windows
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.52.0 in modo coerente
Version 2.51.0
Aggiunto (Added)
TPdfView.SelectLineAtseleziona la linea di testo visuale contenente una pagina basata su uno e un indice di carattere basato su zero senza richiedere input del mouse
Modificato (Changed)
- La selezione di linea programmatica, la selezione con triplo clic e
Shift+HomeoShift+Endora condividono un unico modello di confine di linea a casella di caratteri - I test Delphi, Lazarus e C++Builder ora coprono la selezione di linea stabile e gli indici di pagina o carattere non validi
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.51.0 in modo coerente
Version 2.50.0
Aggiunto (Added)
TPdf.LoadDocumentora accetta una finestraIndexbasata su zero eCountin un bufferTBytes, permettendo ai PDF incorporati di caricarsi senza allocare una slice temporanea di array di byte
Modificato (Changed)
- Il caricamento per intervallo di byte rifiuta le finestre negative o fuori dai limiti prima di cambiare lo stato del documento e preserva le opzioni di durata del buffer memorizzato e del buffer preso in prestito esistenti
- I test Delphi, Lazarus e C++Builder ora coprono le finestre PDF incorporate e gli argomenti di intervallo di byte non validi
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.50.0 in modo coerente
Version 2.49.1
Aggiunto (Added)
TPdfView.FitModesupporta orapfmFitHeightper adattare la pagina corrente all'altezza visibile del viewport consentendo lo scorrimento orizzontale quando necessario
Corretto (Fixed)
- Le modalità di adattamento ora convergono dopo che un cambiamento della barra di scorrimento modifica l'area client, mantenendo i risultati fit-page, fit-width e fit-height coerenti tra VCL e LCL
- I test di visualizzazione Delphi, Lazarus e C++Builder coprono ora la selezione
pfmFitHeighte i round trip di enumerazione TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.49.1 in modo coerente
Version 2.49.0
Aggiunto (Added)
- La superficie di binding PDFium pubblica ora copre tutte le 470 funzioni esportate nelle intestazioni riviste, inclusivo dell'accesso alla descrizione degli allegati tramite
FPDFAttachment_SetDescriptioneFPDFAttachment_GetDescription TPdfespone ora descrizioni degli allegati, validità dei riferimenti incrociati, offset di fine trailer, revisione del security handler, caricamento in memoria a 64 bit, intervalli di byte di firma, intervalli di testo dei collegamenti web ed estesi snapshot di dati immagine, filtro, metadati e profilo ICC- Gli assistenti dei moduli supportano ora il focus nativo dei campi, query e aggiornamenti delle opzioni di scelta focalizzate, inoltro della rotellina del mouse, tratti di inchiostro scrivibili e overlay dei moduli dopo il rendering progressivo
Modificato (Changed)
FormFieldCount, gli indici dei campi modulo e l'ordine di tabulazione descrivono ora solo le annotazioni widget invece di includere annotazioni di pagina non correlate- Le pagine
TPdfheadless entrano ed escono ora dal ciclo di vita della pagina form-fill così che il focus nativo e le API dei campi focalizzati funzionino senza unTPdfView - L'esportazione delle descrizioni degli allegati è limitata dalle capacità così che le applicazioni che usano una build PDFium più vecchia possano ancora caricare la libreria e rilevare la funzione non disponibile
Corretto (Fixed)
- Il rendering progressivo delle pagine ora disegna i controlli dei moduli quando il riempimento dei moduli è abilitato
- I test Delphi, Lazarus e C++Builder coprono ora le nuove diagnostiche dei documenti, descrizioni degli allegati, percorsi di inchiostro, comportamento dei moduli, intervalli di byte di firma, intervalli di collegamenti web e metadati delle immagini
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.49.0 in modo coerente
Version 2.48.0
Aggiunto (Added)
TPdfMatrixespone ora factory, clonazione e assegnazione, diagnostiche di stato finito e invertibilità, confronto basato su tolleranza, accesso alla traslazione, report del determinante e decomposizione affine- Composizione prepend, rotazione sensibile al pivot, scalatura, inclinazione e capovolgimenti, più mappatura dei rettangoli stretch, contain e cover supportano flussi di lavoro local-space e layout adattati senza aritmetica manuale dei coefficienti
- Accesso inverso non mutante, mappatura inversa dei punti, trasformate di vettori e quadrilateri, batch dinamici di punti e rettangoli, varianti in-place e limiti trasformati in un passaggio espandono la superficie geometrica riutilizzabile
Modificato (Changed)
- Traslazione, scalatura e capovolgimenti degli assi aggiornano ora solo i coefficienti interessati invece di passare attraverso la moltiplicazione affine generale
- La trasformazione dei rettangoli normalizza il suo input una volta, usa un percorso esatto specializzato axis-aligned dove possibile e calcola limiti ruotati generali senza record di punti temporanei
- Le trasformate batch di punti e rettangoli allocano un array di risultati o riutilizzano lo storage del chiamante, mentre i limiti dei punti trasformati sono accumulati in un passaggio senza un array intermedio
Corretto (Fixed)
- La mappatura dei rettangoli respinge risultati di dimensione zero, non finiti e in overflow di
Singleprima di pubblicare una matrice inutilizzabile - I test Delphi, Lazarus e C++Builder verificano ora l'ordine di composizione, gli invarianti del pivot, i round trip inversi, i rettangoli adattati, la decomposizione e il comportamento della geometria in blocco
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.48.0 in modo coerente
Version 2.47.0
Aggiunto (Added)
FPdfAsyncfornisce ora ragioni e messaggi di annullamento strutturati, registrazioni di callback rimovibili, sorgenti basate su timeout, attesa di annullamento e operazioni try-cancel atomiche attraverso interfacce estese che preservano l'API originaleTPdfFuture<T>.RunExaggiunge dispatch di risposta e priorità del worker configurabili mentre le buste dei risultati espongono ID operazione, validità del valore, nomi delle classi di eccezione, tempistica di completamento e helper di completamento riutilizzabiliTPdfAsyncExecutoraggiunge un pool di worker fisso riutilizzabile con quattro corsie di priorità FIFO, backpressure opzionale della coda limitata, handle di attività annullabili, attesa sensibile al timeout, snapshot delle attività, statistiche aggregate e arresto graceful
Modificato (Changed)
- I lavori asincroni ripetuti possono riutilizzare thread worker e operazioni di coda O(1) invece di creare un thread per ogni attività, mentre il completamento sincronizzato rimane disponibile per gli host UI
- Gli errori di executor e future preservano la classe di eccezione e le diagnostiche dei messaggi, l'annullamento mantiene la sua ragione originale e le eccezioni dei callback rimangono isolate dal ciclo di vita del worker e dall'arresto
- I test Delphi, Lazarus e C++Builder coprono ora la superficie estesa di annullamento, metadati future, controllo attività, backpressure, ordinamento di priorità, statistiche, errori e arresto
Corretto (Fixed)
- I proprietari di annullamento concorrenti ricevono ora un risultato deterministico del primo scrittore invece di affidarsi a una sequenza separata di osservazione e annullamento
- L'attesa idle del thread principale elabora le risposte delle attività sincronizzate, impedendo che un worker completato lasci l'executor permanentemente non-idle durante un arresto coordinato
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.47.0 in modo coerente
Version 2.46.0
Aggiunto (Added)
FPdfAsn1espone ora classi di identificatore, codifica e decodifica di high-tag-number a 64 bit, record TLV analizzati, finestre di lettura figlie zero-copy, decoder di primitive tipizzate e slice di contenuto o valori codificati- I writer DER supportano ora l'intero range INTEGER a 64 bit senza segno, contenuto INTEGER arbitrario validato, ENUMERATED, selezione automatica UTCTime o GeneralizedTime, tag application e private, SEQUENCE multi-valore e output SET OF canonicamente ordinato
ValidateDerrestituisce errori di validazione sensibili all'offset applicando limiti configurabili di nesting, conteggio nodi, lunghezza del contenuto, conteggio errori, root e ordinamento SET opzionale
Modificato (Changed)
- La concatenazione DER e la composizione multi-valore usano un'allocazione di output, i buffer del writer espongono operazioni di reserve, count, capacity e ownership-transfer, e l'ordinamento SET OF usa ora merge sorting
O(n log n) - I valori BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime e GeneralizedTime ricevono controlli di forma canonica durante la codifica, la decodifica tipizzata o la validazione
- Il pacchetto runtime Lazarus esporta ora
FPdfAsn1e le suite di test Delphi, Lazarus e C++Builder esercitano la stessa superficie DER pubblica
Corretto (Fixed)
- I numeri di tag context-specific maggiori di 30 non sono più troncati nei cinque bit di identificatore bassi
- Gli identificatori high-tag malformati, le lunghezze definite non minimali, UTF-8 non valido, padding BIT STRING non zero, campi tempo non validi, root trailing e violazioni dei limiti di risorsa sono respinti deterministicamente
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.46.0 in modo coerente
Version 2.45.0
Aggiunto (Added)
FPdfPreflightReportassegna ora severità Info, Warning o Error a ogni problema ed espone API di severità, stato, categoria, issue-code, lookup, search, flattening e filtering a livello di standard e di report- I report preflight esportano ora SARIF 2.1.0, JUnit XML, NDJSON e XML nativo attraverso metodi
To*eSave*ToFilecorrispondenti per pipeline CI, automazione e streaming - Fingerprint di report SHA-256 stabili identificano risultati di validazione equivalenti indipendentemente dai percorsi sorgente e dai timestamp di generazione
Modificato (Changed)
- I report JSON, CSV, text, Markdown e HTML includono ora severità e riepiloghi di stato estesi; HTML aggiunge didascalie di tabella accessibili e un riepilogo di stato
- La costruzione di collezioni di issue e standard usa crescita geometrica della capacità, i risultati delle query sono pre-dimensionati, l'escaping JSON scrive in un buffer di output limitato e tutti i file di report usano un writer UTF-8 diretto
- I riepiloghi delle categorie di issue usano ordinamento deterministico, i timestamp includono millisecondi, JSON porta
formatVersion: 2e le celle CSV neutralizzano le formule dei fogli di calcolo
Corretto (Fixed)
- L'esportazione JSON preserva ora coppie Unicode supplementari valide e sostituisce le code unit surrogate UTF-16 isolate invece di emettere dati scalari malformati
- L'esportazione HTML esegue ora l'escape degli apostrofi e le viste di report filtrate possiedono array di issue indipendenti invece di condividere lo storage dei risultati mutabile
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.45.0 in modo coerente
Version 2.44.0
Aggiunto (Added)
- Segnalibri e destinazioni espongono lo stato aperto, il conteggio dei discendenti, le destinazioni delle azioni, le modalità di visualizzazione della destinazione e fino a quattro parametri di visualizzazione
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissioneUserHasPermissionforniscono istantanee tipizzate dell'ispezione del documento e interrogazioni sulle autorizzazioniExtractThumbnail(PageNumber)esegue il rendering di una pagina richiesta senza cambiare la pagina attiva, e i risultati dei timestamp RFC 3161 espongono i dettagli di policy, tempo di generazione e nonce
Modificato (Changed)
- I percorsi di segnalibri, JavaScript, metadati, destinazioni e miniature usano buffer convalidati a due passaggi, crescita geometrica delle collezioni e attraversamento sicuro contro i cicli
- La post-elaborazione del salvataggio risolve il catalogo attivo, l'albero delle pagine e l'azione di apertura tramite la revisione xref corrente, memorizza nella cache i flussi di oggetti decodificati e analizza i dizionari PDF con confini lessicali
- L'analisi PDF condivisa ora impone intestazioni di oggetto esatte, generazioni, chiavi di dizionario, lunghezze dei flussi, geometria del predittore, intervalli di interi e confini di commento, stringa letterale e stringa esadecimale
- La validazione della risposta RFC 3161 ora vincola sia il nonce sia l'impronta
messageImprintSHA-256, richiede un firmatario strutturalmente valido e applica regole DER rigorose per lunghezze, OID, INTEGER e GeneralizedTime
Corretto (Fixed)
- I documenti incrementali non selezionano più cataloghi duplicati inattivi o suffissi di riferimento malformati quando si aggiunge un'azione di apertura predefinita
- I token timestamp con lunghezze DER in formato lungo conservano il token codificato completo, mentre l'ordinamento malformato dei campi opzionali CMS e gli insiemi di firmatari vuoti vengono rifiutati
- I build Delphi puliti ora scrivono i campi seed del nonce PAdES tramite copie di byte allineate in modo sicuro e passano i byte di risposta XFA con l'esatto tipo di puntatore nativo
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati dell'installatore ora riportano Version 2.44.0 in modo coerente
Version 2.43.0
Aggiunto (Added)
- I record dei campi e delle annotazioni XFDF espongono ora flag di presenza che distinguono un valore XML omesso da un valore esplicitamente vuoto
Modificato (Changed)
- L'importazione XFDF accetta elementi e attributi con prefisso di namespace, contenuto misto di testo e CDATA, riferimenti a entità e valori significativi negli spazi bianchi, rifiutando i riferimenti a scalari Unicode non validi
- L'importazione e l'esportazione XFDF utilizzano la corrispondenza dei campi indicizzata e buffer geometrici delimitati, migliorando il throughput e il comportamento di picco delle allocazioni per formulari profondamente nidificati, grandi raccolte di annotazioni, elenchi di tratti, vertici e quadrilateri di markup
- La convalida PDF/A e PDF/UA utilizza la crescita delimitata per grandi raccolte di pagine, flussi, nomi di struttura e RoleMap; la risoluzione RoleMap di PDF/UA segue ora array diretti e oggetti indiretti nome o array con generazione esatta
Corretto (Fixed)
- I round-trip XFDF preservano ora i percorsi dei campi profondamente nidificati, i valori dei campi esplicitamente vuoti, i contenuti delle annotazioni esplicitamente vuoti e la distinzione tra contenuti assenti e vuoti
- I caricamenti di buffer di memoria non validi e le assegnazioni di pagine fuori intervallo vengono rifiutati senza lasciare uno stato parziale del documento o della pagina e un ricaricamento nativo della pagina non riuscito preserva la pagina precedentemente attiva
- I grandi identificatori di marked-content e i buffer dei metadati di firma vengono delimitati e convalidati prima dell'allocazione o dell'accesso nativo
Version 2.42.0
Aggiunto (Added)
TPdfMatrixfornisce oraInvert,TryInvert,TransformPointeTransformRectper la mappatura delle coordinate, l'hit testing, i limiti normalizzati e la gestione esplicita delle matrici singolariTPdf.WrapTextha ottenuto un overloadBreakLongWordsche divide il testo CJK e altro testo senza spazi mantenendo insieme le coppie surrogate UTF-16 valideTPdfAnnotation.AttachmentPointSetsespone ogni quadrilatero nelle annotazioni di markup multiriga mentre il campoAttachmentPointsesistente rimane un alias per il primo set
Modificato (Changed)
- L'estrazione del testo, la costruzione di contenuti leggibili, la ricerca di parole e la mappatura degli offset del testo parlato utilizzano ora l'allocazione delimitata e percorsi di ricerca binari, riducendo le allocazioni ripetute e le scansioni lineari sulle pagine grandi
- La serializzazione ASN.1 e la generazione di PDF crittografati utilizzano ora buffer di output geometrici; l'ordinamento degli oggetti crittografati utilizza l'ordinamento
O(n log n)e le righe xref vengono scritte direttamente nel buffer finale WrapTextpreserva i confini di riga CR, LF e CRLF e riutilizza un unico oggetto di misurazione nativo per l'intera operazione- L'importazione e l'esportazione XFDF preservano ogni quadrilatero di markup; l'importazione applica inoltre i colori RGB/interni e analizza le coordinate decimali indipendentemente dalle impostazioni internazionali del processo
Corretto (Fixed)
- I chiamanti legacy possono di nuovo aggiornare il contenuto e l'autore dell'annotazione assegnando stringhe non vuote senza impostare le sentinelle più recenti
HasContentseHasAuthor - Le stringhe di annotazione esplicitamente vuote utilizzano ora un buffer nativo con terminazione zero valido, in modo che la cancellazione di
/Contents,/Te altre chiavi di testo opzionali non passi più un puntatore nil a PDFium
Version 2.41.0
Modificato (Changed)
- I report di preflight
SaveJsonToFile,SaveMarkdownToFileeSaveTextToFileora scrivono in UTF-8 su Delphi (in modo corrispondente al metodoSaveHtmlToFileesistente), anziché utilizzare la code page ANSI di sistema; i caratteri non-ASCII nei percorsi dei file, nelle raccomandazioni e nelle note di ambito venivano visualizzati in modo errato su Delphi quando salvati tramite questi metodi SaveCsvToFileora scrive in UTF-8 con un prefisso BOM in modo che Excel per Windows rilevi automaticamente la codifica; senza il BOM, Excel tratta un file CSV UTF-8 come code-page 1252 e altera tutti i caratteri non-ASCII
Corretto (Fixed)
- La demo
ExtractImagespresentava una perdita degli oggettiTBitmapmemorizzati nella cache inFExtractedImagesquando il form veniva chiuso senza prima pulirli esplicitamente; il form ora esegue l'override diDestroyper chiamareClearExtractedImages, rilasciando così ogni bitmap memorizzato nella cache
Version 2.40.0
Modificato (Changed)
TPdf.RenderPage(HDC, ...)ora maschera le eccezioni FPU/SSE intorno alla chiamataFPDF_RenderPage, in modo corrispondente aTPdfView.RenderPage(HDC)(corretto nella versione v2.25.0) e a ogni punto di ingresso di rendering che restituisce un bitmap; l'overload diretto su DC a livello diTPdfin precedenza lasciava le eccezioni FPU non mascherate sui compilatori antecedenti a D12
Corretto (Fixed)
ColorToARGBora restituisce un pixel completamente trasparente (alfa 0) perclNoneeclDefaultinvece di trattare il valore sentinella come un colore RGB letterale; il comportamento precedente produceva un riempimento scuro e quasi opaco quando un chiamante passavaclNoneaspettandosi “nessun colore”
Version 2.39.1
Corretto (Fixed)
- I salvataggi espliciti in PDF 1.3 ora rimuovono le voci
/SMask /None,/AIS falsee/TK trueche ripetono solo lo stato grafico iniziale, continuando a rifiutare lo stato di trasparenza non predefinito
Version 2.39.0
Modificato (Changed)
CreatePDFeImageToPDFora utilizzano destinazioni di salvataggio confermate e segnalano il successo solo quandoSaveAsviene completato con successoBatchExport,PDFtoJpgeSplitPDFora allocano directory di output univoche in modo che le esecuzioni ripetute e gli input con lo stesso nome preservino i risultati precedentiSplitViewora esegue il wrap della ricerca una sola volta senza lasciare stati di pagina nascosti dopo l'annullamento o in assenza di corrispondenze, e interrompe i lavori di stampa incompleti invece di inviare output parziali
Corretto (Fixed)
MergePDFora rifiuta i token di intervallo di pagine malformati e i percorsi di output che sovrascrivono l'origine, conta le pagine effettivamente importate e si rifiuta di salvare un risultato vuoto- Le demo
Attachmentdi Delphi e C++Builder ora confermano i salvataggi sullo stesso percorso tramite una sostituzione di file sicura in caso di rollback, in modo che un rinomina non riuscito non possa rimuovere il PDF originale
Version 2.38.0
Modificato (Changed)
SetAnnotationDataora protegge le scritture di/Contentse/Authortramite le sentinelleHasContents/HasAuthorsuTPdfAnnotation, in modo corrispondente al patternHasName/HasSubject/HasIconesistente; in precedenza questi due campi venivano scritti in modo incondizionato, perciò l'assegnazione di un recordDefault(TPdfAnnotation)per aggiornare solo il colore o i flag sovrascriveva silenziosamente il contenuto e l'autore esistenti dell'annotazione con stringhe vuote;GetPageAnnotationora imposta le sentinelle in modo che un ciclo di lettura-modifica-scrittura preservi i valori originali
Corretto (Fixed)
GenerateFormAppearancesora legge il valore della casella di controllo o del pulsante di opzione tramiteFPDFAnnot_GetFormFieldValue(che risale al dizionario del campo principale secondo ISO 32000-1 §12.7.5) anziché utilizzareFPDFAnnot_GetStringValue(Annot, 'V', ...)(che legge il dizionario del widget); il widget di solito non contiene/V, quindi/ASnon veniva mai sincronizzato con lo stato selezionato e una casella di controllo o pulsante di opzione appiattito veniva visualizzato come non selezionato
Version 2.37.0
Modificato (Changed)
ParseTsaUrlora limita la porta a1..65535dopo l'analisi; in caso contrario, un valore di porta sovradimensionato verrebbe troncato tramite conversione inDWORDe potrebbe corrispondere a una porta valida- La funzione XFDF
ParseFieldora accetta un parametro di profondità (predefinito 0, limitato a 64) e restituisce un campo vuoto al raggiungimento del limite, in modo che una catena di<field>nidificata in modo malevolo a 100 000 livelli non possa più causare l'overflow dello stack
Corretto (Fixed)
- La richiesta HTTP TSA ora si protegge da un corpo di richiesta vuoto prima di passare
@ReqDer[0]aWinHttpSendRequest; un dereferenziamento di un array dinamico di lunghezza zero accederebbe a un puntatore non valido;BuildTimeStampReqrestituisce sempre una SEQUENCE non vuota, ma il punto di chiamata ora tutela il contratto
Note (Notes)
- Il commento di intestazione
FPdfTsaWinrelativo al controllo della revoca HTTPS è stato corretto: WinHttp convalida la catena di certificati del server per impostazione predefinita ma **non** esegue il controllo della revoca CRL/OCSP a meno che non sia esplicitamente abilitato tramiteWinHttpSetOption; la formulazione precedente affermava che il controllo della revoca “era gratuito”, il che era fuorviante
Version 2.36.0
Modificato (Changed)
- Le richieste HTTP TSA ora inviano un'intestazione
Content-Lengthesplicita in aggiunta alle intestazioniContent-TypeeAccept; WinHttp lo sintetizza dalla lunghezza totale, ma alcuni proxy RFC 3161 richiedono un'intestazione esplicita e rifiutano la richiesta con411 Length Requiredin sua assenza - L'esportazione XFDF ora scarta i caratteri di controllo C0 (diversi da TAB/LF/CR che sono già sottoposti a escape) invece di emettere una sequenza backslash-esadecimale non valida; la precedente sequenza di escape
\-01Fnon è un XML valido (il backslash non ha un significato speciale in XML), per cui qualsiasi lettore conforme avrebbe rifiutato il documento come malformato InjectAssociatedFilesora scrive/Subtypesul dizionario dello stream EmbeddedFile quando il chiamante fornisceTAssociateFile.MIMEType; il campo era dichiarato e documentato ma l'iniettore in precedenza codificava rigidamente/Type /EmbeddedFilee lo ignorava (la specifica ISO 32000-2 §7.11.4 consente/Subtypesullo stream)
Corretto (Fixed)
- L'importazione XFDF saltava il primo byte di contenuto dopo un BOM UTF-8 e il primo byte quando nessun BOM era presente:
BytesToAnsi(Bytes, 4, ...)(BOM) eBytesToAnsi(Bytes, 1, ...)(nessun BOM) utilizzavano offset di inizio errati di uno poichéBytesToAnsirichiede un indice di array a base 0; le chiamate ora utilizzano3e0 - La funzione
ExtractSignatureValuepresentava due bug di rientro del tipo dangling-ifper cuiR.Position:= CNveniva eseguito incondizionatamente per i rami opzionalicertificates [0]esignedAttrs [0]; i rami sono ora racchiusi in blocchibegin/endin modo che la posizione venga avanzata solo quando il TLV opzionale viene effettivamente letto (stessa classe di bug corretta inAddSignatureTimestampToCmsnella versione v2.22.0)
Version 2.35.0
Modificato (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvaileTFPDFAvail_IsFormAvailora accettanohints: PFX_DOWNLOADHINTSinvece divar hints: FX_DOWNLOADHINTS, in modo che la modalità di sola querynullptrdocumentata (verifica della disponibilità corrente senza richiedere ulteriori dati) sia raggiungibile da Delphi; l'intestazione PDFium consente esplicitamente ahintsdi essere null; il precedente binding convarlo rendeva impossibileTFPDF_SetSystemFontInfoora accettapFontInfo: PFPDF_SYSFONTINFOinvece divar pFontInfo: FPDF_SYSFONTINFO, consentendo così ai chiamanti di passarenilper indicare a PDFium di smettere di utilizzare un'interfaccia di caratteri di sistema precedentemente registrata (il percorso di disattivazione documentato)TPdfThumbnailView.Paintora calcolaVisibleRowscon la stessa formula diUpdateScrollBarRange(ClientHeight div RowHeight), in modo che il numero di righe disegnate corrisponda alla dimensione della pagina della barra di scorrimento; la precedente formula per il solo disegno ((ClientHeight - FMarginY) div RowHeight + 1) poteva differire di una riga ad altezze limite, sprecando un rendering su una riga fuori pagina o saltando l'ultima riga visibile
Version 2.34.0
Aggiunto (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— API di alto livello che salva il documento e poi lo crittografa con PDF 2.0 AES-256-CBC (V=5/R=5/R=6); accetta unTPdfEncryptOptionscon password utente/proprietario, autorizzazioni e revisione; delega aEncryptDocumentBytes- Crittografia delle stringhe letterali StrF:
EncryptDocumentBytesora crittografa le stringhe letterali(...)negli oggetti diversi dagli stream (dizionario Info, eccetera) in stringhe esadecimali AES-256-CBC, in modo corrispondente al formato di crittografia dello stream (IV da 16 byte + testo cifrato PKCS7); le stringhe esadecimali<...>rimangono invariate
Version 2.33.0
Aggiunto (Added)
- Iniettore di crittografia AES-256-CBC per l'intero documento nell'unità
FPdfEncrypt.pas;EncryptDocumentBytesriceve un PDF in testo chiaro e una password, crittografa ogni oggetto stream indiretto (IV da 16 byte + AES-256-CBC PKCS7 sotto la chiave del file), corregge/Length, aggiunge l'oggetto dizionario/Encrypte ricostruisce una tabella dei riferimenti incrociati classica completa + trailer con/Encrypte/ID; completa lo stack di crittografia PDF 2.0 (blocco AES + GCM + SHA-512/384 + derivazione chiave R6 + dizionario + scansione del documento) - Helper
EncryptStreamPayload— il formato stream AES-256 di PDF 2.0 (IV aggiunto in testa al testo cifrato AES-CBC-PKCS7), riutilizzabile dai chiamanti che gestiscono il proprio layout degli oggetti
Version 2.32.0
Aggiunto (Added)
- Hash SHA-512 / SHA-384 (FIPS 180-4) nella nuova unità
FPdfSha512.pas, implementati interamente in Pascal; servono all'iterazione dell'hash della password R6 di PDF 2.0, che a ogni round usa un valore mod-3 a 128 bit per scegliere SHA-256/384/512; verificati con le risposte note B.1 dello standard FIPS-180-4 - Derivazione della chiave di crittografia PDF 2.0 e generatore del dizionario Encrypt nella nuova unità
FPdfEncrypt.pas; implementa l'algoritmo 2.B della specifica ISO 32000-2 §7.6.4.3 (sequenza hash R6: AES-128-CBC + selezione iterativa di SHA-256/384/512), deriva la chiave di crittografia del file da 32 byte più le voci/O,/U,/OE,/UE,/Permse crea il dizionario Encrypt V=5/R=5/R=6 con/CFM /AESV3; l'implementazione usa lo stile TBytes
Version 2.31.0
Aggiunto (Added)
- Primitive del cifrario a blocchi AES (FIPS 197) nella nuova unità
FPdfAes.pas; AES-128 e AES-256 sono implementati interamente in Pascal, con helper per la modalità CBC e un backend CSPRNG; i test con risposte note dell'Appendice C.2 / C.3 di FIPS-197 ne verificano la correttezza; queste primitive costituiscono la base dello stack di crittografia di PDF 2.0 - Crittografia autenticata AES-GCM (NIST SP 800-38D) nella nuova unità
FPdfAesGcm.pas; implementa GHASH (moltiplicazione GF(2^128)), GCTR e la costruzione GCM AEAD sopra le primitive di blocco AES; i casi di test NIST GCM 1 e 3 (AES-128) corrispondono esattamente al testo cifrato e al tag autorevoli; il caso di test 13 (AES-256) completa l'andata e ritorno; GCM è la modalità ISO/TS 32003 per PDF 2.0 - Validazione dell'integrità di ParentTree e ClassMap per PDF/A Level A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingsegnala un StructTreeRoot privo dell'albero numerico /ParentTree;pvaiClassMapUnresolvedsegnala un riferimento a una classe /C privo di un /ClassMap
Version 2.30.0
Aggiunto (Added)
- Iniezione di File Associati (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); la nuova unitàFPdfAssocFilescollega array/AFdi riferimenti filespec al catalogo o a qualsiasi dizionario di pagina, coprendo tutti gli otto valori/AFRelationshipdella Tabella 45 di ISO 32000-2; riutilizza il pattern di aggiornamento incrementale collaudato daInjectPadesDssMarkers - Supporto a PDF/X-6 (ISO 15930-9:2020);
TPdfXConformanceaggiungepxc6; l'iniettore e il validatore lo integrano attraverso l'identificazionepdfxid:GTS_PDFXVersion; PDF/X-6 è il successore basato su PDF 2.0 di PDF/X-4 per lo scambio completo - PDF/A vieta l'azione
/Thread(lacuna nella whitelist di ISO 19005-1 §6.6.1); l'elenco delle azioni vietate ora copre Thread insieme a Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition e Hide
Corretto (Fixed)
- Il percorso di validazione di PDF/A-4e ora rispetta gli stessi controlli sulla struttura taggata, MarkInfo e interruzioni di parola previsti per il Level A; il downgrade sul lato salvataggio della versione v2.29.0 copriva
PdfAIsLevelE, ma tre filtri diValidatePdfACompliancecontrollavano unicamentePdfAIsLevelA, pertanto un documento PDF/A-4e privo di struttura taggata veniva accettato senza segnalazioni - Deriva del test di
/BaseStateOCG: il passaggio PostProcess della versione v2.28.0 ha correttamente esteso l'accettazione a/ONo/OFF(ISO 32000-1 Tabella 8.70), ma i test Delphi e C++ si aspettavano ancora che/OFFvenisse rifiutato; i test ora utilizzano un valore realmente non valido (/Undefined) e un nuovo test positivo blocca l'accettazione di/OFF - Corrispondenza eccessiva per il
/Subtype /GEOgeospaziale:ContainsDictionarySubtype('GEO')corrispondeva a qualsiasi dizionario contenente il token, compresi quelli non correlati come un dizionario/ViewerPreferences << /Subtype /GEO >>estraneo; la nuova funzioneContainsMeasureDictionarySubtyperichiede inoltre/Type /Measureo una chiave correlata esclusiva di Measure, in modo che i dizionari non Measure non attivino più il requisito ADBE ExtensionLevel 3
Version 2.29.0
Aggiunto (Added)
- Supporto a PDF/A-4 (ISO 19005-4:2020) all'interno del validatore, dell'iniettore XMP e del livello del modello a oggetti Pdfium;
TPdfAConformanceaggiungepac4base,pac4fepac4e; il livello base è PDF 2.0 (ISO 32000-2) e sostituisce i livelli legacy A/B/U con base + F (modulo) + E (accessibilità);ValidatePdfAlegge un pacchetto XMPpdfaid:part=4(il livello base omette l'elemento di conformità),SaveAsPdfAlo emette eSignPadesWithPdfAaccettapac4basecome contenitore di archiviazione a lungo termine - Binding per
FPDFBookmark_GetColor— l'ultima esportazione pubblica di PDFium non ancora associata (469/469);TBookmarkottiene i campiHasColoreColorpopolati dall'array/Cdel segnalibro (ISO 32000-1 §12.3.3); il binding utilizza il caricamento tollerante in modo che le DLL più vecchie antecedenti all'esportazione continuino a funzionare - Controllo della versione dell'intestazione
pveiBadPdfVersionper PDF/E-1 (ISO 24517-1 §5) — PDF/E-1 si basa su PDF 1.6 e un'intestazione diversa da 1.6 viene ora segnalata - Errore
pvriEncryptVersionMismatchper PDF/R-1 (ISO 23504-1) — la crittografia è consentita solo su un'intestazione%PDF-2.0; un corpo 1.x che contiene/Encryptviene ora segnalato (in precedenza era un'istruzione senza effetto) - Errore
pvriBadMediaBoxper PDF/R-1 — ilMediaBoxdi ogni pagina deve essere[0 0 w h];PdfRHasNonZeroMediaBoxOriginè uno scanner ASCII indipendente dalle impostazioni locali che salta i dizionari MediaBox a riferimento indiretto - Errore
pvaiRoleMapUnresolvedper PDF/A Level A (ISO 19005-1 §6.8.3.4) — una RoleMap presente ma incompleta, che lascia non mappati i tipi di struttura personalizzati/S, viene ora segnalata, colmando la lacuna lasciata dal controllo esistente di sola presenzapvaiRoleMapMissing
Corretto (Fixed)
PdfVersionToName(20)restituiva"1.0"anziché"2.0", corrompendo la voce/Versiondel catalogo e i messaggi del validatore per ogni salvataggio PDF 2.0; il formattatore ora separa esplicitamente major.minor per i codici di versione>= 20- Il codificatore INTEGER negativo in
FPdfAsn1.pasnon riusciva a compilare sotto Delphi 12 (erroreE2015suInteger(-(V<0))), bloccando l'intero progetto di test; corretto utilizzandoInt64(-Ord(V<0))per la maschera di estensione del segno - L'elenco delle annotazioni vietate in PDF/A ora include
/RichMediain tutte le parti (in precedenza omesso; la specifica ISO 32000-1 §12.5.6.35 lo vieta in PDF/A)
Version 2.28.0
Aggiunto (Added)
TPdfVersionora includepv20per PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)restituiscepv20anzichépvUnknownedEncodePdfVersion(pv20)emette 20 in modo che la versione di un documento PDF 2.0 non venga più persa in fase di rilettura e possa essere scritta in modo esplicito
Modificato (Changed)
DecodeDateora analizza le stringhe di data PDF con campi finali opzionali secondo il PDF Reference 3.8.3, invece di richiedere il formato completo di 23 caratteriD:YYYYMMDDHHmmSSOHH'mm'; le date troncate conformi comeD:20260712,D:20260712153000eD:20260712153000Zvengono ora accettate (in precedenza venivano rifiutate da un controllo rigido diLength=23); l'offset dell'ora del fuso orario viene ora convalidato rispetto all'intervallo reale UTC-12..UTC+14 anziché> 23FPdfMeasure.MeasureTextora codifica il nome del carattere comeAnsiStringper FPC /UTF8Encodeper Delphi, in modo corrispondente agli altri punti di chiamata FPDF_BYTESTRING della libreria, anziché un semplice castAnsiStringche visualizzava in modo errato i nomi di famiglia non-ASCII a causa della code page corrente
Corretto (Fixed)
- Il percorso del valore negativo per
TDerWriter.Integerandava in crash o produceva DER malformato: il ciclowhile V <> -1 do V := V shr 8lasciavaInnervuoto perValue = -1(errore di intervallo sul successivoInner[Length(Inner)-1]) e produceva byte in eccesso per altri valori negativi; il codificatore ora estrae byte in complemento a due con spostamenti che estendono il segno e si interrompe correttamente quando il resto è una pura estensione del segno; i campi INTEGER CMS/PAdES sono positivi, quindi ciò influisce solo sui chiamanti che passano valori negativi, ma il percorso is ora corretto TPdf.GetCharacterOrigineTPdfView.GetCharacterOriginignoravano il valore restituito daFPDFText_GetCharOrigine in caso di fallimento restituivano un punto non inizializzato; il risultato viene ora inizializzato a zero e una lettura fallita restituisce l'origine (in linea con il contratto diGetCharacterRectangle)
Version 2.27.0
Modificato (Changed)
- Le demo Delphi, C++Builder e Lazarus
PDFViewereMultiPageViewerora eseguono una ricerca circolare nei documenti, accettanoEntereF3per il risultato successivo, reimpostano il contesto quando cambiano le opzioni e riservanoEscalla cancellazione di una ricerca o stampa attiva - La stampa del visualizzatore segue ora la rotazione corrente e seleziona di conseguenza l'output verticale o orizzontale, riflettendo la rotazione della barra degli strumenti nelle pagine stampate
- Tutte e tre le demo
ViewerInteractionLabsupportano ora le scorciatoieCtrl+A,Ctrl+C,Enter,F3eEscsenza intercettare i comandi nativi di selezione e copia dei controlli di modifica
Corretto (Fixed)
- La cancellazione della stampa del visualizzatore in C++Builder e Lazarus interrompe ora il lavoro della stampante invece di inviare le pagine renderizzate prima della cancellazione, e Lazarus esce esplicitamente da ogni ciclo annidato di copie, pagine e fascicolazione
- Il pulsante Annulla di
MultiPageViewerDelphi è ora collegato al relativo gestore, mentre i campi di ricercaMultiPageViewerC++Builder/Lazarus mantengono la modifica nativa con i tasti freccia, Home ed End
Version 2.26.0
Modificato (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnaile i corrispondenti metodiTPdfViewacquisiscono ora il lock di rendering attorno alla chiamataFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap, comeRenderPage/RenderTile. Queste chiamate lato rendering PDFium prima venivano eseguite senza lock e potevano competere conUnloadPage/ReloadPageconcorrenti sullo stesso documentoTPdf.RenderPageThumbnailora rispetta la voce/Rotate: per pagine/Rotate 90o270il fitting viene ricalcolato sulle dimensioni ruotate, così le proporzioni della miniatura corrispondono al visualizzatore invece di usare le dimensioni intrinseche non ruotate restituite daFPDF_GetPageSizeByIndex
Corretto (Fixed)
TPdfView.GetCharacterRectangleignorava il valore restituito daFPDFText_GetCharBoxe passava unTPdfRectanglenon inizializzato aPageToDevicequando PDFium segnalava un errore. Il rettangolo è ora inizializzato a zero e unGetCharBoxfallito restituisceRect(0,0,0,0)- La lunghezza del buffer per percorso URI e percorso file di
GetLinkAnnotationsera errata di uno: la seconda chiamataFPDFAction_GetURIPath/GetFilePathpassavasize, che include il NUL finale, a un buffer allocato comesize-1. Ora passasize-1e non può scrivere oltre l'allocazione nelle build PDFium che non applicano un limite interno
Version 2.25.0
Modificato (Changed)
TPdf.AddText,SetText,AddPatheInsertFormObjectFromXObjectinvalidano ora la pagina di testo e le annotazioni link memorizzate nella cache prima di rigenerare il contenuto, comeSetTextPositionseRemoveObject. Prima una chiamataGetText/GetWebLinks/FindFirstdopo una modifica restituiva dati obsoleti catturati prima della modifica e il handleFPDF_TEXTPAGEconservato veniva usato dopo la rigenerazione con comportamento indefinitoTPdfView.RenderPage(HDC, ...)acquisisce ora il lock di rendering e maschera le eccezioni FPU/SSE attorno aFPDF_RenderPage, come ogni altro punto di ingresso di rendering. Il precedente overload diretto su DC poteva competere conUnloadPage/ReloadPageconcorrenti e lasciava non mascherate le eccezioni FPU sui compilatori precedenti a D12- La demo Delphi
PrintPDFora chiamaPrinter.Abortin caso di cancellazione invece di permettere al bloccofinallydi raggiungerePrinter.EndDoc, che inviava le pagine renderizzate prima della cancellazione. La demo Lazarus lo gestiva già correttamente
Corretto (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodee i corrispondenti metodiTPdfViewtroncavano a 16 bit bassi tramiteWideChar()i punti di codice oltre il piano BMP (emoji, CJK Extension B) restituiti daFPDFText_GetUnicode, producendo un surrogato isolato. Ora i caratteri sopra U+FFFF restituiscono U+FFFD (carattere di sostituzione); usareGetTextper il codice UTF-16 completoGetWebLinkschiamavaSetLength(Rectangles, FPDFLink_CountRects(...))senza proteggere il ritorno-1, causandoEOutOfMemorysu pagine malformate. Un conteggio negativo viene ora limitato a zeroTPdf.Destroyora cancella dalla memoria la stringaPassword(tramiteUniqueString+FillChar) prima di rilasciare il buffer con conteggio dei riferimenti, così la password non resta leggibile nell'heap dopo la distruzione del componente
Version 2.24.0
Aggiunto (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmenteDeleteAttachmentora convalidano l'indice di pagina o allegato e generanoEPdfErrorsu un valore fuori intervallo, in linea con il comportamento esistente degli accessori delle annotazioni. In precedenza un indice fuori intervallo veniva passato direttamente a PDFium e produceva un no-op silenzioso o un comportamento indefinito
Corretto (Fixed)
- Perdite di handle di oggetti di pagina in caso di errore in
TPdf.AddText,AddBitmapeAddJpegImage: quandoFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixoFPDFImageObj_LoadJpegFileInlinegeneravano un'eccezione dopo la creazione dell'oggetto ma prima cheFPDFPage_InsertObjectlo cedesse alla pagina, l'handle nativoFPDF_PAGEOBJECTveniva perso. Ogni percorso ora distrugge l'oggetto sull'eccezione prima di rilanciarla TPdf.UnloadPagescartava un handleFPathin corso (impostato daCreatePathma non ancora consumato daAddPath) assegnandoglinilsenza chiamareFPDFPageObj_Destroy. L'handle ora viene distrutto, così un percorso creato e poi abbandonato (o interrotto da un cambio di pagina) non perde più memoriaTPdf.InsertFormObjectFromXObjectometteva la chiamataUpdatePage(FPDFPage_GenerateContent) che ogni inserimento fratello (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject) esegue, così un Form XObject inserito in questo modo spariva al successivo ricaricamento o salvataggio.UpdatePageora viene chiamata dopo l'inserimento
Version 2.23.0
Corretto (Fixed)
- La convalida del contenuto opzionale
/BaseStateaccetta ora/OFFoltre a/ON(ISO 32000-1 Table 8.70 consente entrambi). Il controllo precedente rifiutava configurazioni conformi/OCProperties /D /BaseState /OFFcon un errore di contenuto opzionale malformato - La convalida del contenuto opzionale
/Intentaccetta ora/Designe array di nomi come[/View /Design], non solo il letterale/View. ISO 32000-1 Table 8.70 definisce/Intentcome nome o array di nomi scelti tra/Viewe/Design; il precedente controllo a valore singolo rifiutava troppo output standard - Il rilevamento del dizionario Measure geospaziale per la soglia PDF 1.7
/Extensions /ADBEExtensionLevel 3 non richiede più/Type /Measure, indicato come opzionale da ISO 32000-1 Table 254. I produttori GeoPDF che omettono/Type(PDFBox, QGIS, FME) aggiravano prima la soglia producendo silenziosamente output PDF 1.7 non conforme; il rilevatore ora corrisponde al solo/Subtype /GEO
Version 2.22.0
Modificato (Changed)
- I calcoli dello zoom di adattamento di
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) usano oraClientWidth/ClientHeightinvece diWidth/Heightdella finestra, cosìpfmFitPage/pfmFitWidth/pfmFitHeightdimensionano la pagina sul viewport visibile anziché sulla cornice esterna con barre di scorrimento e bordi, eliminando la barra ridondante che appariva quando la pagina adattata era leggermente più grande dell'area client AddSignatureTimestampToCmsora genera unaExceptionesplicita che identifica il campo CMS SignerInfo non leggibile (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) invece di eseguire silenziosamenteExite lasciare proseguire una parte del parsing come se fosse un CMS firmato completo; è corretto anche il bloccobegin/endmancante nel ramo opzionalesignedAttrs [0]che lasciavaR.Positioninvariato
Corretto (Fixed)
- Perdita dell'handle della chiave privata CNG in
ResolveWinSigner: quandoCryptAcquireCertificatePrivateKeyriusciva ma l'estrazione successiva di issuer/seriale oTWinCmsSigner.Creategenerava un'eccezione,NCryptKeyHandlenon veniva liberato perché la proprietà passava al signer solo dopo un costruttore riuscito. La configurazione dopo l'acquisizione è ora protetta e l'handle viene rilasciato tramiteNCryptFreeObjectal primo errore EcDsaP1363ToDerrifiuta ora una metàrostutta a zero invece di emettereINTEGER 0; le firme ECDSA conr = 0os = 0non sono valide (RFC 4754 §6 / FIPS 186-4 §6 richiedono1 ≤ r, s ≤ n-1) e altrimenti potrebbero essere accettate come autentiche da un verificatore permissivo
Version 2.21.12
Corretto (Fixed)
- I salvataggi espliciti da PDF 1.5 a PDF 1.7 ora rifiutano le strutture
/OCPropertiesmalformate nel catalogo, incluse le voci/OCGso/Dobbligatorie mancanti, i valori di configurazione predefinita non validi e le voci di stato che non sono array
Version 2.21.11
Corretto (Fixed)
- I salvataggi espliciti delle versioni PDF ora rifiutano le voci
/Annotsdi pagina dirette o indirette i cui dizionari di annotazione omettono la voce obbligatoria/Subtypeo/Rect
Version 2.21.10
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.7 ora richiedono che i dizionari geospaziali
/Type /Measure /Subtype /GEOe le annotazioni Projection dichiarino/Extensions /ADBEcon/BaseVersion /1.7e/ExtensionLevel 3o successivo
Version 2.21.9
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.7 ora richiedono che le annotazioni RichMedia e le azioni
RichMediaExecutedichiarino/Extensions /ADBEcon/BaseVersion /1.7e/ExtensionLevel 3o successivo
Version 2.21.8
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.7 ora richiedono che i flussi 3D PRC dichiarino
/Extensions /ADBEcon/BaseVersion /1.7e/ExtensionLevel 1o successivo, invece di trattare PRC come una funzionalità core di PDF 1.7
Version 2.21.7
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.4 e versioni precedenti ora rifiutano le voci
/SMaskInDatadegli image XObject, incluso un valore esplicito di0, perché i canali soft-mask JPEG 2000 incorporati richiedono PDF 1.5 o successivo
Version 2.21.6
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.4 e versioni precedenti ora rifiutano gli image XObject a 16 bit, che richiedono PDF 1.5 o successivo, mentre i target da PDF 1.5 a PDF 1.7 conservano i dati immagine
/BitsPerComponent 16
Version 2.21.5
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.4 e versioni precedenti ora rifiutano i valori
/PageLayout /TwoPageLefte/TwoPageRightdel catalogo del documento, che richiedono PDF 1.5 o successivo, mentre i target da PDF 1.5 a PDF 1.7 conservano il layout a due pagine richiesto
Version 2.21.4
Corretto (Fixed)
- I salvataggi espliciti di PDF 1.3 ora rifiutano le voci
/Langdel catalogo del documento, che richiedono PDF 1.4 o successivo, mentre i target da PDF 1.4 a PDF 1.7 conservano l'identificatore di lingua
Version 2.21.3
Corretto (Fixed)
- I salvataggi espliciti in PDF 1.3 ora rifiutano gli alberi dei nomi
/EmbeddedFilesdel documento, che richiedono PDF 1.4 o versione successiva, senza rifiutare gli stream di file incorporati referenziati tramite specifiche di file più vecchie
Version 2.21.2
Corretto (Fixed)
- Il salvataggio esplicito in PDF 1.3 ora rifiuta gli stream di metadati attivi, che richiedono PDF 1.4 o successivo; li conserva invece quando il formato di destinazione va da PDF 1.4 a PDF 1.7
Version 2.21.1
Corretto (Fixed)
- La validazione dei riferimenti ibridi ora applica le voci supplementari
/XRefStmprima dei segnaposto xref classici della stessa revisione, in modo che le annotazioni compresse e altri oggetti condizionati dalla versione non vengano più ignorati quando la tabella di compatibilità li segna come liberi
Version 2.21.0
Modificato (Changed)
- Tutti gli esempi di visualizzatore Delphi, C++Builder e Lazarus possono aprire un PDF passato come primo argomento della riga di comando, e gli esempi
MultiPageViewerdi C++Builder e Lazarus forniscono scorciatoie esplicite per seleziona tutto e copia
Corretto (Fixed)
- Gli esempi di visualizzatore ora rifiutano destinazioni di pagina non valide per bookmark e link, conservano gli errori di caricamento e verificano in modo coerente lo zoom inserito manualmente. La stampa usa la pagina richiesta con i campi del modulo compilati, senza ripetere la pagina visibile; i job di stampa Delphi annullati vengono interrotti senza inviare un output parziale
Version 2.20.0
Modificato (Changed)
- Tutti gli esempi di visualizzatore Delphi, C++Builder e Lazarus forniscono ora scorciatoie coerenti per apertura, ricerca, salvataggio, stampa, zoom e navigazione delle pagine, mentre ogni variante di
ViewerInteractionLabsupporta anche salti di pagina, zoom manuale validato tra 10–600%, log di interazione persistenti e verifiche di andata e ritorno delle coordinate di clic
Version 2.19.1
Corretto (Fixed)
- La validazione esplicita della versione PDF segue ora la catena di revisione classica, ibrida o xref-stream attiva, incluse le voci di oggetti compressi, in modo che gli oggetti superati, liberati e non referenziati non causino più falsi errori di versione della funzionalità
Version 2.19.0
Modificato (Changed)
- Gli esempi di allegati, estrazione immagini, estrazione testo, conversione pagine e suddivisione di C++Builder e Lazarus ora utilizzano cartelle di output dedicate o file finalizzati in modo sicuro, nomi stabili con zero padding, aggiornamenti di avanzamento reattivi e riepiloghi di completamento con conteggi di errori per elemento
Corretto (Fixed)
- Il
CJKTextLabdi C++Builder ora misura il testo tramite le funzioni di modifica PDFium esportate, eMergePDFevita un sovraccarico di messaggi VCL ambiguo, ripristinando build pulite di RAD Studio 37
Version 2.18.3
Corretto (Fixed)
- Il Document Time-stamp PAdES B-LTA è ora registrato come campo firma individuabile — un Widget invisibile raggiungibile tramite
/Annotsdella prima pagina e/Fieldsdell'AcroForm (ETSI EN 319 142-1 §5.4.3) — invece di un oggetto orfano irraggiungibile che i validatori che enumerano i campi firma non riuscivano a trovare; le annotazioni e i campi esistenti vengono preservati
Version 2.18.2
Corretto (Fixed)
- La firma PAdES e la scrittura classica di riferimenti incrociati ora generano un errore chiaro quando un offset di byte supera la larghezza del campo fisso a 10 cifre (~9.3 GB) invece di lasciare silenziosamente il segnaposto
/ByteRangenon scritto (producendo una firma non valida) o di sforare la riga xref a 20 byte (ISO 32000-1 §7.5.4); l'output dello stream di riferimenti incrociati usa campi binari a 8 byte e non è interessato
Version 2.18.1
Corretto (Fixed)
- La firma PAdES ora risolve i riferimenti indiretti a
/Annots,/AcroForme/Fieldsdella prima pagina tramite l'intestazione dell'oggetto intero (ISO 32000-1 §7.5.3) e il numero di generazione effettivo del riferimento; una ricerca su sottostringa nuda corrispondeva in precedenza a un numero di oggetto all'interno di uno più lungo (risolvendo5 0 Rin15 0 obj) e una generazione fissa ignorava gli oggetti congen>0, corrompendo gli array del campo firma o rifiutando documenti validi - Quando il catalogo, la prima pagina,
/Annots,/AcroFormo/Fieldssi trovano all'interno di uno stream di oggetti, la firma ora ritenta su una copia espansa prima di fallire invece di rifiutare il documento immediatamente
Version 2.18.0
Aggiunto (Added)
ReadPdfVersionInforiporta la versione dell'intestazione, la versione core effettiva, l'override del catalogo e il livello di estensione sviluppatore Adobe da uno stream PDF
Modificato (Changed)
- I salvataggi espliciti in PDF 1.3-1.7 ora validano le strutture del catalogo, delle risorse di pagina, XFA, di redazione e delle estensioni sviluppatore nel contesto dell'oggetto proprietario; l'output con versione esplicita crittografato e la normalizzazione incrementale di PDF 1.3 vengono rifiutati per preservare l'integrità del documento
- I salvataggi su percorso file ora scrivono su un file temporaneo adiacente e sostituiscono la destinazione solo dopo che tutti i controlli di compressione, normalizzazione e versione hanno avuto successo
Corretto (Fixed)
- L'output PDF 1.3 ora include la risorsa
/ProcSetcompleta richiesta e rimuove le chiavi di trasparenza PDF 1.4 quando ripetono solo i valori iniziali dello stato grafico PDF 1.3 - I file di riferimenti ibridi, stream xref e stream di oggetti non vengono più riscritti dal compressore xref classico, impedendo che le voci di oggetti compressi vengano eliminate
- I nomi che assomigliano a chiavi di funzionalità di trasparenza o catalogo all'interno di stringhe, commenti o mappe di risorse non correlate non causano più falsi errori di versione target
Version 2.17.0
Aggiunto (Added)
- Le firme PAdES sono ora registrate come annotazioni Widget invisibili nell'array
/Annotsdella prima pagina e nell'array/Fieldsdell'AcroForm, preservando le annotazioni e i campi modulo esistenti
Modificato (Changed)
- Gli aggiornamenti incrementali di PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT e PAdES ora preservano la rappresentazione dei riferimenti incrociati sorgente: i documenti con stream xref ricevono un aggiornamento dello stream xref come richiesto da ISO 32000-1 §7.5.8.1, mentre i documenti classici continuano a ricevere una tabella xref
- Gli offset dei riferimenti incrociati,
startxref,/Prev, i valori ByteRange PAdES e l'elaborazione degli intervalli SHA-256 ora usano posizioni a 64 bit con hashing a blocchi, abilitando file di dimensioni superiori a 2 GB nelle build a 64 bit - I pacchetti XMP scrivibili generati riservano ora 2048 byte di padding prima dell'istruzione di chiusura del pacchetto
Version 2.16.10
Corretto (Fixed)
- L'espansione dello stream di oggetti non resuscita più copie obsolete di oggetti che un aggiornamento incrementale ha migrato fuori dallo stream di oggetti in una definizione semplice (ISO 32000-1 §7.5.7); i controlli di conformità e l'iniezione di marcatori in precedenza risolvevano il catalogo o il dizionario di metadati obsoleto su tali file
Version 2.16.9
Corretto (Fixed)
- Su Free Pascal, le stringhe di testo il cui input non è UTF-8 valido vengono allargate byte per byte come Latin-1 e scritte come stringhe esadecimali UTF-16BE; i byte alti grezzi in precedenza fuoriuscivano in una stringa letterale, che non è una codifica di stringa di testo PDF 1.7 legale
- La decodifica dello stream ora riconosce i dati deflate grezzi senza il wrapper zlib RFC 1950 (un difetto comune di scrittori difettosi) e li decomprime in modalità raw, in modo che le scansioni di conformità non diventino più silenziosamente cieche su tali stream
Version 2.16.8
Corretto (Fixed)
- Gli aggiornamenti incrementali scritti dal percorso di post-elaborazione del salvataggio ora aggiornano il secondo elemento
/IDdel trailer in modifica come richiesto da ISO 32000-1 §14.4; entrambi gli elementi venivano in precedenza copiati verbatim, in modo che gli strumenti di caching e sincronizzazione vedessero un identificatore invariato dopo ogni aggiornamento
Version 2.16.7
Corretto (Fixed)
- L'azzeramento del corpo dello stream usato dalle scansioni di conformità ora richiede che la parola chiave
streamsia seguita da un fine riga (ISO 32000-1 §7.3.8.1); la parola all'interno di una stringa letterale come(downstream)in precedenza azzerava tutta la struttura successiva fino al prossimoendstream, nascondendo le violazioni reali ai controlli a livello di byte - Le scansioni delle funzionalità vietate di PDF/X e PDF/E azzerano inoltre le stringhe letterali e i commenti (§7.2.2), in modo che un valore come
/Title (see /JavaScript docs)o un token commentato non produca più un falso rilevamento diJavaScript,AcroFormoLZWDecode
Version 2.16.6
Corretto (Fixed)
- Le voci DPM di PDF/VT vengono ora validate al momento della scrittura come documentato: i nomi di chiave che violano la regola NMTOKEN di ISO 16612-2 §6.6 o la regola del prefisso del registrante dell'Allegato E, e i nomi duplicati, vengono rifiutati invece di essere scritti nel dizionario DPart — un nome contenente uno spazio in precedenza si divideva in una coppia chiave/valore fasulli e corrompeva il dizionario
Version 2.16.5
Corretto (Fixed)
- La rimozione di una voce del dizionario il cui valore è una stringa esadecimale (come
/Check <...>) ora rimuove l'intera voce; gli iniettori in precedenza lasciavano un valore esadecimale orfano, producendo un dizionario sintatticamente non valido - La rimozione di una voce il cui riferimento indiretto usa a capo tra i token (ISO 32000-1 §7.3.10 consente qualsiasi spazio bianco) non lascia più il numero di generazione e la parola chiave
R
Version 2.16.4
Corretto (Fixed)
- La scansione del numero massimo di oggetti non richiede più che le intestazioni degli oggetti inizino una riga (ISO 32000-1 §7.5.3 consente qualsiasi spazio bianco o delimitatore prima di esse), in modo che gli iniettori non possano più allocare un numero di oggetto che collide con un'intestazione
N G objinline e corrompere silenziosamente il file; i numeri di oggetto sono limitati dal tetto dell'Allegato C - Gli stream il cui
/Lengthè un riferimento indiretto ora risolvono l'oggetto intero referenziato e ne usano il valore quando coincide con ilendstreamdi chiusura; in precedenza tali stream erano delimitati da una ricerca per pattern, che troncava i corpi contenenti legalmente la sequenza di byteendstream— tipico per allegati PDF incorporati
Version 2.16.3
Corretto (Fixed)
- I passaggi di compressione dello stream trasmettono invariati i documenti con stream di riferimenti incrociati (file PDF 1.5+ senza la parola chiave
trailerclassica); il percorso di ricostruzione in precedenza interpretava erroneamentestartxrefcome posizione della tabella e sintetizzava un trailer ipotetico, che poteva produrre un file non apribile - Il compressore salta gli stream di metadati XMP in modo che un documento PDF/A mantenga il suo stream di metadati obbligatoriamente non filtrato (ISO 19005-1 §6.7.2), e lascia invariati gli stream di file esterni (
/Fcon/FFilter) - La tabella dei riferimenti incrociati ricostruita esegue la scansione di una copia del documento senza stream, in modo che il contenuto binario degli stream non possa più simulare intestazioni di oggetti o gonfiare la tabella; il
/Sizedel trailer ricostruito riflette ora la tabella effettiva e i numeri di oggetto sono limitati al tetto dell'Allegato C - L'individuazione della tabella dei riferimenti incrociati originale accetta terminazioni di riga solo CR (ISO 32000-1 §7.5.1) e non può più corrispondere alle lettere
xrefall'interno distartxref; la scansione delle parole chiave degli stream ha guadagnato la stessa protezione dalla codaendstreamusata altrove e ora avanza oltre i corpi di stream saltati
Version 2.16.2
Corretto (Fixed)
- L'analisi dei numeri interi nei lettori PDF a livello di byte ora accetta il segno esplicito
+consentito da ISO 32000-1 §7.3.3 e rifiuta le sequenze di cifre che andrebbero in overflow, in modo che documenti ostili o corrotti non possano più avvolgere lunghezze e offset analizzati in valori fuorvianti
Version 2.16.1
Corretto (Fixed)
- L'iniettore PDF/UA scrive il valore
/Langdel catalogo come stringa di testo PDF corretta; in precedenza eseguiva il valore attraverso l'escape XML, in modo che un tag di lingua contenente&o parentesi producesse una voce corrotta, e l'input non ASCII veniva scritto come UTF-8 grezzo - La voce Info
/ISO_PDFEVersiondi PDF/E usa il codificatore di stringhe di testo condiviso, mantenendo i valori non ASCII legali in PDF 1.7 - L'escape XML per i pacchetti XMP elimina i caratteri di controllo non legali in XML 1.0, in modo che i metadati copiati da un documento sorgente danneggiato non possano più rendere l'intero stream di metadati non ben formato
- La conversione da data PDF a XMP valida che i campi data siano numerici e aggiunge un campo minuti mancante, prevenendo date ISO 8601 malformate negli XMP generati; sulle piattaforme non Windows il timestamp di fallback include ora l'orario del giorno invece della sola data
Version 2.16.0
Aggiunto (Added)
- La decodifica degli stream ora ricostruisce i predittori
/DecodeParms(predittori PNG 10-15 e predittore TIFF 2, ISO 32000-1 §7.4.4.4) dopo FlateDecode, rispettando/Colors,/BitsPerComponente/Columns; gli stream di oggetti compressi con un predittore — una scelta comune dei writer PDF 1.5+ — in precedenza mostravano byte differenziati, quindi gli oggetti che contengono erano silenziosamente invisibili alle scansioni di conformità e all'iniezione di marcatori
Corretto (Fixed)
- Il rilevamento di FlateDecode ora analizza il valore
/Filtercome nome o array invece di una corrispondenza su sottostringa, in modo che le catene di filtri a cascata e le occorrenze della parola all'interno di valori non correlati non inneschino più un gonfiaggio fasullo; le catene non supportate tornano ai byte grezzi come prima
Version 2.15.1
Corretto (Fixed)
- Lo scanner del dizionario ora salta le stringhe letterali, le stringhe esadecimali e i commenti bilanciando
<</>>(ISO 32000-1 §7.2.2), in modo che i dizionari contenenti valori come(A >> B)o una stringa esadecimale adiacente al delimitatore di chiusura non vengano più troncati durante l'analisi del trailer, del catalogo e della scansione di conformità - L'estrazione di stringhe letterali ora decodifica l'intero set di escape della Tabella 3 §7.3.4.2 —
\n \r \t \b \f, ottale\ddd, continuazioni di riga e normalizzazione EOL senza escape — invece di copiare verbatim la lettera di escape, ripristinando confronti corretti di/Producer,/GTS_PDFXVersione/ISO_PDFEVersionper i writer che usano escape ottali - Le stringhe letterali scritte dagli iniettori di marcatori ora eseguono l'escape di CR, LF e altri caratteri di controllo in modo che i valori sopravvivano byte per byte alla normalizzazione del fine riga lato lettore
Version 2.15.0
Corretto (Fixed)
- Gli aggiornamenti incrementali scritti dagli iniettori di marcatori PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA e PDF/VT e dai percorsi di firma PAdES e DSS ora preservano l'identificatore di file permanente del documento sorgente: il primo elemento
/IDdel trailer viene trasportato verbatim come richiesto da ISO 32000-1 §14.4 e solo il secondo elemento (in modifica) viene aggiornato; in precedenza entrambi gli elementi venivano rigenerati, in modo che i riferimenti esterni e i flussi di lavoro di validazione a lungo termine vedessero un'identità del documento diversa dopo ogni salvataggio - Le firme PAdES, l'iniezione DSS e i Document Time-stamp B-LTA ora trasportano in avanti il riferimento
/Infodel trailer sorgente (ISO 32000-1 §7.5.6), in modo che le proprietà del documento non scompaiano più dai pannelli del lettore dopo la firma; il trailer del Document Time-stamp guadagna anche l'array/ID - Il fallback
/Infodel trailer per i documenti con stream di riferimenti incrociati ora individua correttamente il dizionario dello stream XRef e preserva il numero di generazione del riferimento; in precedenza non corrispondeva mai su file PDF 1.5+ conformi, eliminando silenziosamente/Info
Version 2.14.4
Corretto (Fixed)
- La data
/Mdel dizionario firma scritta daTPdf.SignPadeseSignPadesBytesora include il prefisso obbligatorioD:e il marcatore offset UTCZrichiesti da ISO 32000-1 §7.9.4; i validatori rigorosi in precedenza rifiutavano l'ora di firma come stringa di data malformata
Version 2.14.3
Corretto (Fixed)
- Le ricerche di chiavi del dizionario nel lettore PDF condiviso ora corrispondono a token nome interi (ISO 32000-1 §7.3.5); in precedenza uno stream il cui dizionario elencava
/Length1prima di/Length(tipico per gli stream FontFile) veniva troncato al numero di byte errato, rendendo cieche silenziosamente le scansioni di conformità PDF/A, PDF/UA e altre che leggevano stream di font, CMap o metadati - Le ricerche del trailer
/Encrypt,/Root,/Sizee/Infonon corrispondono più a chiavi più lunghe che condividono lo stesso prefisso (come/EncryptMetadata) - L'espansione dello stream di oggetti non si fida più di un valore
/Ncorrotto o ostile: i valori non interi ora restituiscono 0 invece di un numero non inizializzato, e un limite superiore derivato da/Firstpreviene allocazioni eccessive durante la scansione di documenti malformati
Version 2.14.2
Corretto (Fixed)
- Gli iniettori di marcatori PDF/X, PDF/VT, PDF/UA, PDF/E e PDF/R ora copiano i documenti sorgente crittografati invariati invece di aggiungere sezioni di aggiornamento in chiaro; il comportamento precedente produceva file il cui ultimo trailer perdeva la voce
/Encrypt(ISO 32000-1 §7.5.6), in modo che i lettori conformi interpretassero erroneamente il corpo crittografato come testo in chiaro TPdf.SignPades,SignPadesByteseInjectPadesDssMarkersora generanoEPadesCryptoquando il documento sorgente è crittografato, invece di emettere silenziosamente un file corrotto o non verificabile; rimuovere la crittografia prima di firmare o incorporare il materiale DSS
Version 2.14.1
Corretto (Fixed)
TPdf.SignPadeseSignPadesBytesora compilano a posteriori tutti e quattro i campi/ByteRangedel dizionario firma; in precedenza gli ultimi tre campi rimanevano ai loro segnaposto zero, in modo che le firme prodotte dichiarassero un intervallo di byte vuoto e fallissero la verifica nei validatori conformi- I dizionari del Document Time-stamp PAdES B-LTA ricevono la stessa correzione di compilazione a posteriori di
/ByteRange ValidatePadesComplianceora accetta il layout di firma standard dove il gap dell'intervallo di byte contiene il valore esadecimale/Contents, e verifica che il secondo segmento dell'intervallo termini esattamente alla fine del file; in precedenza solo gli intervalli senza gap superavano il controllo di copertura
Version 2.14.0
Aggiunto (Added)
TPdf.ExportXFDFserializza ogni valore di campo modulo e annotazione su tutte le pagine in un documento XFDF (ISO 19444-1), emettendo<fields>per i valori gerarchici dei moduli e<annots>per tutti i sottotipi di annotazione supportati (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFlegge un documento XFDF nel PDF caricato, ricreando le annotazioni sulle pagine corrispondenti e applicando i valori dei campi alle loro annotazioni widget- Il record
TPdfAnnotationha guadagnato i campiName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), endpoint di linea, vertici di poligono/polilinea e gesture della lista di inchiostro, in modo che i round-trip XFDF preservino i metadati completi dell'annotazione - Il nuovo esempio
XfdfLabnei set demo di Delphi, C++Builder e Lazarus mostra il round-trip di esportazione/importazione
Version 2.13.6
Corretto (Fixed)
ValidatePdfAora tratta gli stream/Metadatadel catalogo senza/Type /Metadatao/Subtype /XMLcome metadati XMP mancanti tramitepvaiMissingXmpMetadata- I report di verifica preliminare PDF/A ora classificano
pvaiMissingXmpMetadatacome Metadati e raccomandano uno stream/Metadatadel catalogo con/Type /Metadata,/Subtype /XML, XMP non filtrato e marcatoripdfaid
Version 2.13.5
Corretto (Fixed)
ValidatePdfAora segnala le annotazioni Widget senza dizionario di aspetto e le annotazioni PDF/A-2 / PDF/A-3 che richiedono ma mancano di/APtramitepvaiAnnotationApDictViolation- I report di verifica preliminare PDF/A ora categorizzano
pvaiAnnotationApDictViolationcome contenuto che l'iniezione di marcatori non può riparare
Version 2.13.4
Corretto (Fixed)
ValidatePdfAora segnala le immagini inline PDF/A-2 e PDF/A-3 il cui valore/Io/InterpolateètruetramitepvaiImageDictionaryViolation, corrispondendo alla copertura del dizionario XObject Image esistente- I report di verifica preliminare PDF/A ora categorizzano
pvaiImageDictionaryViolationcome contenuto che l'iniezione di marcatori non può riparare
Version 2.13.3
Corretto (Fixed)
ValidatePdfAora segnala le immagini inline PDF/A-1 che usano filtri/LZWDecodeo abbreviati/LZWall'interno dei flussi di contenuto tramitepvaiInlineImageLzwForbidden, corrispondendo alla copertura delle immagini inline PDF/A-2 e PDF/A-3 esistente- Lo scanner dei filtri delle immagini inline ora avanza oltre i nomi di risorse iniziali come
/GS1, evitando blocchi durante la scansione di flussi di contenuto PDF/A-1 più ampi
Version 2.13.2
Aggiunto (Added)
TPdf.SetFocusedFormFieldTextscrive testo nel buffer di modifica del campo modulo attualmente focalizzato tramiteFORM_ReplaceSelection, simmetricamente aFocusedFormFieldText. Per i campi testo/combo AcroForm il valore viene confermato in/Valla perdita del fuoco e persiste; per i campi testo XFA la scrittura avviene solo nel buffer in memoria (PDFium non espone API pubbliche per riconciliare i valori XFA nel pacchetto dataset, quindi non persiste tra i salvataggi)- La piattaforma host JavaScript è ora collegata ogni volta che il motore V8 è disponibile, indipendentemente dal fatto che il documento sia XFA — in modo che JavaScript AcroForm incorporato (script a livello di documento, calcoli dei campi,
app.alert) possa eseguire. In precedenzam_pJsPlatformera collegato solo per i documenti XFA, lasciando silenziosamente disabilitato JS di AcroForm
Modificato (Changed)
- Il collegamento della piattaforma JavaScript è ora indipendente dalla decisione XFA in
InitializeFormFill— la tabellam_pJsPlatformviene costruita ogni volta cheV8FeaturesAvailableè vero, applicata dopo il cablaggio della versione/callback XFA invece di essere annidata al suo interno
Version 2.13.1
Aggiunto (Added)
- Nuovi eventi host espongono informazioni che i callback di compilazione moduli della v2.13.0 in precedenza ingoiavano:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Ogni evento assume per impostazione predefinita il comportamento no-op esistente quando non assegnato, quindi i host esistenti non sono interessati - La proprietà di sola lettura
TPdf.XfaFormPacketsrestituisce un'istantanea una-tantum di tutti i pacchetti XFA (TXfaPacketList), soddisfacendo i tipiTXfaPacket/TXfaPacketListprecedentemente dichiarati ma inutilizzati - I codici di errore PDFium specifici per XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTsono ora collegati ed esposti tramiteLastPdfError, sostituendo il generico "Unknown error" per i fallimenti di caricamento/layout XFA
Modificato (Changed)
FFI_DoURIActionWithKeyboardModifierora consultaOnXfaUriActionprima di eseguire tramite shell un URI da un campo XFA, dando all'host un veto (sicurezza: un campo XFA malevolo in precedenza poteva avviare URL arbitrari incondizionatamente). I gestori non assegnati preservano il comportamento predefinitoShellExecuteWDecodeFormFieldTypeora instrada i tipi di campo XFA tramiteIsXfaFormFieldpiuttosto che un caso esplicito a 8 rami, mantenendo l'enum allineato conFPDF_FORMFIELD_XFA_*per offset ordinale
Corretto (Fixed)
ValidatePdfAora segnala le dichiarazioni PDF/A-1 che usano stream di riferimenti incrociati PDF 1.5 o stream di oggetti con il nuovopvaiPdfA1Pdf15Structure, continuando a consentire gli stream di oggetti per PDF/A-2 e PDF/A-3
Version 2.13.0
Aggiunto (Added)
- Supporto runtime XFA (XML Forms Architecture) completo:
TPdf.InitializeFormFillora collega tutti i 14 callback version-2 diFPDF_FORMFILLINFO(FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) e allega unIPDF_JsPlatform, così unapdfium.dllabilitata XFA può eseguire il rendering e lo scripting di moduli XFA dinamici - Nuova unità
Lib\FPdfXfa.pasche dichiara le costanti XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) e i tipiTXfaPacket/TXfaSaveFormatprecedentemente solo citati nei commenti - Lettore di packet statici XFA su
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNamepiùGetXfaTemplate/GetXfaDatasets/GetXfaConfigestraggono i packet XFAtemplate,datasetseconfigcome XML grezzo senza richiedere un runtime abilitato XFA — utile per audit di conformità e migrazione dati - Sonde di capacità:
XfaFeaturesAvailableglobale, e per documentoTPdf.XfaRuntimeAvailable(seFPDF_LoadXFAè effettivamente riuscito) eTPdf.XfaStaticReadable(se le esportazioni del lettore di packet si risolvono) TPdfFormFieldTypeesteso confiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, conDecodeFormFieldTypeche mappa i nuovi valoriFPDF_FORMFIELD_XFA_*- Eventi host JavaScript su
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrleOnXfaRuntimeMissingconsentono all'host di personalizzare le finestre JS e la navigazione XFA, o di reagire quando un documento XFA non può eseguire il motore - Nuovo esempio Delphi
XfaLabche dimostra rilevamento XFA, estrazione dei packet, sonde di capacità e il percorso di fallback con runtime mancante
Modificato (Changed)
TPdf.LoadDocumentora pre-analizza l'input per i marcatori XFA (/XFAnel dizionario AcroForm, o/NeedsRenderingnel catalogo) e, quando li trova, seleziona automaticamentepdfium.v8.dllimpostandoEnableV8Engine := Trueprima che la libreria singleton venga caricata per la prima volta; una volta caricata unapdfium.dllnormale il processo non può cambiare, quindiOnXfaRuntimeMissingsegnala quel casoTPdf.GetPageCountora riflette il conteggio pagine che il motore XFA riporta tramiteFFI_PageEventdopo la ri-paginazione dinamica, invece del solo albero pagine PDF statico- Quando un documento XFA viene aperto ma il runtime non è disponibile,
InitializeFormFillora fissaversion=1exfa_disabled=1invece di richiedere la versione 2 con callback non assegnati, cosa che in precedenza rischiava un dereferenziamento di puntatore callback non valido
Version 2.12.2
Corretto (Fixed)
ValidatePdfAComplianceora segnala i namespace XMP personalizzati usati senzapdfaExtension:schemas, accettando comunque i metadatipdfaidstandard senza dichiarazioni di estensione- La validazione dei file incorporati PDF/A-3 ora richiede sia le voci
/Fche/UFdi livello superiore sui dizionari filespec e ignora le chiavi stream/EFnidificate quando verifica quei nomi
Version 2.12.1
Corretto (Fixed)
ValidatePdfAComplianceora decodifica i token di nome PDF con escape prima di confrontare JavaScript, LZWDecode, Type1 e i relativi nomi proibiti, in modo che i nomi offuscati ma semanticamente identici vengano segnalati correttamente- I controlli delle immagini inline PDF/A ora rifiutano i valori
/Filtere/Fche usano/LZWDecode, abbreviato/LZW, o/Crypt, inclusi i moduli array e nome con escape - La validazione PDF/A ora segnala gli stream di metadati con filtri stream proibiti, i profili ICC OutputIntent il cui conteggio dei componenti
/Nè mancante o incoerente, e le specifiche di file incorporati PDF/A-3 con/AFRelationshipmancante o non valido
Version 2.12.0
Aggiunto (Added)
- Le richieste HTTP TSA ora impostano timeout espliciti di 30 s per ogni fase (risoluzione/connessione/invio/ricezione) tramite
WinHttpSetTimeouts, così un'autorità di timestamp lenta o irraggiungibile non può bloccare indefinitamente il thread di firma invece di affidarsi ai default impliciti di WinHttp - Derivazione del nonce per richiesta per le richieste di timestamp PAdES B-T / B-LTA quando il chiamante omette
TPadesSignOptions.Nonce: una piega SHA-256 di contatore monotono + orologio di sistema +GetTickCount64+ id di processo sostituisce il precedente fallback fisso$100000000, così due richieste emesse nello stesso millisecondo non riusano più lo stesso nonce anti-replay PdfInflateora limita l'output decompresso a 256 MiB per impedire a un flusso compresso zlib di esaurire la memoria su un input ostile o corrotto (una "bomba zlib"); il limite è generoso per qualsiasi flusso PDF reale
Modificato (Changed)
- La fusione degli overlay di
TPdfView(evidenziazione ricerca, selezione testo, parola di lettura, selezione a due pagine) non usa piùGetPixel/SetPixelVper pixel; il rettangolo ora viene fuso tramite unaTBitmapfuori schermo a 32 bpp eScanLinein un unico passaggio, eliminando migliaia di attraversamenti GDI kernel per paint e rendendo reattive le selezioni estese FPdfAsn1.TDerReader.ReadIntegerora rifiuta campi INTEGER più lunghi di 8 byte (e negativi a 8 byte il cui bit di segno richiederebbeshl >= 64), restituendo 0 invece di calcolare un valore errato tramite comportamento di shift indefinito su input ASN.1 CMS/PAdESParseTimeStampRespnon restituisce più il nonce della richiesta comeTPadesTimestamp.Nonce; finché non arriva il walker TSTInfo che verifica il nonce restituito, il campo resta 0 per segnalare "non verificato" invece di dare ai chiamanti una falsa sicurezza che la risposta di timestamp sia fresca
Corretto (Fixed)
PointsToPixelsrestituiva l'input invariato per ogni DPI: il divisore eraPointsPerInch(la costante 72) invece del letterale 72, riducendo la formula aResult := Points. Qualsiasi chiamante esterno che dimensiona in punti→pixel dispositivo tramite questo helper ora ottiene il correttoPoints × PixelsPerInch / 72PdfMaxObjNumsottostimava sui documenti che usano flussi di oggetti (ObjStm PDF 1.5+): gli oggetti compressi dentro un/ObjStmnon portano il marcatoreN 0 obj, quindi la scansione dei byte grezzi li mancava, e gli iniettori che allocanoMaxObj+1per nuovi oggetti potevano collidere con i membri nascosti di ObjStm e corrompere silenziosamente il file. La scansione ora espande prima i flussi di oggetti, così ogni numero di oggetto è visibileInjectPdfAMarkersnon forgia più un'asserzione di conformità PDF/A su un documento crittografato: PDF/A (ISO 19005-1 §7.1) vieta la crittografia, e l'iniettore in precedenza copiava la sorgente con i marcatori anche se la validazione immediatamente successiva l'avrebbe rifiutata. QuandoHasEncryptè impostato la sorgente ora viene passata invariata. Il normale percorsoTPdf.SaveAsPdfArimuove già la crittografia (saRemoveSecurity) prima dell'iniezione, quindi questo riguarda solo i chiamanti direttiPdfReadStreamBytesora rifiuta un/Lengthmaggiore dell'intero file prima di allocare il buffer di risultato, chiudendo un percorso di allocazione anticipata su una lunghezza indiretta corrotta o ostile
Version 2.11.0
Aggiunto (Added)
- Il record PDFium
FPDF_FILEHANDLERora dichiara i suoi sei callback (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) come campi reali invece di commenti, in linea con il layout dell'header C. I callback di trasferimento file FFI XFA (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) che restituiscono o consumanoPFPDF_FILEHANDLERrestano non implementati nel layer Pascal di form-fill, ma il tipo ora è strutturalmente corretto per qualsiasi futuro percorso di submit/upload XFA - Caricamento e scaricamento della libreria PDFium (
LoadLibrary/UnloadLibrary) ora sono serializzati da una sezione critica globale di processo, così due thread workerTPdfFuture<T>(o un worker che gareggia con il thread principale) non possono entrambi osservarePDFiumLibrary=0e fare doppio binding, o liberare la DLL mentre un altro thread è a metà del binding - Una sezione
initialization/finalizationora chiamaUnloadLibraryallo scaricamento dell'unità, garantendo cheFPDF_DestroyLibraryvenga eseguito (join dei thread worker, smaltimento isolate V8, teardown font/cache) invece di affidarsi all'OS per reclamare la DLL
Modificato (Changed)
TPdf.SetActiveora assorbe qualsiasi eccezione durante il caricamento (in precedenza soloEPdfError), così un errore di flusso o una violazione di accesso durante la configurazione di moduli/pagine lasciaActive=Falseinvece di un componente parzialmente caricato con stato indeterminato- Codifica caratteri coerente per gli argomenti chiave dei metadati PDFium:
TPdf.GetMetaTextora usa la stessa suddivisione FPCAnsiString/ DelphiUTF8EncodediGetViewerPreferencee dei percorsi di caricamento, invece di un castAnsiString(Tag)nudo - Deduplicati gli helper
BytesToAnsi,AnsiToBytes,WriteByteseWriteStr:FPdfCompressora li importa daFPdfPdfCommon(i suoi aliasWriteBytesToStream/WriteAnsiToStreamsono ritirati) e l'overload ridondante a tre argomentiBytesToAnsiinFPdfPdfaviene rimosso.FPdfAsn1mantiene di proposito la propria copia locale per tenere il layer crittografico libero dall'unità del layer di conformità
Corretto (Fixed)
- Perdita di risorse in
TPdf.LoadDocument(file, memoria,TBytes,TMemoryStream, flusso personalizzato) eTPdf.CreateDocument: seInitializeFormFilloReloadPagegeneravano un'eccezione dopo cheFPDF_LoadDocument/FPDF_CreateNewDocumenterano riusciti, l'handle nativoFPDF_DOCUMENTveniva perso perchéFActiveera ancora False in quel punto. Ogni percorso ora avvolge la configurazione post-caricamento intry/excepte chiude il documento in caso di errore, lasciando il componente pulitamente inattivo - Diagnostica di caricamento DLL PDFium più amichevole:
CheckLoadLibraryrilevaERROR_BAD_EXE_FORMAT(193) e segnala una mancata corrispondenza di architettura 32/64-bit indicando il buildDLLs/Win32oDLLs/Win64corrispondente, invece di inoltrare solo l'errore OS generico.CheckGetProcAddressora dichiara che lapdfium.dlldistribuita è più vecchia del binding quando manca un'esportazione richiesta, invece del nudo testo OS "procedura non trovata"
Version 2.10.1
Risolto (Fixed)
- Standardizzazione del sid del SignerInfo PAdES: l'identificatore del firmatario ora usa la forma
issuerAndSerialNumberdi RFC 5652 §5.3 (issuer Name + serialNumber, entrambi estratti letteralmente dal DER del certificato del firmatario), in sostituzione della precedente forma non standardsubjectKeyIdentifier+ placeholder SHA-256 del certificato intero che Adobe Acrobat e gli altri validatori conformi rifiutavano. Un nuovo analizzatore DER del TbsCertificate (ExtractIssuerAndSerial) legge la SEQUENCE issuer e l'INTEGER serial come byte TLV grezzi — i numeri di serie superano comunemente il rangeInt64, quindi il TLV grezzo è obbligatorio. La formasubjectKeyIdentifierresta solo come fallback quando l'analisi del DER del certificato fallisce
Modificato (Changed)
TCmsSignerId.SerialNumber: Int64è stato sostituito daSerialDer: TBytes(il TLV serialNumber grezzo). Il costruttore CMS incorpora il TLV tagliato letteralmente inIssuerAndSerialNumber, evitando un overflow diInt64sui seriali CA a 20 byte (limite superiore di RFC 5280 §4.1.2.2)
Version 2.10.0
Aggiunto (Added)
- Validazione a lungo termine PAdES B-LT: quando
TPadesSignOptions.Level >= plB_LT,SignPadesBytesaggiunge un aggiornamento incrementale che porta un dizionario/DSScon il certificato del firmatario e la catena intermedia completa (la radice autofirmata è esclusa secondo RFC 5652 §10.2.3), più il marcatore/Extensions /ESICdi livello 1 (EN 319 142-1 §5.4.2) - Marca temporale di archiviazione PAdES B-LTA: quando
Level >= plB_LTAeTsaUrlè impostato, viene aggiunto un dizionario di firma Document Time-stamp (/SubFilter /ETSI.RFC3161) il cui/ByteRangecopre l'intero file; il marcatore ESIC è promosso a livello 2. Questo completa i quattro livelli baseline PAdES (B-B, B-T, B-LT, B-LTA) - Raccolta della catena di certificati:
ResolveWinSignerora chiamaCertGetCertificateChaine popolaTPadesResolvedSigner.ChainCertDercon i certificati CA intermedi, così che/DSS /Certsdel B-LT porti ogni certificato necessario per convalidare la firma senza ricerche esterne.CertFreeCertificateContextè ora vincolato, chiudendo la perdita di un contesto per firma segnalata nella v2.8.0 - Flusso di lavoro di integrazione PDF/A:
TPdf.SignPadesWithPdfAconverte prima il documento in PDF/A (il livello più alto che la libreria emette oggi) poi applica la firma PAdES richiesta — il pattern del contenitore di archiviazione a lungo termine raccomandato da EN 319 142-1 Allegato A.7
Version 2.9.0
Aggiunto (Added)
- Marca temporale attendibile PAdES B-T:
TPadesSignOptionsguadagna i campiLevel,TsaUrleNonce. QuandoLevel >= plB_TeTsaUrlè impostato,SignPadesBytesestrae il valore della firma dal CMS costruito, richiede una marca temporale RFC 3161 su di esso e incorpora il TimeStampToken restituito come attributo non firmatosignature-time-stampdel SignerInfo — il passo B-T a tempo attendibile (EN 319 142-1 §6.3 requisito o) FPdfTsa: client RFC 3161 multipiattaforma —BuildTimeStampReq(versione 1, messageImprint SHA-256 sul valore della firma, nonce, certReq=true),ParseTimeStampResp(accetta PKIStatus 0/1, rifiuta 2+, estrae il TimeStampToken ContentInfo letteralmente) eRequestTimestamp(flusso unico di costruzione+POST+analisi).PadesTsaAvailableabilita la funzionalità su piattaforme senza backend HTTPFPdfTsaWin: backend WinHttp di Windows, vincolato dinamicamente da winhttp.dll (zero nuove dipendenze in fase di compilazione; HTTPS negoziato dall'archivio certificati di Windows). Rispecchia il pattern di binding dinamico diFPdfCryptoWinFPdfCms:ExtractSignatureValuepercorre un CMS costruito per recuperare gli ottetti di firma grezzi (l'input di hash della TSA), eAddSignatureTimestampToCmsricostruisce il ContentInfo con un nuovounsignedAttrs [1](0xA1) che porta l'attributo di marca temporale. Il validatore di fase 1 riconosce il risultato come firma B-T
Version 2.8.0
Aggiunto (Added)
- Stack di firma PAdES B-B: quattro nuovi blocchi costitutivi in Pascal puro/multipiattaforma (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) più un backend CNG di Windows (FPdfCryptoWin) permettono aTPdf.SignPades/SignPadesToStreamdi produrre una firma PAdES B-B end-to-end. Il certificato del firmatario viene risolto tramite impronta SHA-1 dall'archivio “MY” dell'utente corrente; RSA-PSS (consigliato), RSA PKCS#1 v1.5 ed ECDSA sono tutti supportati tramiteNCryptSignHash FPdfSha256: SHA-256 FIPS 180-4 autonomo (Init/Update/Final + assistenti one-shot). FPC 3.2.2 non fornisce alcuna unit SHA-2, quindi la libreria ne possiede una per mantenere ogni percorso di codice CMS su un unico tipoTSHA256Digestsenza diramazioni RTLFPdfAsn1: encoder DER (TDerWriter) e reader (TDerReader) che coprono SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/tag context-specific, con la codifica a lunghezza definita e la gestione dei tag IMPLICIT che CMS richiedeFPdfCms: costruttore CAdES SignedData (BuildSignedData) che emette gli attributi firmati content-type, message-digest e signing-certificate-v2 che la baseline PAdES impone, con signing-time e commitment-type-indication opzionali. Il digest di signedAttrs è calcolato sulla forma con tag SET (0x31) e riemesso con il tag IMPLICIT [0] (0xA0) secondo RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: astrazione del backend crittografico conPadesCryptoAvailable/ResolvePadesSigner, e l'implementazione Windows che vincola crypt32.dll / ncrypt.dll dinamicamente (nessuna nuova dipendenza di DLL in fase di compilazione). Le firme ECDSA sono ricodificate dalla forma IEEE P1363 r¦s di Windows nella forma DERECDSA-Sig-Valueche CMS richiedeSignPadesBytes: iniezione di firma a livello di byte — riserva uno slot hex/Contentsa larghezza fissa, calcola il/ByteRangecoprente, digerisce il documento, costruisce e incorpora il CMS e aggiunge l'aggiornamento incrementale. Il validatore (v2.7.0) riconosce l'output come firma PAdES B-B
Version 2.7.0
Aggiunto (Added)
- Validatore strutturale PAdES (ETSI EN 319 142-1 V1.2.1): la nuova unit
FPdfPadese il metodoTPdf.ValidatePadesispezionano i dizionari di valore di firma raggiungibili da/ByteRange, percorrono ilSignedDataCMS dentro/Contentsabbastanza a fondo da confermare la forma detached CAdES, e rilevano i quattro livelli baseline (B-B, B-T, B-LT, B-LTA) oltre ai dizionari Document Time-stamp (/SubFilter /ETSI.RFC3161) - Set di problemi a livello di clausola PAdES: 26 enumerati
ppei*coprono l'accettabilità del/SubFilter(adbe.pkcs7.sha1eadbe.x509.rsa_sha1segnalati come vietati), la copertura del file da parte di/ByteRange, il divieto di/Cert, la forma delSignedDataCMS (firmatario singolo, eContent detached, range di versione), gli attributi firmati richiesti (content-type,message-digest,signing-certificate/v2), i digest vietati (MD5, SHA-1), l'esclusione reciproca di/Reasonvscommitment-type-indication(requisito d), il requisito B-T di tempo attendibile, il/DSS+/Certs+ marcatore ESIC livello 1 del B-LT, e il Document Time-stamp + marcatore ESIC livello 2 del B-LTA - Iniettore DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamaggiungono a una copia del documento un aggiornamento incrementale che porta un dizionario/DSS(con array di stream/Certs,/OCSPs,/CRLs) e il marcatore/Extensions /ESIC(livello 1 o 2), preservando i byte originali — il passo di incorporamento del materiale di validazione B-LT/B-LTA (clausola 5.4.2) - Fase multipiattaforma, senza dipendenze: il validatore e l'iniettore sono in Pascal puro e funzionano su ogni IDE supportato (Delphi, Lazarus, FPC, C++Builder); non è richiesto alcun backend crittografico per questo rilascio, e non è introdotta alcuna nuova dipendenza DLL
Version 2.6.0
Modificato (Changed)
- Deduplicazione inter-standard: altre sette funzioni helper duplicate (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) sono state rimosse dalle singole unit di standard e consolidate in
FPdfPdfCommon, riducendo di circa 300 righe l'onere di manutenzione da copia-incolla - Qualità di PreflightReport: i problemi di content-class di PDF/X e PDF/E che prima ricadevano nella categoria generica del “marcatore mancante” ora portano categorie Content/Metadata/Security accurate e raccomandazioni specifiche per clausola (~15 enumerati tra i due standard)
- Copertura dei test PDF/E e PDF/R: altri sei enumerati con copertura zero hanno ottenuto test positivi (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Correzione di build Lazarus:
Tests.PdfVT(una unit DUnitX esclusiva di Delphi aggiunta in v2.5.x) è ora esclusa dal progetto Lazarus per ripristinare la compilazione
Version 2.5.3
Aggiunto (Added)
- Completezza dell'OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemesegnala un OutputIntent il cui/Snon è/GTS_PDFX;pvviOutputIntentMissingIdentifiersegnala un/OutputConditionIdentifiermancante - Esenzione Reference XObject per PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddennon si attiva più per un filePDF/VT-2, che può usare legalmente Reference XObject su una base X-5g/5pg - Validazione dei caratteri della boundary MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharsegnala una boundary i cui caratteri cadono fuori dal set bchars o la cui lunghezza supera 70
Risolto (Fixed)
InjectPdfVTMarkersora scrive Info/CreationDatee/ModDatedalle opzioni di salvataggio, così che il file prodotto superiValidatePdfVTCompliancesenza un falsopvviInfoModDateMismatch(l'iniettore prima riscriveva le date XMP ma lasciava obsolete le date del dizionario Info)
Version 2.5.2
Aggiunto (Added)
- Consistenza dell'Info
/ModDate(§6.3 NOTE 2, base PDF/X-4):pvviInfoModDateMismatchsegnala un/ModDatedel dizionario Info che, dopo la normalizzazione da data PDF a data XMP, non è uguale axmp:ModifyDate - Conformità dei chunk inline PDF/VT-2s (Allegato A.2): il validatore MIME ora esegue
ValidatePdfVTCompliancesu ogni parteapplication/pdfinline e segnala un corpo non-PDF/VT tramitevtmviInlinePdfNotPdfVT
Version 2.5.1
Aggiunto (Added)
- Validazione del chunking DParts (ISO 16612-2 §6.5 Tabella 4):
pvviDPartsBadChunkingsegnala un array/DPartsi cui sotto-array non finali non hanno esattamente 8192 voci o il cui ultimo sotto-array cade fuori da 1..8192 - Consistenza del RecordLevel tra stream (Allegato A.2): il validatore MIME PDF/VT-2s ora estrae il
/RecordLeveldi ogni PDF inline e segnala disaccordi tramitevtmviRecordLevelMismatch, completando il controllo NodeNameList esistente - Indicazioni di oggetti grafici ricorrenti (§6.7):
pvviGtsScopeInvalidValuesegnala un/GTS_Scopeal di fuori di {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelsegnala/Recordsenza un/RecordLevel;pvviGtsXidNotUuidsegnala un/GTS_XIDche non è una URI uuid: RFC 4122;pvviGtsEnvMissingsegnala un/GTS_Envmancante quando/GTS_Scopeè Stream o Global (§6.7.4) - Rilevamento di riferimenti in avanti MIME (Allegato A.2):
vtmviForwardReferencesegnala un PDF inline che cita un nome file (tramite/EF /F) non introdotto da una parte di allegato precedente nello stream
Risolto (Fixed)
ExtractNodeNameListFromPdfeExtractRecordLevelFromPdfinFPdfPdfvtMimehanno risolto un errore off-by-one ricorrente in cui l'offset in base 1 restituito daAnsiFindKeyveniva trattato come offset di byte assoluto nel PDF espanso
Version 2.5.0
Aggiunto (Added)
- Metadati Document Part (DPM) di PDF/VT (ISO 16612-2 §6.6):
TPdfVTSaveOptionsha guadagnatoDpmEntrieseDpmTargetcosì che un writer possa allegare un dizionario/DPMal nodo DPart sintetizzato, con validazione dei nomi di chiave rispetto alla regola di prefisso di seconda classe dell'Allegato E e alle regole NMTOKEN / unicità / formaGTS_Manageddel §6.6 sul lato validatore - Scambio tramite streaming PDF/VT-2s (Allegato A): la nuova unit
FPdfPdfvtMimefornisceBuildPdfVT2sStreameValidatePdfVT2sStreamper la busta MIMEmultipart/mixedche trasporta chunk PDF/VT inline più profili ICC in allegato, con la regola di ordinamento dell'intestazioneX-PDFVT-Stream-version: 1e il controllo di consistenzaNodeNameListtra stream TPdf.ValidatePdfVTora esegue un conteggio autorevole delle azioni JavaScript tramiteFPDFDoc_GetJavaScriptActionCount, completando la scansione del nome/JavaScripta livello di byte
Risolto (Fixed)
- Correttezza del
Trappeddi PDF/VT sulla base PDF/X-4: il valore enumptvUnknownè rimosso (PDF/X-4 vieta/Unknown),ptvUnspecifiedè normalizzato a/Falsein scrittura (un/Trappedmancante è anch'esso vietato), e un nuovo problemapvviTrappedInvalidsegnala un valore assente oUnknown ValidatePdfVTComplianceora espande gli stream di oggetti (PdfExpandObjectStreams) prima della scansione, così che un dizionario catalog, OutputIntent o Metadata memorizzato dentro un ObjStm compresso (PDF 1.5+, tipico dei produttori PDF/X-4) sia raggiungibile dalle ricerche a livello di byte
Modificato (Changed)
- PDF/VT-1 ora ereda le prohibizioni di contenuto PDF/X-4 complete:
pvviAcroFormForbidden(/AcroFormo/XFA),pvviAdditionalActionsForbidden(catalog/AA),pvviMissingTrimBoxepvviReferenceXObjectForbidden(Reference XObject, solo X-5g/5pg) - Deduplicazione inter-standard:
BuildDictObj,IccComponentCount, il profilo ICC sRGB incorporato (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumePdfExpandObjectStreamssono stati promossi da copie locali triplicate inFPdfPdfa/FPdfPdfx/FPdfPdfvta una sola sede canonica inFPdfPdfCommon; il letterale ICC di 3144 byte ora esiste esattamente una sola volta nella base di codice
Version 2.4.0
Risolto (Fixed)
InjectPdfUaMarkersnon perde più il riferimento/Infodel trailer su base cross-reference-stream: la funzione localeSourceTrailerInfoRef(che mancava del fallback per xref-stream) è stata sostituita da quella condivisaPdfSourceTrailerInfoRef(promossa dalla copia PDF/A che includeva il fallback a partire da v2.0.0)- La funzione condivisa
PdfReadStreamBytesora gestisce i riferimenti indiretti/Length N G R(portati dalla copia locale PDF/A), pertanto i validatori PDF/VT, PDF/R e PDF/E non leggono più in modo errato né saltano i flussi di metadati XMP prodotti da strumenti che utilizzano una Length indiretta (Acrobat, Ghostscript)
Modificato (Changed)
- Deduplicazione inter-standard: le copie locali di
PdfReadTrailerinFPdfPdfaeFPdfPdfx, le copie locali diSourceTrailerInfoRefinFPdfPdfaeFPdfPdfua, e la copia locale diPdfReadStreamBytesinFPdfPdfasono state tutte rimosse — le versioni condivise diFPdfPdfCommonsi applicano ora ovunque; ciò elimina circa 330 righe di codice duplicato e azzera l'onere di manutenzione per tenere sincronizzate le copie - Risoluzione del debito di test per PDF/X: sette enum di content-class che in precedenza avevano copertura zero hanno ottenuto test positivi (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Modificato (Changed)
- La risoluzione del debito di test per PDF/A continua: altri tre enum con copertura zero hanno ottenuto test positivi;
pvaiForbiddenRenderingIntent(§6.2.9) segnala un nom rendering-intent non standard in un content stream;pvaiJpeg2000Violation(§6.2.2) segnala un'immagine JPXDecode con/NumComponentsal di fuori di {1,3,4} nel Part 2;pvaiInlineImageLzwForbidden(§6.1.10) segnala un'immagine inline che utilizza il filtro LZW nel Part 2
Version 2.2.0
Modificato (Changed)
- Test di regressione per cross-reference-stream: l'esistente
Validate_XrefStreamTrailer_DetectsConformanceora verifica anche che il riferimento catalog/Metadatasia risolto e che l'XMPpdfaid:partsia letto su una base di xref-stream (non solo/Root+/ID); un nuovo testInjectPdfA_XrefStreamBase_RoundTripsprotegge il percorso xref-stream dell'iniettore aggiunto nella v2.0.0; due test cross-standard (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) verificano che i validatori PDF/E e PDF/R non rifiutino più i PDF con xref-stream come non analizzabili - Chiusura del debito di test per PDF/A:
Validate_MinimalPdf_FlagsRequiredMarkersasserisce che un PDF minimo nudo attivapvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataepvaiMissingXmpDates— colmando il divario di simmetria con i validatori PDF/E e PDF/X che avevano già test equivalenti; altri due enum a copertura zero hanno ottenuto test positivi:pvaiUnembeddedFontepvaiSubsetMissingCidSet
Version 2.1.0
Corretto (Fixed)
- PDF/E è stato inavvertitamente escluso dalla correzione del cross-reference-stream della v2.0.0: sia
InjectPdfEMarkerscheValidatePdfECompliancechiamavano ancoraPdfReadTrailersenzaAcceptXrefStream, pertanto l'iniettore PDF/E falliva silenziosamente sull'output PDF 1.5+ (impostazione predefinita diSaveAsCopydi pdfium); entrambi i punti di chiamata ora passanoTrue - Il fallback cross-reference-stream condiviso di
PdfReadTrailerora include la guardia/Type /XRefche le copie locali di PDF/A e PDF/X avevano già, in modo che un offsetstartxrefcorrotto che punta a un dizionario non correlato fallisca in modo pulito invece di essere analizzato erroneamente come trailer - Il risolutore di riferimenti indiretti
/LanginValidatePdfUaCompliance(v2.0.0) era irraggiungibile:PdfFindObjDicttrova solo dizionari<<, ma un oggetto stringa/Langè(...)o<...>senza dizionario; sostituito con una scansione diretta del corpo dell'oggetto che individua il token stringa
Modificato (Changed)
- Sette duplicati helper inutilizzati (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) che erano copie identiche a livello di byte delle versioni condivise di
FPdfPdfCommonsono stati rimossi daFPdfPdfaeFPdfPdfua— le versioni condivise si applicano ora ovunque tramiteuses
Version 2.0.0
Corretto (Fixed)
- Fallimento silenzioso cross-standard: l'helper condiviso
PdfReadTrailer(utilizzato dagli iniettori di marcatori e validatori per PDF/UA, PDF/X, PDF/VT e PDF/R) ora accetta un parametroAcceptXrefStreame ripiega sul dizionario degli oggetti cross-reference-stream quando non è presente la parola chiavetrailer(PDF 1.5+); in precedenza, l'outputSaveAsCopydi pdfium (che utilizza un cross-reference stream) causava il fallimento silenzioso di ogni iniettore di marcatori — i byte di origine venivano copiati senza modifiche e la chiamata restituiva comunque successo; il validatore PDF/R-1.0 (la cui base PDF 2.0 è sempre un cross-reference stream) era di fatto inattivo; l'implementazione matura del validatore PDF/A è stata trasferita nell'helper condiviso in modo che ogni standard ne tragga vantaggio - La scansione del dizionario trailer in
InjectPdfUaMarkerseInjectPdfAMarkersora utilizzaPdfDictEndche tiene conto della profondità invece di una semplice ricerca di>>, in modo che un trailer contenente un dizionario nidificato (ad esempio/Encrypt << ... >>) non venga più interrotto prima di una voce/Infofinale
Modificato (Changed)
TPdf.ValidatePdfUaora sopprime il grossolanopvuaiFontNotEmbeddeda livello di byte quando il precisopvuaiPdfiumFontNotEmbeddeddel modello a oggetti Pdfium si è già attivato, in modo che il report preliminare non contenga più due righe quasi duplicate per incorporare i font per lo stesso difettopvuaiLangInvalidFormat(§7.2) ora risolve un riferimento indiretto/Lang(N 0 R) al suo oggetto stringa e ne valida il contenuto, in modo che un tag di lingua a cui si fa riferimento indirettamente non sia più un punto cieco
Version 1.99.0
Corretto (Fixed)
pvuaiLangInvalidFormat(§7.2) non concede più un pass gratuito alle stringhe/Langcodificate in esadecimale: le coppie UTF-16BE (con un BOMFE FF) e le stringhe esadecimali ASCII nude vengono ora decodificate e sottoposte allo stesso controllo grammaticale BCP 47 delle stringhe letterali(...), in modo che una stringa/Langesadecimale non valida venga rilevata, mentre una conforme (ad esempio un UTF-16BEen-US) non rischia più di essere segnalata
Modificato (Changed)
pvuaiFontMissingToUnicode(§7.21.7) ora esenta/MacExpertEncodinginsieme a/WinAnsiEncodinge/MacRomanEncoding, in corrispondenza con le quattro condizioni di esenzione elencate nella clausola
Version 1.98.0
Aggiunto (Added)
pvuaiNeedAppearancesTrue(§7.18.4) segnala un AcroForm il cui flag/NeedAppearancesè true, impedendo il blocco affidabile delle apparizioni dei widget e impedendo alle tecnologie assistive di associarle all'albero della struttura; portato dal validatore PDF/A e vincolato alla presenza di/AcroFormper restringere la superficie di scansione
Modificato (Changed)
- Regressione del corpus veraPDF: collegate le coppie pass+fail di §7.20 Reference-XObject e le coppie pass+fail di §7.21.4.2 subset CharSet/CIDSet in
Live_Corpus_ValidatePdfUaMatchesConformance; i campioni pass di §7.21.7 ToUnicode-forbidden-value e §7.18.6.2 media-clip sono stati collegati anche come guardie contro i falsi positivi (i loro campioni fail utilizzano layout di dizionario che la scansione a livello di byte non rileva, quindi viene collegato solo il lato pass) - L'elenco delle asserzioni pass-path del corpus ha ottenuto 15 nuove guardie a zero falsi positivi, in modo che ogni controllo attivo di struttura e a livello di byte
pvuai*sia ora esercitato rispetto a campioni conformi (in precedenza solo circa 30 dei 60 problemi attivi erano protetti); la guardiapvuaiLangInvalidFormatè stata deliberatamente omessa perché il verificatore a livello di byte segnala in modo conservativo le stringhe/Langcodificate in esadecimale che non può decodificare
Version 1.97.0
Corretto (Fixed)
- Rafforzamento di
ValidatePdfUaStructureElements: il percorso della catena parentaleEnclosingTableora trasporta un contatore di salti (limitato dal numero di elementi), in modo che un cicloParentIndexmalformato su un array sintetico di elementi di struttura non possa più bloccare il chiamante; l'allocazione dell'array di ID marked-content inValidatePdfUaPageContentTaggingè ora limitata a un milione di voci, prevenendo un'allocazione multi-GB su unMarkedContentIDmalformato o dannoso
Modificato (Changed)
- Il commento di documentazione dell'enum
pvuaiOrderedListMissingListNumberingdescrive ora accuratamente ciò che fa il controllo: segnala un elementoLil cui valore diListNumberingè al di fuori del set descritto nella Tabella 347 di ISO 32000-1 (un attributo assente non viene segnalato); il commento precedente implicava che rilevasse anche le liste ordinate mancanti dell'attributo, cosa che l'implementazione non fa - I due campioni di errore del corpus per il mismatch di WMode
7.21.3.3-t02sono ora collegati inLive_Corpus_ValidatePdfUaMatchesConformance— a partire dalla v1.95.0 lo stream CMap viene decompresso con FlateDecode, quindi il confronto tra dizionario e contenuto viene ora eseguito su un lato leggibile; il commento obsoleto “not wired” è stato rimosso
Version 1.96.0
Aggiunto (Added)
- Coerenza cross-standard:
TPdf.ValidatePdfUaottiene due controlli portati dal validatore PDF/A;pvuaiAnnotationFlagsViolation(§7.18.1) segnala un'annotazione non esente che contiene il flag Hidden / Invisible / NoView, che interrompe il flusso di lettura delle tecnologie assistive;pvuaiActionTargetMissing(§7.18.5) segnala un'azione GoToR / URI / SubmitForm a cui manca la chiave di destinazione richiesta (/F+/D, /URI, /F), lasciando il collegamento inutilizzabile per le tecnologie assistive
Corretto (Fixed)
- Unione dell'albero della struttura cross-page: il ciclo di accumulo
AllElemsinTPdf.ValidatePdfUaora ricollega ilParentIndexdi ciascun elemento dall'array locale di pagina all'array unito; senza questo passaggio, gli elementi figli della pagina 2 mantenevano un indice locale che puntava alla sezione della pagina 1, corrompendo silenziosamente ogni controllo dipendente da ParentIndex (struttura di tabelle/liste, conteggio dei figli H di §7.4.4, EnclosingTable) - Analisi di RoleMap:
PdfReadRoleMapPairsnon interrompe più l'intera scansione chiave/valore quando un valore è un riferimento indiretto (N 0 R) o un array ([...]) — entrambe forme valide di RoleMap secondo ISO 32000-1 14.8.5.1; ora salta solo quella voce (Continue) invece di fare unBreak, eliminando i falsi positivi dipvuaiRoleMapUnresolvedsui tipi mappati dopo una voce indiretta o array
Modificato (Changed)
FPdfPreflightReport: 18 valori attivi diTPdfUaValidationIssueche in precedenza ricadevano nella categoria generica “missing marker” e nella relativa raccomandazione ora mostrano categorie accurate (Structure / Content / Metadata / Security) e raccomandazioni specifiche per clausola; corretto anche l'errore di battiturapuaNone / pua1→pucNone / puc1inPDFSpecComplianceMatrix.md
Version 1.95.0
Modificato (Changed)
- Passaggio di richiamo e robustezza per
TPdf.ValidatePdfUa: il controllo §7.21.3.3pvuaiCMapWModeMismatche il controllo §7.21.7pvuaiToUnicodeForbiddenValueora decomprimono gli stream CMap / ToUnicode compressi conFlateDecodeprima della scansione (in precedenza venivano giudicati solo gli stream non compressi, un noto falso negativo); gli helper condivisiPdfInflate/PdfReadAndDecodeStreamsono stati promossi daFPdfPdfa/FPdfPdfxaFPdfPdfCommonin modo che ogni unità di conformità condivida una singola copia
Aggiunto (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2) segnala unFontDescriptordi sottoinsieme Type 1 che contiene una chiave/CharSetil cui valore stringa è vuoto — l'esistentepvuaiSubsetMissingCharSetintercettava solo una chiave mancante; un/CIDSetvuoto non viene segnalato, poiché un font senza CID può legittimamente contenere una bitmap vuota
Version 1.94.0
Aggiunto (Added)
- Il secondo controllo di
TPdf.ValidatePdfUaha colmato sei lacune ISO 14289-1 emerse da una revisione clausola per clausola e da una nuova scansione delle API native di Pdfium già integrate ma non utilizzate dal percorso PDF/UA;pvuaiHeadingFormatInvalid(§7.4.3) segnala tag di intestazione definiti dall'utente che iniziano con H ma contengono separatori, spazi o numeri romani anziché pure cifre arabe;pvuaiMissingDocumentOutline(§7.17, raccomandato) segnala un documento multipagina che non contiene una struttura di segnalibri (i documenti a pagina singola sono esenti);pvuaiStructElementLangInvalid(§7.2) segnala un valore/Langdell'elemento di struttura che non è un tag BCP 47 valido;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) segnala un elemento di struttura Widget a cui manca il proprietario dell'attributo PrintField;pvuaiLinkNotInStructureTree(§7.18.5) segnala un documento le cui annotazioni/Subtype /Linknon sono esposte come elementi di struttura Link;pvuaiPdfiumAnnotationMissingContentsepvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) aggiungono una precisa scansione delle annotazioni del modello a oggetti Pdfium che esenta le annotazioni nascoste, esterne alla crop box, Popup e Widget — eliminando i falsi positivi dell'euristica a livello di byte, che non può leggere i flag/Fo/Rect
Version 1.93.0
Aggiunto (Added)
TPdf.ValidatePdfUaora sovrappone un passaggio del modello a oggetti Pdfium all'ispettore a livello di byte, rispecchiando l'architettura PDF/A round-7: percorre gli oggetti testo di ogni pagina tramiteFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) ed esegue la scansione di ogni carattere tramiteFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) eFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — più preciso rispetto alle euristiche a livello di byte, che si attivano solo quando non sono presenti programmi di font o non appare affatto/ToUnicode; il percorso si interrompe anticipatamente a tre livelli: il ciclo di pagina termina quando tutti e tre i problemi del livello Pdfium sono già impostati, il ciclo per oggetto termina al primo font non incorporato e la scansione dei caratteri salta il passaggio.notdefquandoUnicodeMapErrorè già stato riscontrato; PDF/UA era l'ultimo validatore di standard PDF senza un livello di modello a oggetti Pdfium
Version 1.92.0
Aggiunto (Added)
- Creato
Tests.PdfR— il primo file di test per il validatore PDF/R-1 (FPdfPdfr), che copre la validazione dell'intestazione, il divieto di ObjStm, il rilevamento dei raster-marker e una guardia file pulito contro i falsi positivi; tutte e sei le suite di test degli standard PDF dispongono ora di file di test dedicati: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 212 test totali
Version 1.91.0
Aggiunto (Added)
ValidatePdfEeValidatePdfVThanno ottenuto controlli a livello di contenuto precedentemente disponibili solo nei validatori PDF/A, PDF/UA e PDF/X:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(solo PDF/E),pveiEmbeddedFilesForbidden(solo PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden;TPdf.ValidatePdfEeTPdf.ValidatePdfVTottengono anche un livello di modello a oggetti Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) che percorre gli oggetti testo di pagina tramiteFPDFFont_GetIsEmbedded, interrompendosi anticipatamente al primo font non incorporato
Version 1.90.0
Aggiunto (Added)
TPdf.ValidatePdfXora sovrappone un passaggio del modello a oggetti Pdfium all'ispettore a livello di byte: percorre gli oggetti testo di ogni pagina tramiteFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddede segnala un font non incorporato comepvxiPdfiumFontNotEmbedded— più preciso dell'euristica a livello di byte che si attiva solo quando non sono presenti programmi di font; il percorso si interrompe anticipatamente al primo font non incorporato trovato
Modificato (Changed)
- Percorso dell'albero di struttura in
TPdf.ValidatePdfUa: la chiamata per pagina aValidatePdfUaPageContentTagging(che compila una mappa di rivendicazione degli ID marked-content ed esegue controlli incrociati su ogni oggetto testo o immagine) viene ora saltata sulle pagine successive una volta riscontratopvuaiUntaggedContent— gli elementi della struttura vengono comunque raccolti per i controlli incrociati cross-page (ID nota unico, sequenza di intestazioni), ma la costosa fase di tagging del contenuto per pagina si interrompe anticipatamente
Version 1.89.0
Modificato (Changed)
- Prestazioni del livello del modello a oggetti Pdfium per
TPdf.ValidatePdfA: il percorso per pagina/oggetto si interrompe anticipatamente a tre livelli — il ciclo di pagina termina quando tutti i problemi applicabili al livello Pdfium sono già stati riscontrati, il ciclo per oggetto termina quando sono impostati entrambi i problemi per oggetto (font incorporato + trasparenza) e la scansione dei caratteri di testo della pagina salta il passaggio.notdefquandoUnicodeMapErrorè già stato riscontrato; i controlli di disponibilità delle APIAssigned()e i flag di conformità vengono memorizzati in booleani locali una volta sola prima del ciclo anziché essere rivalutati per ogni pagina/oggetto/carattere; su un documento multipagina non conforme, il percorso può ora fermarsi dopo la prima pagina invece di eseguire la scansione di tutte le pagine; su un documento conforme, il sovraccarico per pagina è inferiore (nessuna chiamataAssignedripetuta)
Version 1.88.0
Aggiunto (Added)
ValidatePdfXha ottenuto otto nuovi valori diTPdfXValidationIssuea livello di contenuto che coprono le restrizioni per lo scambio di stampe imposte da PDF/X oltre ai marcatori di formato file:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(nessun/TrimBoxsu alcuna pagina) epvxiTrappedNotSet(/Trappedassente o/Unknown); in precedenza il validatore PDF/X controllava solo i marcatori XMP/OutputIntent; questo è il suo primo controllo a livello di contenuto; gli helper condivisiPdfStructureBytes/PdfHasName/PdfCountNamesono stati aggiunti aFPdfPdfCommonin modo che tutte le unità di conformità possano utilizzarli
Version 1.87.0
Aggiunto (Added)
- La validazione PDF/UA ora copre le regole sui font compositi ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchsegnala i font Type0 il cui CMap incorporato e il CIDFont discendente non concordano suRegistry/Orderingo il cuiSupplementdel CIDFont supera quello del CMap,pvuaiCMapNotEmbeddedsegnala i CMap referenziati per nome (comeEncodingoUseCMap) che non sono CMap predefiniti della Tabella 118 di ISO 32000-1, epvuaiCMapWModeMismatchsegnala i CMap incorporati il cuiWModenel dizionario differisce dal WMode nel contenuto del loro stream
Risolto (Fixed)
- Il controllo §7.21.3.2
pvuaiCidFontMissingCidToGidMapmancava i dizionari CIDFontType2 il cui valore/coppia chiaveSubtypeè separato da un'andata a capo, e ora segnala anche un valore nameCIDToGIDMapdiverso daIdentity
Version 1.86.0
Aggiunto (Added)
- La validazione PDF/UA ora copre le regole di codifica TrueType ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidsegnala i font TrueType non simbolici il cuiEncodingè assente o non è néMacRomanEncodingnéWinAnsiEncoding(direttamente o tramiteBaseEncoding), epvuaiSymbolicTrueTypeEncodingsegnala i font TrueType simbolici che portano un nomeEncodingnon standard
Version 1.85.1
Modificato (Changed)
- Il controllo dell'ordine di tabulazione ISO 14289-1 §7.18.3
pvuaiMissingTabsOrderora viene eseguito per pagina: ogni pagina contenente annotazioni deve dichiarare/Tabs /Snel proprio dizionario di pagina, quindi una pagina conforme non maschera più una pagina priva di tale dichiarazione
Version 1.85.0
Aggiunto (Added)
- La validazione PDF/UA ora distingue i moduli XFA dinamici da quelli statici in conformità a ISO 14289-1 §7.15:
pvuaiXfaDynamicsegnala i moduli la cui configurazione XFA impostadynamicRendersurequired
Modificato (Changed)
- Il precedente flag candidato per qualsiasi XFA
pvuaiXfaPresentè ritirato e non viene più emesso (gli XFA statici sono conformi a §7.15); il valore dell'enum rimane per compatibilità API
Version 1.84.0
Aggiunto (Added)
- La validazione PDF/UA ora rileva i contenuti reali non etichettati richiesti da ISO 14289-1 §7.1:
pvuaiUntaggedContentsegnala gli oggetti di testo e immagine resi che non sono né rivendicati dall'albero strutturale della pagina (tramite i loro ID di contenuto contrassegnato) né contrassegnati come Artifact - Nuovi helper a livello di pagina
GetPageContentMarkInfoseValidatePdfUaPageContentTaggingcon il recordTPdfPageContentMarkInfoper uso diretto
Version 1.83.0
Aggiunto (Added)
- La validazione PDF/UA ora applica il modello di intestazione ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedsegnala i documenti che mescolano il tag genericoHcon le intestazioni numerateH1..Hn, epvuaiHeadingMultipleInNodesegnala i nodi strutturali che contengono più di un'intestazione figlioH
Version 1.82.0
Aggiunto (Added)
- La validazione PDF/UA ora risolve la RoleMap richiesta da ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardsegnala le voci della RoleMap che ridefiniscono un tipo strutturale standard, epvuaiRoleMapUnresolvedsegnala i tipi strutturali non standard utilizzati la cui catena RoleMap è assente, pendente o ciclica — le catene indirette che raggiungono un tipo standard sono accettate, e le voci RoleMap non utilizzate non vengono mai giudicate - Nuovi helper
PdfUaIsStandardStructType,PdfReadRoleMapPairs(con decodifica dell'escape PDF name#hh) eValidatePdfUaRoleMapUsageper uso diretto
Version 1.81.0
Aggiunto (Added)
- La validazione PDF/UA ora copre la taggatura delle liste ISO 32000-1 richiesta da ISO 14289-1 §7.6:
pvuaiListStructureInvalidsegnala gli elementi LI fuori da un contenitore L e le parti Lbl/LBody fuori da un elemento LI, accettando al contempo le liste annidate e l'uso legittimo di Lbl all'interno degli elementi Note e BibEntry
Version 1.80.0
Aggiunto (Added)
- La validazione PDF/UA ora copre la taggatura delle tabelle ISO 32000-1 richiesta da ISO 14289-1 §7.5:
pvuaiTableStructureInvalidsegnala le celle TH/TD fuori da una riga TR e le righe o i gruppi di righe fuori dal loro contenitore Table,pvuaiTableHeaderMissingScopesegnala le celle di intestazione la cui relazione non è determinabile né tramite un attributo Scope né tramite un'associazione Headers/ID, epvuaiTableHeadersUndefinedIdsegnala i riferimenti Headers in documenti che non definiscono ID di elementi strutturali TPdfStructureElementespone gli attributi di tabellaScope,HasHeaders,HeadersIds,ColSpaneRowSpan, risolti durante la visita dell'albero strutturale
Modificato (Changed)
- La visita dell'albero strutturale ora legge tutti gli attributi di layout e di tabella in un unico passaggio sui dizionari degli attributi di ciascun elemento anziché una scansione per attributo
Version 1.79.1
Aggiunto (Added)
- Portato l'esempio
AnnotationsLabsu Lazarus e C++Builder, unendosi all'esistente esempio console Delphi
Risolto (Fixed)
TPdf.CreateAnnotationpoteva sollevare “Cannot set attachment points” per le annotazioni di markup che usano punti quad (Highlight, Underline, StrikeOut, Squiggly) perché la nuova annotazione non aveva ancora uno slot quad da sostituire; ora invece accoda il primo quad
Version 1.79.0
Aggiunto (Added)
- Nuovo esempio console Delphi
AnnotationsLab: crea annotazioni Text, Highlight, Square e Circle, le scrive in un PDF, quindi ricarica il file ed enumera l'elenco delle annotazioni della pagina
Version 1.78.0
Aggiunto (Added)
- Nuovi
TPdf.MeasureTexteTPdf.MeasureTextWidth: misurano la larghezza e l'altezza renderizzate di una stringa per un dato font e dimensione (unità utente PDF, 1 unità = 1/72 di pollice) senza aggiungere contenuto a una pagina, rendendo possibile la logica di layout e word-wrap sopraAddText; forniti dall'unità indipendenteFPdfMeasurecome helper di classe - Nuovo
TPdf.WrapText: word wrap avido (greedy) basato suMeasureTextWidthche divide il testo sugli spazi e impacchetta le parole in righe non più larghe di una data larghezza (unità utente PDF); una singola parola troppo lunga ottiene la propria riga (nessuna interruzione intra-parola), restituendo le righe mandate a capo come array
Version 1.77.0
Aggiunto (Added)
ValidatePdfAha ottenuto tre nuovi valoriTPdfAValidationIssueche coprono le clausole precedentemente valutate “NO” o “reader behaviour” dal precedente audit dei divari (ordinali accodati, valori esistenti invariati):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — un carattere che si risolve in Unicode 0 senza un errore di mappatura, il sintomo a runtime di un riferimento glifo.notdef; rilevato tramite il livello del modello a oggetti Pdfium),pvaiWordBreakMissing(Level A 6.8.3.2 — una stringa di visualizzazione del flusso di contenuto più lunga di 20 caratteri senza spazio, una probabile violazione di parole unite; euristica grossolana che evita falsi positivi CJK), epvaiLinkActionMissingTarget(6.6.3 — un'azione GoToR/URI/SubmitForm a cui manca la chiave del target di visualizzazione in modo che un lettore non possa presentarla)
Version 1.76.0
Aggiunto (Added)
ValidatePdfAha ottenuto tre nuovi valoriTPdfAValidationIssue(ordinali aggiunti in coda, valori esistenti invariati):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — un token/BaseFonto/FontNamecontenente byte ≥ 0x80 che non formano un UTF-8 valido),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — un'immagine in linea in un flusso di contenuto della pagina utilizza il filtro LZW o Crypt) epvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — un font TrueType non simbolico il cui dizionario Encoding contiene/Differences)
Version 1.75.0
Aggiunto (Added)
ValidatePdfAha ottenuto tre nuovi valoriTPdfAValidationIssue(ordinali aggiunti, valori esistenti invariati):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — un token numerico che supera il limite dei numeri interi con segno a 32 bit 2,147,483,647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — un valore/BMal di fuori del set di blend-mode standard ISO 32000-1 §11.3.5; integra ilpvaiTransparentColorSpacedi PDF/A-1 che consente solo Normal/Compatible), epvaiHexStringOddDigits(6.1.6 — una stringa esadecimale<...>con un numero dispari di cifre esadecimali)
Version 1.74.0
Aggiunto (Added)
ValidatePdfAha ottenuto tre nuovi valoriTPdfAValidationIssue(ordinali aggiunti, valori esistenti invariati):pvaiPermissionsViolation(6.1.12 — un dizionario/Permscontenente/DigestLocation,/DigestMethodo/DigestValueinsieme a/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — un'azione di transizione Trans, rilevata tramite il pattern del dizionario delle azioni/S /Transper evitare falsi positivi con/Transparency), epvaiPdfiumObjectTransparency(PDF/A-1 6.4 — un oggetto pagina ha una trasparenza reale secondoFPDFPageObj_HasTransparency, estendendo il livello del modello a oggetti Pdfium introdotto nella v1.73.0 per rilevare gli effetti di blend-mode/soft-mask che la scansione dei nomi a livello di byte può mancare)
Version 1.73.0
Aggiunto (Added)
TPdf.ValidatePdfAora sovrappone un passaggio del modello a oggetti Pdfium sopra l'ispettore a livello di byte: analizza tutti gli oggetti di testo di ogni pagina tramiteFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddede segnala un font reso non incorporato comepvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), e carica ogni pagina di testo per scansionareFPDFText_HasUnicodeMapErrore segnala una mappatura Unicode danneggiata comepvaiPdfiumUnicodeMapError(6.3.8). Questi sono controlli che l'ispettore a livello di byte non può eseguire — vede solo nomi token, non handle di font risolti o stato di mappatura per carattere — e vengono uniti nel risultato a livello di byte. La funzione autonoma a livello di byteValidatePdfAComplianceè invariata
Version 1.72.0
Aggiunto (Added)
ValidatePdfAha ottenuto cinque nuovi valoriTPdfAValidationIssue(ordinali aggiunti, valori esistenti invariati):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — il catalogo non deve contenere/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — un OutputIntent non deve contenere/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — una specifica di file con/EFdeve contenere anche/UF),pvaiXmpPacketBytesAttr(6.7.5 — l'intestazione del pacchetto XMP non deve contenere gli attributi deprecatibytes=oencoding=), epvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — il bit/FToggleNoView dell'annotazione, valore 512, è vietato)
Version 1.71.0
Modificato (Changed)
ValidatePdfUaora sollevapvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): il walker dell'albero della struttura risolve l'attributo di layoutListNumberingsu ogni elementoLtramite l'API degli attributi di Pdfium e segnala qualsiasi valore al di fuori dell'insieme della Tabella 347 di ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Un attributo assente non viene segnalato, poiché l'elenco potrebbe non essere ordinato; questo colma l'ultima lacuna residua di ISO 14289-1 registrata alla fine del round 5
Version 1.70.0
Aggiunto (Added)
ValidatePdfUaha ottenuto quattro nuovi valoriTPdfUaValidationIssue(ordinali accodati, valori esistenti invariati):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — unFontDescriptordi un sottoinsieme CID deve dichiarare/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — una CMap ToUnicode non deve mappare alcun codice aU+FEFFoU+FFFE; i flussi non compressi vengono scansionati per le forme di output<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langdeve essere un tag RFC 1766 / BCP 47 valido; una grammatica permissiva accettaen,en-US,zh-Hans,es-419e segnala valori chiaramente non conformi), epvuaiOrderedListMissingListNumbering(7.6 — mantenuto per completezza dell'API; non ancora sollevato dal validatore perché per distinguere in modo affidabile gli elenchi ordinati da quelli non ordinati è necessario il valore dell'attributoListNumbering, che il walker dell'albero della struttura non espone)
Version 1.69.0
Aggiunto (Added)
ValidatePdfUaha ottenuto due nuovi valoriTPdfUaValidationIssue(ordinali accodati, valori esistenti invariati):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — un elemento di struttura Widget deve essere annidato all'interno di un elementoForm; il walker dell'albero della struttura ora verifica il tipo di genitore diretto di ogni Widget) epvuaiSubsetMissingCharSet(7.21.4.2 — unFontDescriptordi un sottoinsieme di Tipo 1 deve dichiarare/CharSet, identificato dal prefisso di sei lettere+del nome del sottoinsieme in/FontName)
Version 1.68.0
Aggiunto (Added)
ValidatePdfUaha ottenuto due nuovi valoriTPdfUaValidationIssue(ordinali accodati, valori esistenti invariati):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — un dizionario di azione URI non deve contenere/IsMapcon valoretrue, poiché disabilita la destinazione del link accessibile) epvuaiHeadingSequenceViolation(7.4.2 — le intestazioni numerate devono iniziare daH1e una sequenza discendente non deve saltare un livello intermedio, ad es.H1→H3è una violazione). Il controllo delle intestazioni è la prima regola PDF/UA a livello di albero della struttura nel validatore:ValidatePdfUaStructureElementsora scorre l'elenco degli elementi tipizzati e verifica la sequenzaH1…H6(eH7+secondo 7.4.3) nell'ordine del documento
Version 1.67.0
Aggiunto (Added)
ValidatePdfUaha ottenuto cinque nuovi valoriTPdfUaValidationIssue(ordinali accodati, valori esistenti invariati):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — un'annotazione Link deve contenere una descrizione alternativa tramite/Contents),pvuaiAnnotationMissingContents(7.18.1 — qualsiasi annotazione non esente senza/Contentsdeve avere una descrizione alternativa; Popup e Widget sono esenti),pvuaiEmbeddedFileMissingName(7.11 — un dizionario di specifica del file deve contenere/Fe/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — un dizionario di dati di clip multimediale deve contenere/CTe/Alt), epvuaiCidFontMissingCidToGidMap(7.21.3.2 — un CIDFont di Tipo 2 incorporato deve contenere/CIDToGIDMap)
Version 1.66.0
Aggiunto (Added)
ValidatePdfUaha ottenuto cinque nuovi valoriTPdfUaValidationIssue(ordinali accodati, valori esistenti invariati):pvuaiRoleMapMissing(ISO 14289-1 7.1 — un documento taggato con tipi di struttura non standard deve contenere un/RoleMap),pvuaiOptionalContentAsKey(7.10 — un dizionario di configurazione del contenuto opzionale non deve contenere la chiave di stato automatico/AS),pvuaiXfaPresent(7.15 — la presenza di/XFAin un AcroForm viene segnalata poiché gli XFA dinamici sono vietati),pvuaiTrapNetAnnotation(7.18.2 — le annotazioni/TrapNetsono vietate), epvuaiReferenceXObject(7.20 — i Reference XObject, identificati dal marcatore/Ref, sono vietati)
Risolto (Fixed)
ValidatePdfUanon genera più falsi positivi perpvuaiEncryptionPresentsu ogni file crittografato: PDF/UA consente la crittografia purché la chiave/Pdel dizionario di crittografia abbia il bit in posizione 10 (valore 1024) impostato, il che garantisce l'accesso alle tecnologie assistive (7.16). La violazione precisa è ora segnalata tramite il nuovopvuaiEncryptionPBitMissing;pvuaiEncryptionPresentviene mantenuto nell'enum per compatibilità dell'API ma non viene più sollevato dal validatore a livello di byte
Version 1.65.0
Aggiunto (Added)
ValidatePdfAha ottenuto cinque nuovi valoriTPdfAValidationIssue(ordinali accodati, valori esistenti invariati):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — un CIDFont di Tipo 2 incorporato deve contenere/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — unFontDescriptordi un sottoinsieme di Tipo 1 deve contenere/CharSet),pvaiSubsetMissingCidSet(6.3.5 — unFontDescriptordi un sottoinsieme CID deve contenere/CIDSet),pvaiWidgetActionForbidden(6.6.1 — un'annotazione Widget non deve contenere/Ao/AA), epvaiOptionalContentAsKey(ISO 19005-2 6.9 — un dizionario di configurazione del contenuto opzionale non deve contenere la chiave di stato automatico/AS, ora rilevante perché PDF/A-2 consente il contenuto opzionale)
Version 1.64.0
Aggiunto (Added)
ValidatePdfAha ottenuto otto nuovi valoriTPdfAValidationIssue(ordinali accodati, valori esistenti invariati):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — l'intestazione%PDF-x.ydeve essere seguita da un commento%con almeno quattro byte maggiori di 127),pvaiExternalStreamRef(6.1.7 — un dizionario di flusso non deve contenere/F,/FFiltero/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — il/Sdi OutputIntent deve essere/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDatedeve apparire anche comexmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — il Livello A richiede/MarkInfocon/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — il dizionario/APdell'annotazione deve contenere solo/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annex E.2 — ogni filespec associato deve contenere/AFRelationship), epvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — un'immagine JPEG2000 deve dichiarare 1, 3 o 4 componenti)
Risolto (Fixed)
ValidatePdfAnon genera più falsi positivi perpvaiAnnotationFlagsViolationsui documenti che usano un nome di risorsa font a lettera singola come/Font << /F 5 0 R >>; la scansione del flag/Fè ora limitata a un contesto di annotazione (/Subtypedi un tipo di annotazione), corrispondendo al comportamento documentato (6.5.3)ValidatePdfAora segnala il requisito dei file associati PDF/A-3 per ogni file: un documento viene segnalato solo quando un/Type /Filespecincorporato che fa riferimento a un flusso incorporato tramite/EFè privo di/AFRelationship, invece del precedente controllo a livello di intero documento 'tutto o niente' (ISO 19005-3 Annex E.2)- Aggiunta l'azione deprecata
/SetStateall'insieme delle azioni vietate insieme a/SetOCGState, in modo che il nome dell'azione nel PDF Reference venga intercettato direttamente (6.6.1)
Version 1.63.0
Aggiunto (Added)
- Aggiunti
TPdf.MeasureTexteTPdf.MeasureTextWidth: misurano la larghezza e l'altezza di rendering del testo con un font e una dimensione specificati senza aggiungere contenuti alla pagina (in unità utente PDF, 1 unità = 1/72 pollice), consentendo calcoli di layout e a capo automatico suAddText; forniti dall'unità autonomaFPdfMeasurecome class helper
Modificato (Changed)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFeDemo\Lazarus\MergePDFmigliorati per tutti e tre gli IDE: selezione dell'intervallo di pagine per file, percorso di output opzionale, deduplicazione, log di esecuzione, pulsante di annullamento e riepilogo dell'unione; segnalibri e metadati vengono importati dalla prima fonte- Le demo di
CreatePDFper tutti e tre gli IDE ora includono un'opzione «Testo europeo» per scrivere testo con accenti in ceco, francese, tedesco, spagnolo, portoghese, polacco e turco, per verificare la selezione dei font e la gestione Unicode (il precedente esempioEuropeanTextè stato integrato) - Rimossi gli esempi
ExtractTextPageseEuropeanText: la funzionalità di estrazione del testo pagina per pagina diExtractTextPagesè ora coperta dalle opzioni di intervallo e separatore di pagina diExtractText; il rendering multilingua diEuropeanTextè stato integrato inCreatePDF
Version 1.62.2
Corretto (Fixed)
- Le intestazioni C++Builder (
.hpp) sono state rigenerate per tutte le versioni e piattaforme RAD Studio (Win32/Win64/Win64x); si erano discostate dalle sorgenti Pascal, lasciando firme di funzione obsolete e unità mancanti che raggiungevano gli utenti C++Builder tramite la distribuzione dei sorgenti
Version 1.62.1
Corretto (Fixed)
- È stata ripristinata la compilazione dei sorgenti su RAD Studio 12 Athens e precedenti: un'assegnazione di
TArray<Byte>nel percorso di convalida PDF/UA usava una conversione implicita di array disponibile solo in Delphi 13 e non compilava sugli IDE più vecchi
Version 1.62.0
Aggiunto (Added)
TPdf.RenderPageThumbnailrenderizza qualsiasi pagina per indice in un bitmap adattato al rapporto d'aspetto senza cambiare la pagina corrente del documento, la pagina caricata o attivareOnPageChange
Corretto (Fixed)
TPdfThumbnailViewnon guida più ilPageNumberdel documento host durante il disegno; prima ogni ridisegno ricaricava le pagine, attivavaOnPageChangee scartava la pagina di testo, cosa che poteva disturbare unTPdfViewcollegato e innescare cicli di ridisegno. Le miniature ora vengono renderizzate tramiteRenderPageThumbnailsenza questi effetti collaterali- La convalida di conformità PDF/X ora ispeziona i documenti con flussi di riferimenti incrociati (PDF 1.6, tipici di PDF/X-4) e gli oggetti memorizzati in flussi di oggetti compressi, invece di segnalare quei file in blocco come non conformi; il marcatore
GTS_PDFXVersionviene letto sia dalla forma elemento sia dalla forma attributo RDF di XMP - La convalida PDF/R ora segnala
pvriInfoXmpMismatchquando il dizionario Info e XMP divergono su Producer o Creator; il problema era stato dichiarato ma non sollevato - I timer di riempimento dei moduli vengono ora tracciati per richiesta, così un documento che ne esegue più di uno alla volta (per esempio un intervallo JavaScript insieme al lampeggio del cursore del campo) li conserva tutti invece di perderli tutti tranne l'ultimo
- Il disegno di
TPdfViewe i suoi metodi pubbliciRenderPage/RenderTilemantengono ora il blocco di rendering del documento, serializzandosi rispetto al rendering nel thread di lavoro dello stessoTPdf(PDFium non è thread-safe) - Il testo non ASCII scritto nei metadati PDF/X, PDF/R e PDF/VT (nomi di condizione OutputIntent, Creator, Producer) viene ora codificato come stringa UTF-16BE secondo ISO 32000-1 §7.9.2.2 invece che come UTF-8 grezzo, che i lettori conformi leggerebbero in modo errato
- Gli helper di conformità ora leggono correttamente i flussi di metadati incorporati il cui
/Lengthè un riferimento indiretto, caricano i byte sorgente conReadBuffer(così una lettura corta fallisce in modo pulito) e rifiutano un offsetstartxrefnegativo invece di rischiare una lettura fuori intervallo
Version 1.61.0
Modificato (Changed)
- Correzioni delle dichiarazioni FFI/ABI che possono richiedere di ricompilare il codice che implementa i callback interessati: il callback di riempimento moduli
FFI_OpenFileora portacdecl(convenzione di stack Win32), e il parametrovaluediFPDFAnnot_SetStringValueeFPDFAttachment_SetStringValueè oraFPDF_WIDESTRING(UTF-16LE) per corrispondere alle intestazioni PDFium - I callback di caricamento progressivo
FX_FILEAVAIL.IsDataAvaileFX_DOWNLOADHINTS.AddSegmentora prendono offsetsize_t, esize_tha la larghezza di un puntatore in Free Pascal / Lazarus Win64 (prima veniva troncato a 32 bit), correggendo la disponibilità dei dati e le chiamate APIoutsize_tsu FPC Win64
Corretto (Fixed)
- Sicurezza della memoria: un use-after-free del timer di riempimento dei moduli quando si distrugge un
TPdfcon un cursore AcroForm attivo; un doppioFPDF_CloseDocumentnel percorso di errore diImportNPagesToOne; eccezioni Pascal che uscivano dai callbackFPDF_FILEWRITE/FPDF_FILEACCESSoltre il confine C durante il salvataggio e l'inserimento JPEG; e un overflow di interi nell'estrazione del testo durante la lettura da un indice iniziale fino alla fine della pagina TPdfFuture<T>ora consegna in modo affidabile il suo callback di risultato; la risposta veniva prima quasi sempre scartata e poteva toccare un thread liberato perché il worker si liberava prima che la risposta accodata venisse eseguita- L'output PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT e PDF/UA ora scrive voci di tabella dei riferimenti incrociati esattamente lunghe 20 byte, come richiesto da ISO 32000-1 §7.5.4
- L'iniezione dei marker di conformità non distrugge più un dizionario quando la chiave rimossa (per esempio
/Trapped) era l'ultima voce, cosa che prima inghiottiva la chiusura>>e produceva un oggetto malformato - I flussi di profilo ICC di OutputIntent dichiarano ora il numero di componenti
/Nrichiesto per PDF/X e PDF/VT (già presente per PDF/A); i documenti sorgente cifrati vengono decifrati prima dell'iniezione dei marker PDF/X, PDF/E, PDF/R, PDF/VT e PDF/UA, così l'output è valido invece di risultare silenziosamente corrotto - Il BOM xpacket UTF-8 nell'XMP generato viene emesso come byte esatti, correggendo la corruzione sulle installazioni Delphi la cui code page ANSI non è Latin-1; i trailer di aggiornamento incrementale ora conservano il riferimento
/Infodel documento SaveAscon compressione non tronca più i flussi il cui/Lengthè un riferimento indiretto, e le tabelle dei riferimenti incrociati ricostruite ora usano voci da 20 byte, numeri di generazione reali e scartano il puntatore/Prevobsoleto- La convalida di conformità legge correttamente i marker di versione XMP in forma di attributo per PDF/E e PDF/X, così i file PDF/X-4 serializzati come attributi vengono riconosciuti; richiede l'identificatore esatto
PDF/E-1, legge correttamente i flussi di metadati con/Lengthindiretto e non confonde più per falso positivo la chiave/IDo/StructTreeRootdi un elemento di struttura quando controlla il trailer PDF/UA; un offsetstartxrefmalformato non genera più un errore di intervallo TPdfThumbnailView: l'ultima pagina è ora raggiungibile con la barra di scorrimento, la pagina corrente del documento host viene ripristinata dopo il disegno delle miniature e la gestione standard dell'uscita del mouse viene di nuovo inviata- I bitmap di pagina e di immagine in scala di grigi non vengono più renderizzati con una tavolozza errata;
TPdfViewnon resta più con un riferimento pendente quando il suoTPdfviene liberato per primo - Report di preflight: HTML viene salvato come UTF-8 per corrispondere al charset dichiarato, e l'escape delle stringhe JSON produce sequenze
\ucorrette per i caratteri non ASCII in Free Pascal - Build di prova: la finestra di dialogo di promemoria della prova ora compare invece di essere soppressa prima di potersi mostrare
TPdfStreamAdapterora rifiuta flussi superiori a 4 GiB con un errore chiaro invece di troncare silenziosamente la lunghezza passata a PDFium
Version 1.60.1
Modificato (Changed)
- Le demo AccessibilityReader per Delphi, Lazarus e C++Builder ora eseguono la lettura ad alta voce tramite
TPdfReadingSession: ogni pagina viene assemblata in un unico frammento parlato conBuildSpokenTextFromWords, le posizioni parola SAPI alimentanoFeedSpokenPosition, e la sessione avanza nelle pagine e guida il cursore parola della vista, sostituendo l'orchestrazione scritta a mano che ogni demo portava prima - Il tracciamento karaoke a livello di parola nelle demo funziona ora anche quando NVDA è il motore di sintesi:
EstimatePacingscandisce il cursore di lettura in base al tempo di parlato trascorso, mentre prima NVDA leggeva ad alta voce senza alcun tracciamento delle parole - Pause e Resume nelle demo funzionano ora anche con NVDA:
ResumeRestartsChunkrilegge la pagina corrente dal suo inizio al Resume, mentre SAPI conserva la sua pausa e ripresa native sul posto
Version 1.60.0
Aggiunto (Added)
- Rendering in tempo reale per bassa visione in
TPdfView: le nuove opzioni di renderingreInvertereNightDuotonericolorano ogni tassello di pagina renderizzato (inversione totale dei colori, oppure una tavolozza notturna a due tinte) prima che vengano disegnate le sovrapposizioni di ricerca, selezione, lettura e cursore parola, portando le trasformazioni colore bitmap esistenti nella visualizzazione interattiva sia per il layout a pagina singola sia per quello a pagine affiancate; il cambio di opzioni provoca un ridisegno immediato NightDuotoneInkeNightDuotonePaperconfigurano la tavolozza notturna, con testo ambra su pagina nera come predefinito;reInvertha la precedenza quando entrambe le opzioni sono impostate
Version 1.59.0
Aggiunto (Added)
TPdfReadingSession: un componente di orchestrazione della lettura ad alta voce agnostico al motore vocale. Mantiene il cursore del frammento, il cursore della parola e lo stato di riproduzione (Play/PlayFrom/Pause/Resume/Stop), avanza attraverso i frammentiTPdfSpokenTextcaricati mentre l'host segnala il motore inattivo tramiteTick, traduce i decimali del testo parlato di nuovo nei caratteri di pagina e guida automaticamente il cursore parola di unTPdfViewcollegato; l'host collega qualsiasi motore vocale tramiteOnSpeake gli eventi di richiesta di annullamento, pausa e ripresa, così la libreria non collega alcuna API vocale da solaFeedSpokenPositionconsuma le posizioni parola del motore (comeStatus.InputWordPositiondi SAPI);EstimatePacingconEstimatedWordsPerMinutescandisce i motori privi di segnale di posizione;ResumeRestartsChunkrilegge il frammento corrente per i motori senza pausa nativaOnChunkChange,OnWordChangeeOnFinishedvengono emessi solo per cambiamenti reali, e una vista collegata liberata si scollega automaticamente, così il codice host resta privo di flicker e sicuro da crash
Version 1.58.0
Aggiunto (Added)
EstimateSpokenWordIndexstima quale parola un motore vocale stia pronunciando dal tempo trascorso e da un ritmo in parole al minuto, assegnando proporzionalmente più tempo alle parole più lunghe, così i motori che non riportano la posizione parola (come il client controller di NVDA) possono comunque pilotare il cursore di lettura a livello di parola; il chiamante fornisce il tempo trascorso, quindi la routine resta senza dipendenza dall'orologio e testabile unitariamente
Version 1.57.0
Aggiunto (Added)
- Assemblaggio del testo parlato con mappatura su due domini per il tracciamento della lettura ad alta voce:
BuildSpokenTextFromWordseSpokenTextAppendcostruiscono la stringa consegnata a un motore text-to-speech a partire dai riquadri parola della pagina mentre registrano una tabella di intervalli, eSpokenToPageChartraduce uno scostamento parlato segnalato dal motore (comeStatus.InputWordPositiondi SAPI) di nuovo all'indice del carattere di pagina, così il tracciamento dell'evidenziazione a livello di parola resta corretto quando il testo parlato non è tutto il testo della pagina (regioni saltate, lettura per unità, sostituzioni di pronuncia) - I tipi
TPdfSpokenTexteTPdfSpokenSpantrasportano la stringa parlata più gli intervalli di pagina sorgente da cui è stata costruita; gli offset sui separatori inseriti si risolvono nella parola mappata successiva e gli offset oltre gli intervalli mappati non segnalano alcuna corrispondenza
Version 1.56.9
Aggiunto (Added)
Demo\Delphi\PreflightReportaggiunge un’anteprima del piano d’azione che raccoglie gli standard non superati, le priorità, le azioni successive, i codici problema e le raccomandazioni in una checklist di rimedioDemo\Delphi\PreflightReportCliaccettaplan/actionplancome formato di output per esecuzioni file singolo e batch, scrivendo la stessa checklist di rimedio in un file di testo
Modificato (Changed)
- Entrambi i demo Delphi PreflightReport mostrano ora i conteggi degli stati pass / action / review accanto a standard e problemi totali
Version 1.56.8
Modificato (Changed)
ViewerInteractionLabora include comandi per salto pagina, comandi di zoom manuale, log delle coordinateDeviceToPage/PageToDevicebasato su click e un log di interazione più chiaro per controlli su selezione, ricerca, rotazione e navigazione- Le pagine readme di
ViewerInteractionLabdocumentano ora il flusso di interazione aggiunto in tutto il set di readme demo localizzati
Version 1.56.7
Aggiunto (Added)
AccessibilityWorkbenchClimappa ogni segnalazione rilevata al Success Criteria WCAG 2.1 e alla clausola ISO 14289-1 (PDF/UA-1) e mostra nei report una sezione di copertura degli standardAccessibilityWorkbenchClicalcola un punteggio di accessibilità documentato da 0 a 100 con una scala di penalità pubblicata e una fascia excellent / good / needs work / poor, visibile per file e come media di batchAccessibilityWorkbenchCliaccettafailscore=Nper marcare il run come fallito (exit code 2) quando una qualsiasi file scende sotto NAccessibilityWorkbenchCliscrive un log SARIF 2.1.0 quando il nome del riepilogo batch termina con.sarif, con una regola per tipo di rilevamento e i tag WCAG 2.1 e PDF/UA per ingestion CI e code-scanningAccessibilityWorkbenchCliaggiunge il comandoversionche stampa la versione collegata di PDFium Delphi Component
Version 1.56.6
Aggiunto (Added)
IntakeWorkbenchClicalcola un hash forense SHA-256 per ogni file in ingresso (degrado aunavailablesui compilatori senzaSystem.Hash) e lo riporta in ogni formatoIntakeWorkbenchCliaccettapasswords=file.txtper sbloccare in prova documenti con password da un elenco candidato, registrando l’indice candidato corrispondente senza mai loggare il testo della passwordIntakeWorkbenchCliaccettacopyto=dirper instradare ogni file auditato in una sottocartella per livello di rischio, trasformando l’auditor in un ordinatore d’ingressoIntakeWorkbenchCliscrive un log SARIF 2.1.0 quando il nome del riepilogo batch termina con.sarif, con una regola per flag di rischio e un risultato per file segnalato per ingestion CI e code-scanningIntakeWorkbenchCliaggiunge il comandoversionche stampa la versione collegata di PDFium Delphi Component
Version 1.56.5
Aggiunto (Added)
IntakeWorkbenchCliora deriva le azioni post-intake consigliate come accept, request-password, manual-review, quarantine e deduplicate, e espone i conteggi delle azioni nei riepiloghi batchAccessibilityWorkbenchCliora deriva le azioni di remediation consigliate come pass-through, remediate-tags, run-ocr, remediate-semantics e manual-review, con conteggi batch corrispondenti
Modificato (Changed)
- Entrambi i demo CLI orientati agli strumenti espongono l’azione consigliata in output console, text, HTML, JSON e CSV, così gli operatori batch possono instradare i file senza rischio di post-elaborazione o campi di stato
Version 1.56.4
Corretto (Fixed)
- Leggere in ciclo annotazioni, segnalibri o link-annotazioni non lascia più perduti i testi dell’elemento precedente: i record risultato di
TPdfAnnotation,TBookmarkeTLinkAnnotationvengono ora azzerati con inizializzazione consapevole dei tipi gestiti invece di zero raw della memoria, così i documenti con molti elementi testuali non gonfiano più la memoria del processo per tutta la durata dell’applicazione - La distruzione di un
TPdfche aveva registrato un handlerOnUnsupportedFeatureora lo stacca dal callback PDFium globale del processo, così un successivo caricamento documento da un’altra istanzaTPdfsenza proprio handler non può più dispatchare nel componente liberato (use-after-free)
Version 1.56.3
Corretto (Fixed)
AccessibilityWorkbenchClinon conta più le pagine vuote come pagine di reading-order euristiche, così i documenti taggati con pagine divisorie vuote mantengono lo stato di accessibilità corretto; le pagine senza contenuto leggibile sono ora riportate separatamente- La rilevazione header di tabella di
AccessibilityWorkbenchClinon assegna più una tabella esterna alle celleTHappartenenti a una tabella annidata, e i nomi di form-field e font sono confrontati case-sensitive in modo che campi distinti non vengano uniti - Gli inventari host URL di
IntakeWorkbenchClieliminano ora userinfo, query e frammento, così un link costruito come[email protected]è attribuito all’host reale e i targetmailto:contribuiscono il proprio dominio invece di risultare invisibili - I report Markdown di
IntakeWorkbenchClieseguono l’escape dei backticks in percorsi controllati da attaccanti, host e nomi allegato, così la formattazione del report non può essere rotta dall’interno di un documento
Modificato (Changed)
AccessibilityWorkbenchClisegnala i fallimenti di font-scan e form-field-scan come contatori separati, marca i font non embedded che hanno anche istanze embedded e limita liste font lunghe con un marcatore di troncamento esplicito- I riepiloghi batch di
IntakeWorkbenchCliaggiungono una colonna per conteggio delle attachment-annotation, e il censimento delle annotazioni per pagina è limitato a 20000 annotazioni per pagina con il limite riportato in ogni formato
Version 1.56.2
Aggiunto (Added)
AccessibilityWorkbenchCliora verifica incorporamento dei font, tooltip dei campi modulo, origine dell'ordine di lettura, outline del documento, struttura di tabelle ed elenchi, testo alternativo sospetto e dettagli di revisione per pagina più ricchi, così i report accessibility in batch identificano più obiettivi di correzioneIntakeWorkbenchCliora segnala limiti di scansione delle pagine, azioni launch e remote-go-to, inventari degli host URI, conteggi delle annotazioni, funzionalità PDFium non supportate, identificatori documento duplicati e flag di rischio ampliati per la revisione intake automatizzata
Modificato (Changed)
IntakeWorkbenchCliaccettamaxpages=Nnelle modalità file singolo e batch per limitare la scansione delle pagine per documento completando comunque i report metadata, attachment, script, XFA, signature e risk
Version 1.56.1
Corretto (Fixed)
- Il caricamento di un
pdfium.dllprecedente a cui manca un'esportazione più recente ora fallisce in modo pulito: il percorso di errore reimposta ogni punto di ingresso API associato, quindi i controlliAssigned()(ad esempio suFPDF_GetLastErroroFPDF_GetSecurityHandlerRevision) indicano che la libreria non è caricata invece di chiamare il modulo già scaricato e andare in crash con una violazione di accesso UnloadLibraryora azzera tutti i binding API di PDFium, non solo le funzioni di supporto V8 opzionali, quindi dopo il rilascio della DLL non sopravvivono puntatori a funzione obsoleti
Version 1.56.0
Aggiunto (Added)
- Cursore di lettura karaoke parola per parola in
TPdfView:TrackReadingWordAtmappa l offset carattere della parola corrente di un motore di sintesi vocale, come SAPIStatus.InputWordPosition, sui riquadri parola della pagina, evidenzia la parola che lo contiene come sovrapposizione distinta sopra il blocco di lettura, la porta in vista e restituisce l indice parola, così la parola pronunciata si illumina mentre la voce avanza SetReadingWordeClearReadingWordimpostano o cancellano direttamente la parola evidenziata da unTPdfWordBox; reimpostare la stessa parola non esegue operazioni, quindi il tracciamento parola per parola non fa mai sfarfallare la vistaReadingWordColoreReadingWordFollowcontrollano il colore del cursore parola e se la vista scorre automaticamente fino alla parola pronunciata
Version 1.55.2
Corretto (Fixed)
- ViewerInteractionLab ora dà più spazio verticale alle righe della barra strumenti, quindi Open PDF, Create Sample, navigazione, ricerca e controlli di selezione non si sovrappongono più con caratteri scalati
Version 1.55.1
Corretto (Fixed)
- ViewerInteractionLab ora colloca Prev, Next e Rotate sulla seconda riga della barra strumenti, evitando la sovrapposizione all avvio con Open PDF e Create Sample
Version 1.55.0
Aggiunto (Added)
- Ponte da parola a selezione per la lettura con selezione:
TPdfView.SelectWordBoxeSelectWordSpanselezionano una singola casella parola o una sequenza sulla stessa pagina daPageWordBoxestramite gli intervalli carattere, così la parola o riga letta può anche essere selezionata e copiata WordBoxIndexAtCharIndexmappa un indice carattere alla casella parola che lo contiene e guida l’evidenziazione parola per parola mentre avanza il cursore TTS
Version 1.54.0
Aggiunto (Added)
- Accessor per la compilazione vocale dei moduli che leggono il campo attivo direttamente dal cursore logico:
FocusedFormFieldValue,FocusedFormFieldNameeFocusedFormFieldDetailssuTPdfeTPdfViewriportano il valore del campo corrente, il nome leggibile (/TUtooltip con fallback a/T) e l'interoTPdfFormFieldInfo(tipo, flag, opzioni), cioè tutto ciò che un'interfaccia vocale deve annunciare mentre avanza in un modulo
Corretto (Fixed)
FocusedFormFieldValuelegge il campo tramiteFocusedFormFieldIndexinvece del focus interattivo di pdfium, così un compilatore di moduli guidato dalla voce ottiene il valore corretto anche senza cursore visibile sullo schermo (l'esistenteFocusedFormFieldTextcontinua a riflettere il focus di pdfium e resta invariato)
Version 1.53.0
Aggiunto (Added)
- Supporto all'evidenziazione a livello di parola:
TPdf.PageWordBoxeseTPdfView.PageWordBoxessuddividono una pagina in recordTPdfWordBox, ciascuno con il testo della parola, il relativo intervallo di caratteri e un rettangolo di delimitazione nello spazio pagina, così un lettore di accessibilità può evidenziare a turno ogni parola pronunciata ("lettura karaoke") passando il rettangolo aSetReadingHighlight BuildWordBoxesespone come API separata il passaggio di tokenizzazione, convertendo il testo della pagina in word box con intervalli di caratteri
Version 1.52.0
Aggiunto (Added)
- Gli helper di rendering per ipovisione
InvertPdfBitmap,GrayscalePdfBitmapeDuotonePdfBitmapapplicano trasformazioni colore in place a un bitmap renderizzato a 32 bit, così un lettore di accessibilità può mostrare le pagine invertite / in modalità scura, in scala di grigi oppure con uno schema personalizzato a due colori (per esempio sfondo scuro con testo chiaro) per utenti ipovedenti - Le trasformazioni operano per pixel e si comportano allo stesso modo su VCL e Lazarus/LCL, lasciando inalterate le dimensioni del bitmap
Version 1.51.0
Aggiunto (Added)
- Unità di lettura a livello di frase per l'ascolto assistito sincronizzato:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitseTPdfView.ReadingUnitslinearizzano il flusso di contenuto leggibile in recordTPdfReadingUnitordinati e di dimensione frase, ciascuno con il testo da pronunciare, il tipo semantico, la pagina, i rettangoli di evidenziazione e il tag lingua, così un'app screen reader può avanzare nella pagina o nell'intero documento un'unità parlata alla volta - Navigazione semantica con
NextReadingUnitOfKind, che consente a un'interfaccia vocale di saltare all'intestazione, figura, voce di elenco o cella di tabella successiva o precedente senza scandire manualmente il flusso BuildReadingUnitsconverte direttamente qualsiasiTPdfContentFragmentsin unità di lettura: intestazioni e descrizioni di figure/Alt restano integre, mentre i paragrafi vengono spezzati ai confini di frase, i punti decimali vengono preservati e il cursore di lettura è un semplice indice posseduto dal chiamante
Version 1.50.0
Aggiunto (Added)
ValidatePdfAora è in grado di esaminare documenti PDF 1.5+ che memorizzano il catalogo, l'OutputIntent o altri dizionari all'interno di flussi di oggetti compressi (/Type /ObjStm). I flussi di oggetti vengono decompressi e gli oggetti che contengono vengono risolti, così questi documenti sono validati nel merito anziché essere segnalati come privi dei propri marcatori PDF/A
Version 1.49.5
Corretto (Fixed)
ValidatePdfAnon segnala più come problema l'assenza di una descrizionepdfaExtension:schemas. Lo schema dell'identificatore PDF/A (pdfaid) è ben noto, quindi né veraPDF né PDF/A-2/-3 richiedono una descrizione di schema di estensione per esso, e segnalarne l'assenza faceva risultare erroneamente non conforme ogni PDF/A di terze parti già conforme. I documenti prodotti dalla libreria stessa includono comunque la descrizione
Version 1.49.4
Corretto (Fixed)
ValidatePdfAora rileva il livello di conformità quando l'identificatore PDF/A è scritto come attributi XML (pdfaid:part="2") anziché come elementi figli, così i documenti in forma di attributo non vengono più segnalati con un livello sconosciuto. Questo corregge anche un effetto a cascata per cui un livello non rilevato faceva ripiegare i controlli specifici della parte sulle regole rigorose di PDF/A-1, segnalando erroneamente file incorporati e trasparenze che PDF/A-2 e PDF/A-3 consentono
Version 1.49.3
Corretto (Fixed)
ValidatePdfAora esamina i documenti PDF 1.5+ i cui dati di cross-reference sono un cross-reference stream (file privi della parola chiavetrailer). Il livello di conformità, il/IDdel trailer e gli altri marcatori vengono letti dal dizionario del cross-reference stream, così questi documenti sono validati nel merito anziché essere segnalati come del tutto non conformi
Version 1.49.2
Corretto (Fixed)
ValidatePdfAnon segnala più un problema spurio di font non incorporato su documenti che incorporano tutti i propri font. L'euristica precedente confrontava il numero di token/FontDescriptorcon i programmi di font incorporati, ma ogni font incorporato contribuisce con due token/FontDescriptor(il riferimento al dizionario del font più l'oggetto descrittore), perciò ogni file con font incorporati veniva erroneamente segnalato. Il controllo ora segnala soltanto un documento che fa riferimento a font senza incorporare alcun programma di font, coerentemente con la corrispondente correzione diValidatePdfUa
Version 1.49.1
Corretto (Fixed)
- L'output PDF/A ora risulta conforme come PDF/A-1b e PDF/A-1a con veraPDF: il flusso del profilo ICC dell'OutputIntent sRGB incorporato (referenziato da
/DestOutputProfile) ora dichiara il conteggio dei componenti/Nrichiesto (3 per il profilo RGB integrato), come imposto da ISO 19005-1 6.2.3.2. I documenti prodotti daSaveAsPdfAin precedenza non superavano la validazione rigorosa PDF/A-1 perché il flusso del profilo di destinazione ometteva/N; il valore è derivato dall'intestazione del profilo ICC, quindi anche un profilo CMYK o Gray fornito dal chiamante riceve il conteggio corretto
Version 1.49.0
Corretto (Fixed)
ValidatePdfUanon segnala più erroneamente l'assenza dell'identificazione XMP su PDF taggati conformi — l'identificatore PDF/UA (pdfuaid:part),dc:title, le date XMP e il/IDdel trailer vengono ora letti dai byte del documento originale anziché dalla copia risalvata, che omette il flusso XMP/Metadatae, per i file con cross-reference-stream, il/IDdel trailer- Il controllo di incorporamento dei font di
ValidatePdfUaè stato corretto, così un documento che incorpora tutti i propri font non viene più segnalato come avente font non incorporati; ora segnala soltanto un documento che fa riferimento a font senza incorporare alcun programma di font ValidatePdfUaora accetta un elemento di strutturaFormulail cui testo alternativo è fornito tramiteActualTextanziché tramite una voceAlt(ISO 14289-1 §7.7), coerentemente con la regola esistente perFigure
Version 1.48.0
Aggiunto (Added)
- Selezione testuale programmatica su
TPdfView:SelectTextRange(per pagina e intervallo di caratteri) eSetSelection(per intervalli espliciti suddivisi per pagina) selezionano il testo da codice — per esempio per leggere ed evidenziare un brano; entrambi ridisegnano e generanoOnSelectionChangequando la selezione cambia.SelectionRangeslegge la selezione corrente come intervalli di caratteri suddivisi per pagina, mentreSelectionRectanglesne restituisce i rettangoli in coordinate di pagina per l'evidenziazione personalizzata o lo scorrimento fino alla selezione
Version 1.47.0
Aggiunto (Added)
- Navigazione tra i campi modulo per la compilazione guidata vocale, sia su
TPdfsia suTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocuseFocusedFormFieldText. Questi spostano un cursore logico di campo sui campi widget della pagina nell'ordine di tabulazione (con avvolgimento alle estremità), così un lettore assistivo può percorrere il modulo, annunciare ogni campo tramiteFormFieldInfo[Index].AlternateName(il tooltip /TU) e compilarlo tramiteFormField[Index] - Evento
TPdfView.OnFormFieldFocusChange, generato quando il cursore di campo si sposta (con l'indice del nuovo campo, oppure -1 quando viene azzerato)
Version 1.46.0
Aggiunto (Added)
- Flusso di contenuti per la lettura assistita ad alta voce:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContenteTPdfView.ReadableContentrestituiscono un elenco ordinato di elementi semanticiTPdfContentFragment, ciascuno con il testo da pronunciare (i glifi reali, oppureActualText/Alt per le figure), un tipo di frammento (titolo con livello, paragrafo, figura, voce di elenco, cella di tabella, collegamento, semplice), la lingua, la pagina in base 1 e i rettangoli di evidenziazione per blocco e per singola riga. I PDF taggati vengono linearizzati nell'ordine di lettura logico a partire dall'albero di struttura; le pagine non taggate ripiegano sull'ordine di rendering, così qualsiasi documento può essere letto ad alta voce - Evidenziazione di lettura sincronizzata su
TPdfView:SetReadingHighlight,ClearReadingHighlighte la proprietà pubblicataReadingHighlightColorevidenziano il blocco attualmente in lettura, sopra le sovrapposizioni di ricerca e selezione - Nuovi tipi pubblici
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindeTPdfReadingOrderSource, e il nuovo helperClassifyStructType
Version 1.45.0
Aggiunto (Added)
ValidatePdfUaora percorre anche l'albero di struttura taggato attivo e segnala tre violazioni di contenuto ad alta confidenza che la scansione a livello di byte non è in grado di rilevare: un elementoFigureprivo di voce Alt e di ActualText (ISO 14289-1, 7.3), un elementoFormulasenza attributo Alt (7.7) e un elementoNoteche manca di un ID univoco (7.9). Tre nuovi valori diTPdfUaValidationIssueespongono questi problemi:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltepvuaiNoteMissingId. La traversata dell'albero viene saltata per i documenti non taggati- Nuovo helper pubblico
ValidatePdfUaStructureElementsche applica le regole dell'albero di struttura a un elenco piatto di elementi (come restituito daTPdf.StructureElements), consentendo di eseguire o testare i controlli in unit test senza caricare un documento completo
Version 1.44.5
Corretto (Fixed)
- Il controllo di incorporamento font di
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) ora rileva anche i font semplici non incorporati che non contengono alcun/FontDescriptor, in particolare i 14 font standard Type 1 (Helvetica, Times, Courier e così via) che PDF/A richiede vengano incorporati senza alcuna esenzione. In precedenza un font di questo tipo passava inosservato; il controllo ora conta anche i dizionari di font semplici (/Type1,/TrueType,/MMType1) rispetto ai programmi font incorporati, rispecchiando la correzione PDF/UA introdotta in 1.44.3
Version 1.44.4
Corretto (Fixed)
ValidatePdfVTora respinge alberi DPart ISO 16612-2 §6.5 malformati in cui/DPartsè un array piatto di riferimenti invece dell'array of arrays richiesto, oppure in cui un leaf DPart ripete la pagina/Startcome/Endanche se l'intervallo contiene una sola paginaValidatePdfVTora valida i nomi/NodeNameListcome valori XML NMTOKEN dopo l'espansione degli escape#xxdi PDF name, quindi i nomi di livello gerarchico non validi vengono segnalati tramitepvviMissingDPartRootinvece di essere accettati come struttura DPart utilizzabile
Version 1.44.3
Corretto (Fixed)
- Il controllo di incorporamento font di
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) ora rileva anche i font semplici non incorporati che non contengono alcun/FontDescriptor, in particolare i 14 font standard Type 1 (Helvetica, Times, Courier e così via) per i quali PDF/UA non prevede esenzioni dall'incorporamento. In precedenza un font di questo tipo passava inosservato e un documento che lo utilizzava poteva essere segnalato come conforme; il controllo ora conta anche i dizionari di font semplici (/Type1,/TrueType,/MMType1) rispetto ai programmi font incorporati
Version 1.44.2
Corretto (Fixed)
ValidatePdfVTora lascia un marcatorepdfvtid:GTS_PDFVTVersionpresente ma non riconosciuto comepvcUnknowninvece di declassarlo apvcNone, così stringhe non valide a livello di file comePDF/VT-2srestano distinguibili dai documenti che non portano alcun marcatore PDF/VT; PDF/VT-2s viene identificato dal MIME stream header in ISO 16612-2 Annex A, non dal marker XMP di un file PDF- Il controllo
/DPartRootora valida in modo più rigoroso la tree semantics di ISO 16612-2 §6.5:/DPartRootNodee/NodeNameListdevono descrivere la profondità DPart effettiva, i DPart parent links devono formare un albero,/Starte/DPartssono mutuamente esclusivi, e il/DPartdi ogni pagina deve puntare al leaf DPart che la copre nello stesso ordine depth-first del page tree
Version 1.44.1
Corretto (Fixed)
SaveAsPdfVTora scrive una Document Part Hierarchy minima di ISO 16612-2 §6.5 quando il PDF sorgente non contiene un/DPartRootutilizzabile. L'albero generato collega ogni pagina tramite/DPart, conserva una gerarchia valida esistente e lascia i metadati destinatario/DPM più ricchi al workflow chiamanteValidatePdfVTora valida la struttura DPart utilizzabile, legge i valori XMP PDF/VT sia dagli attributi RDF sia dal testo degli elementi, e applica l'abbinamento esatto tra PDF/VT e base PDF/X: PDF/VT-1 richiede PDF/X-4, mentre PDF/VT-2 richiede PDF/X-4p, PDF/X-5g o PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2non scrive più marcatori PDF/VT-2 monofile non validi. Il writer monofile normalizza l'output a PDF/VT-1 perché PDF/VT-2 richiede semantica di insieme di file
Version 1.44.0
Aggiunto (Added)
ValidatePdfUasegnala ora anche le violazioni PDF/UA a livello di contenuto verificabili sui byte, oltre ai marcatori di formato file: un programma di font non incorporato (ISO 14289-1, 7.21.4), un font privo di una CMap/ToUnicodein assenza di una codifica di font semplice esente (7.21.7), e un documento che contiene annotazioni ma non dichiara alcun ordine di tabulazione/Tabs /Ssulla pagina (7.18.3)- Tre nuovi valori di
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeepvuaiMissingTabsOrder— vengono restituiti daValidatePdfUae inclusi nel rapporto di preflight. Si tratta di euristiche approssimative concepite come suggerimenti di preflight piuttosto che come una verifica completa di ISO 14289-1
Version 1.43.1
Corretto (Fixed)
SaveAsPdfUaapplica ora obbligatoriamente le voci di catalogo ISO 14289-1, 7.1/ViewerPreferences/DisplayDocTitle truee/MarkInfo/Marked true/Suspects falseanche quando il documento sorgente fornisce già tali dizionari con valori mancanti o in contrasto. In precedenza i marcatori venivano inseriti solo quando i dizionari erano completamente assenti; pertanto un sorgente che conteneva, ad esempio, un/ViewerPreferencesprivo diDisplayDocTitleoppure un/MarkInfocon/Marked falseproduceva un file non conforme- Le chiavi preesistenti in un dizionario
/ViewerPreferenceso/MarkInfogià presente vengono conservate, e un dizionario fornito come riferimento indiretto viene risolto prima che le chiavi obbligatorie vengano applicate
Version 1.43.0
Aggiunto (Added)
ValidatePdfAapplica ora le regole PDF/A-2 / PDF/A-3 per i file incorporati e associati e per il testo di livello U. I file incorporati restano respinti per PDF/A-1; per PDF/A-3 un file incorporato privo della chiave/AFRelationshiprichiesta (ISO 19005-3 Allegato E) viene segnalato, mentre gli allegati PDF/A-2 sono consentiti (la loro conformità non viene verificata in modo ricorsivo). Un nuovo problemapvaiUnicodeMappingMissingsegnala un documento PDF/A-2u o PDF/A-3u i cui font non contengono alcuna tabella di corrispondenza/ToUnicode(ISO 19005-2 6.2.11.7). La trasparenza e il contenuto opzionale restano segnalati solo per PDF/A-1
Version 1.42.0
Aggiunto (Added)
- PDF/A-2 (ISO 19005-2) e PDF/A-3 (ISO 19005-3) sono ora supportati a tutti e tre i livelli di conformità — a, b e u — da
SaveAsPdfA,ValidatePdfAe dalla proprietàPdfAConformance. L'enumerazioneTPdfAConformanceacquisiscepac2a,pac2u,pac3aepac3u(PDF/A-1 non ha il livello u). Il salvataggio scrive i valoripdfaid:part(2 o 3) epdfaid:conformance(A, B o U) corrispondenti, mantenendo il sottotipo OutputIntentGTS_PDFA1che ISO 19005-2 conserva per compatibilità. Una richiesta di livello A viene comunque declassata al corrispondente livello B (per qualsiasi parte) quando il documento non possiede la struttura con tag richiesta da quel livello
Version 1.41.0
Aggiunto (Added)
ValidatePdfAora rileva le violazioni PDF/A a livello di contenuto che l'iniezione di marcatori non può correggere, oltre ai marcatori strutturali che già segnalava: JavaScript e altre azioni vietate, azioni aggiuntive (/AA), file incorporati,LZWDecode, trasparenza (soft masks e transparency groups), contenuto opzionale (/OCProperties), sottotipi di annotazione vietati (FileAttachment, Sound, Movie, 3D, Screen),/NeedAppearances truee/XFAdi AcroForm, font i cui descrittori non contengono un programma di font incorporato, e una dichiarazione di livello A fatta senza la struttura con tag richiesta da ISO 19005-1 6.8. I controlli su trasparenza, contenuto opzionale e file incorporati si applicano solo a PDF/A-1 (queste funzionalità sono consentite in PDF/A-2 e PDF/A-3). Nuovi valoriTPdfAValidationIssueespongono ciascun caso; i valori esistenti restano invariati
Version 1.40.3
Corretto (Fixed)
SaveAsPdfAora rimuove qualsiasi cifratura del documento di origine prima di produrre l'output PDF/A. ISO 19005-1 6.1.3 vieta la chiave/Encryptdel trailer, ma il percorso di salvataggio in precedenza conservava il gestore di sicurezza dell'origine, quindi salvare un documento cifrato come PDF/A produceva un file cifrato e non conforme. Il salvataggio PDF/A ora decifra prima il documento. I documenti non cifrati non sono interessati
Version 1.40.2
Corretto (Fixed)
- Impedito a
SaveAsPdfAdi emettere una falsa dichiarazione di conformità PDF/A livello A. Quando viene richiesto il livello A (pac1a) ma il documento di origine non possiede i marcatori di struttura con tag richiesti da ISO 19005-1 6.8 — un/StructTreeRootnel catalogo e un dizionario/MarkInfocon/Marked true— il file salvato viene ora identificato come il corrispondente livello B (pdfaid:conformance=B) invece di dichiarare il livello A. L'output PDF/A-1b puramente visivo non è interessato
Version 1.40.1
Corretto (Fixed)
- Rafforzata la convalida di conformità della versione PDF in modo che l'azione
SetOCGState(set-optional-content-group-state) venga riconosciuta come funzionalità PDF 1.5. Il salvataggio verso un target PDF 1.2, 1.3 o 1.4 che contiene un'azioneSetOCGStateviene ora rifiutato per allinearsi a ISO 32000-1 (Table 198); in precedenza un'azione di questo tipo poteva passare nell'output a versione inferiore. La distinta azione obsoleta PDF 1.2SetStatecontinua a essere accettata a partire da PDF 1.2
Version 1.40.0
Aggiunto (Added)
- Collegata l'API
FPDFPageObj_AddExistingMark()di PDFium, che applica una marcatura di contenuto esistente a un oggetto di pagina. Quando oggetti di pagina consecutivi condividono la stessa marcatura, il PDF salvato li unisce in un'unica marcatura che li comprende tutti; gli oggetti non consecutivi ricevono copie separate - Collegata l'API
FPDFTextObj_SetFontSize()di PDFium per modificare la dimensione in punti di un oggetto di testo esistente, a complemento del collegamento già presente diFPDFTextObj_GetFontSize()
Modificato (Changed)
- Aggiornate le DLL di runtime PDFium incluse (Win32 e Win64, build standard e V8) allo snapshot PDFium del 2026-06-02
Version 1.39.53
Modificato (Changed)
- Gli esempi Delphi
PDFViewer,SplitVieweMultiPageViewerora aprono i documenti in modalitàZoom to Pageper impostazione predefinita - Il rendering iniziale ora adatta l'intera pagina all'area del visualizzatore prima che l'utente scelga un livello di zoom manuale
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installer sono stati aggiornati per indicare 1.39.53
Version 1.39.52
Modificato (Changed)
Demo\Lazarus\CreatePDFè stato migliorato: l’esempio introduttivo ora genera un PDF di due pagine con vector paths, table content, embedded image, text annotation, rotated text e un document-building walkthrough più chiaro- Sono state aggiunte pagine
README.htmlpiù curate per ogni cartella demo Delphi, C++Builder e Lazarus, sostituendo l’ultimo README demo solo testuale con una guida leggibile nel browser - Aggiornati
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell’installer a 1.39.52
Version 1.39.51
- I riepiloghi batch di
Demo\Delphi\PreflightReportCliora includono totali di stato standard per risultati Pass, Action required e Review negli standard selezionati - Le righe per file ora includono conteggi action-required e review nei riepiloghi TXT / HTML / JSON / CSV, rendendo più semplice ispezionare gli artefatti CI senza aprire ogni report generato
- Aggiornati
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installer a 1.39.51
Version 1.39.50
- La modalità batch per directory di
Demo\Delphi\PreflightReportCliè stata migliorata:batchdir=folderora raccoglie i percorsi PDF trovati, li ordina e poi genera i report in un ordine stabile - Le scansioni ricorsive delle directory ora producono un ordine di report e righe di riepilogo riproducibile, mentre l'elaborazione esplicita
batch=list.txtcontinua a preservare l'ordine del file elenco - Aggiornati
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installer a 1.39.50
Version 1.39.49
- I riepiloghi batch di
Demo\Delphi\PreflightReportCliora registrano le run settings: tipo di origine, percorso di origine, stato ricorsivo, directory di output, formato del report, standard selezionati e modalitàfailon= - I riepiloghi JSON ora includono un oggetto
run, i riepiloghi TXT e HTML mostrano una sezione run settings, e le righe CSV ripetono le stesse colonne di audit per fogli di calcolo e CI pipelines - Aggiornati
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installer a 1.39.49
Version 1.39.48
- Il batch output naming di
Demo\Delphi\PreflightReportClie stato migliorato, cosi duplicate input file names che condividono lo stessooutdir=non sovrascrivono piu i rispettivi generated reports - Batch runs ora aggiungono i suffissi
-2,-3e successivi quando un generated report path e gia stato assegnato nella stessa esecuzione, e summaries registrano il collision-safe report path finale TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per indicare 1.39.48
Version 1.39.47
- I batch summaries di
Demo\Delphi\PreflightReportClisono stati migliorati: gli output TXT e JSON ora includono aggregate totals per total files, processed files, failed files, issues e corrispondenzefailon= - CSV summaries restano una row table pura per i consumers esistenti, mentre HTML summaries continuano a mostrare le stesse aggregate metrics nel dashboard header
TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per indicare 1.39.47
Version 1.39.46
Demo\Delphi\PreflightReportClie stato migliorato consummary=batch.html/.htmcosi i batch runs possono produrre un browser-readable dashboard oltre ai TXT / CSV / JSON manifests- HTML summaries mostrano le metriche total, processed, failed, issue e corrispondenza
failon=, poi elencano ogni input con report links, status, counts ed error text TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per indicare 1.39.46
Version 1.39.45
Demo\Delphi\PreflightReportClie stato migliorato conbatchdir=foldererecursivecosi gli script possono esaminare PDF folders direttamente senza scrivere prima un list file- Directory batch mode riusa il comportamento
outdir=,summary=,standards=efailon=di list-based batch mode; non-recursive esamina solo la folder selezionata erecursiveinclude subfolders TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per indicare 1.39.45
Version 1.39.44
- Migliorato
Demo\Delphi\PreflightReportCliconsummary=batch.csv|json|txtcosì i batch runs possono emettere un machine-readable manifest accanto ai per-file reports - Batch summaries includono ogni input path, report path, status, standard count, passed count, issue count, stato di match
failon=ed error text per CI jobs e scripts esterni - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.44
Version 1.39.43
- Migliorato
Demo\Delphi\PreflightReportCliconbatch=list.txteoutdir=reportscosì gli scripts possono generare preflight reports per un elenco di file PDF in una sola esecuzione - Batch mode salta le righe vuote e le righe di commento
#, deriva ogni report name.preflight.<ext>dal PDF di input, continua dopo per-file errors e riepiloga processed e failed files prima di terminare - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.43
Version 1.39.42
- Migliorato
Demo\Delphi\PreflightReportCliconfailon=none|issues|action|review, così i CI jobs possono trasformare i preflight results generati in exit codes deterministici - La CLI ora restituisce exit code 2 quando una
failon=rule selezionata corrisponde dopo la generazione del report file e dell'optional attached-report PDF, mentre i runtime errors continuano a restituire exit code 1 - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.42
Version 1.39.41
- Migliorato
Demo\Delphi\PreflightReportCliconattach=output.pdf, così un preflight report generato può essere incorporato come document-level attachment in una nuova PDF copy - La CLI mantiene su disco il TXT / HTML / Markdown / JSON / CSV report file generato e rifiuta di allegarlo al input PDF path originale, riducendo il rischio di sovrascrittura accidentale
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.41
Version 1.39.40
- Aggiunto
Demo\Delphi\PreflightReportCli, un Delphi console companion per generareFPdfPreflightReportin modo scriptable senza aprire un viewer - La CLI supporta la creazione di sample senza argomenti, input / output arguments, optional password, formati di output
text/html/md/json/csvestandards=filtering per PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.40
Version 1.39.39
FPdfPreflightReporte stato ampliato conTPdfPreflightReport.ToMarkdowneSaveMarkdownToFile, cosi i preflight reports possono essere esportati come Markdown adatto agli issue tracker- Gli esempi
PreflightReportper Delphi, C++Builder e Lazarus aggiungono Markdown preview switching e azioni Save MD accanto al workflow TXT / HTML / JSON / CSV esistente TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per riportare 1.39.39
Version 1.39.38
- Gli esempi
SecurityAuditper Delphi, C++Builder e Lazarus aggiungono JSON audit report export accanto al workflow TXT save / copy esistente - Il JSON report contiene
format,generatedAt,summary,findingCounte righefindingsstrutturate con campi severity, area e detail TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per riportare 1.39.38
Version 1.39.37
FPdfPreflightReportè stato migliorato conTPdfPreflightReport.ToCsveSaveCsvToFile, così i preflight reports possono essere esportati come spreadsheet-friendly CSV- I samples Delphi, C++Builder e Lazarus
PreflightReportsono stati aggiornati con CSV preview switching e Save CSV actions insieme al workflow TXT / HTML / JSON esistente TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per indicare 1.39.37
Version 1.39.36
FPdfPreflightReportè stato migliorato conTPdfPreflightReport.IssueCategoryCountse con i tipi riutilizzabiliTPdfPreflightIssueCategoryCounteTPdfPreflightIssueCategoryCountsper aggregare i marker-level issues per categoryTPdfPreflightReport.ToText,ToHtmleToJsonsono stati aggiornati affinché l'output generato da PreflightReport includa issue-category count summaries insieme a per-standard rows e detailed issue recommendations- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.36
Version 1.39.35
- Il sample
PrintDialogesteso è stato rinominato inPrintPreferencesper Delphi, C++Builder e Lazarus, così il demo name ora corrisponde al workflow di PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border e duplex mapping - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.35
Version 1.39.34
Demo\Delphi\PrintPDFora supporta il caricamento PDF tramite trascinamento, e il workflow esistenteDemo\CBuilder\PrintPDFè documentato insieme agli esempi PrintPDF Delphi e Lazarus- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.34
Version 1.39.33
- Aggiunto
Demo\CBuilder\SplitView, completando SplitView sample matrix per Delphi, C++Builder e Lazarus - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.33
Version 1.39.32
- Aggiunto
Demo\Lazarus\SplitView, portando side-by-side PDF comparison in Lazarus con two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets e rotation - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.32
Version 1.39.31
- Aggiunto
Demo\Lazarus\PrintPDF, portando lo standard PDF print workflow in Lazarus con preview navigation, page ranges, copies, collate mode, progress e cancellation - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.31
Version 1.39.30
- Aggiunto
Demo\Lazarus\FontProperties, completando la matrice di esempi FontProperties in Delphi, C++Builder e Lazarus - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.30
Version 1.39.29
- Aggiunto
Demo\CBuilder\FontProperties, portando l'ispezione indicizzata dei metadati di caratteri e font in C++Builder insieme all'esempio Delphi - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.29
Version 1.39.28
- Aggiunto
Demo\Delphi\ExtractTextPages, completando la matrice di esempi per l'estrazione del testo pagina per pagina in Delphi, C++Builder e Lazarus - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.28
Version 1.39.27
- Aggiunto
Demo\Lazarus\PrintDialog, completando il PrintDialog sample matrix in Delphi, C++Builder e Lazarus - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.27
Version 1.39.26
- Aggiunto
Demo\CBuilder\PrintDialog, portando il N-up printing e PDF author print preferences workflow su C++Builder insieme al sample Delphi - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.26
Version 1.39.25
- Aggiunto
Demo\CBuilder\ViewerInteractionLab, completando il ViewerInteractionLab sample matrix in Delphi, C++Builder e Lazarus - Aggiornati library build workflow e Win64 C++Builder package outputs affinché i
TPdfViewviewer interaction methods vengano collegati correttamente nei Win64 demos - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.25
Version 1.39.24
- Aggiunto
Demo\Lazarus\ViewerInteractionLab, portando il focused viewer interaction workflow su Lazarus insieme al sample Delphi - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.24
Version 1.39.23
- Aggiunto
Demo\Lazarus\SearchAndSelect, completando la SearchAndSelect sample matrix per Delphi, C++Builder e Lazarus - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.23
Version 1.39.22
- Aggiunti
Demo\CBuilder\ContentExtractionLabeDemo\Lazarus\ContentExtractionLab, portando il multi-category content extraction workflow a tutti i demo IDE supportati - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.22
Version 1.39.21
- Migliorati
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportcon un preview format selector per controllare text o JSON output prima di salvare i report - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.21
Version 1.39.20
- Aggiunto l'export JSON a
FPdfPreflightReporttramiteTPdfPreflightReport.ToJsoneSaveJsonToFile, con summary leggibile dalla macchina, per-standard status / priority, next action e issue detail - Aggiornati
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportcon azioni Save JSON accanto all'export TXT / HTML - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.20
Version 1.39.19
- Migliorato
FPdfPreflightReportconTPdfPreflightStatus, issue categories, per-standard priority e next-action guidance nei report TXT / HTML - Aggiornati
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportper mostrare status, priority, issue count e next action nella summary grid - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.19
Version 1.39.18
- Aggiunto
Demo\Lazarus\SecurityAudit, completando la matrice di esempi Delphi, C++Builder e Lazarus per il workflow di audit PDF risk-surface in sola lettura - L'esempio Lazarus enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability e unsupported-feature callbacks, quindi salva o copia la finding list come TXT report
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.18
Version 1.39.17
- Aggiunto
Demo\CBuilder\SecurityAudit, portando il workflow di audit PDF risk-surface in sola lettura in C++Builder accanto all'esempio Delphi esistente - L'esempio C++Builder enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability e unsupported-feature callbacks, quindi salva o copia la finding list come TXT report
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.17
Version 1.39.16
- Aggiunto
Demo\CBuilder\SearchAndSelect, portando il workflow viewer SearchAndSelect autonomo in C++Builder accanto all'esempio Delphi esistente - L'esempio C++Builder crea o apre PDFs, elenca matches su tutte le pagine con page / character-index previews, supporta Previous / Next e double-click navigation, ed evidenzia i matches della pagina corrente con
HighlightSearchText - Espone anche
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangee opzioni spreadDisplayMode; i metadati di versione ora riportano 1.39.16
Version 1.39.15
- Aggiunto
Demo\CBuilder\WatermarkStamp, completando la demo matrix Delphi, Lazarus e C++Builder per workflow riutilizzabili di Form XObject watermark e stamp - L’esempio C++Builder crea PDF target e stamp, riusa la stamp page tramite
CreateXObjectFromPage, applica transforms conTPdfMatrixe salva centered watermarks, corner stamps e page number labels - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.15
Version 1.39.14
- Aggiunto
Demo\Lazarus\WatermarkStamp, portando in Lazarus il workflow riutilizzabile di Form XObject watermark e stamp - L’esempio Lazarus crea PDF target e stamp, riusa la stamp page tramite
CreateXObjectFromPage, applica transforms conTPdfMatrixe salva centered watermarks, corner stamps e page number labels - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.14
Version 1.39.13
- Aggiunto
Demo\CBuilder\PreflightReport, completando la matrice di demo Delphi, Lazarus e C++Builder per il workflow riutilizzabileFPdfPreflightReport - L’esempio C++Builder usa
FPdfPreflightReport.hppper generare standard summaries, TXT report previews, TXT / HTML report files e il comportamento Open Last Report - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.13
Version 1.39.12
- Aggiunto
Demo\Lazarus\PreflightReport, portando in Lazarus il workflow di preflight report per PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - L’esempio Lazarus può aprire o creare un PDF, selezionare target standards, visualizzare summary rows e TXT report output, salvare TXT / HTML reports e aprire il report salvato più di recente
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.12
Version 1.39.11
Demo\Delphi\SearchAndSelectè stato migliorato con un elenco dei risultati di ricerca su tutte le pagine che registra page number, character index e preview text- Aggiunti Previous / Next match navigation e double-click result jumping, mantenendo il comportamento di
HighlightSearchTextsulla pagina corrente - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per indicare 1.39.11
Version 1.39.10
Demo\Delphi\SecurityAuditè stato migliorato con azioni Save Report e Copy Report che esportano il summary corrente e le finding rows come TXT audit report- Il demo ora cancella il report export state quando l'audit panel viene reimpostato, mantenendo i reports copiati o salvati allineati ai findings visibili
TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per riportare 1.39.10
Version 1.39.9
Demo\Delphi\ContentExtractionLabè stato migliorato con source-PDF save, report copy-to-clipboard e azioni all / none category selection- Il demo ora invalida il report corrente quando category selection cambia, così le TXT / JSON exports riflettono il extraction scope visibile
TPdf.AboutInfo, Lazarus package metadata e installer version metadata sono stati aggiornati per riportare 1.39.9
Version 1.39.8
- Aggiunto
Demo\Delphi\ContentExtractionLab, un workflow sample unificato di content extraction per document metadata, page text, page objects, images, attachments, links, annotations, bookmarks e font / character metrics - Il sample può aprire un PDF esistente o creare un synthetic PDF con contenuti text, image, attachment e annotation, quindi generare summary rows e report TXT / JSON dettagliati
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.8
Version 1.39.7
- Aggiunto
Lib\FPdfPreflightReport.pas, un helper riutilizzabile per report che raccoglieValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfReValidatePdfVTin un oggettoTPdfPreflightReport - Aggiunto
Demo\Delphi\PreflightReport, un workflow sample che apre o crea un PDF, seleziona target standards, mostra summary rows e issue recommendations, e salva report TXT o HTML - I report generati descrivono esplicitamente il limite della marker-level validation integrata, così le applicazioni possono affiancare content-level preflight tools dedicati quando necessario
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata, package project lists e installer version metadata per indicare 1.39.7
Version 1.39.6
- Aggiunto
Demo\Delphi\SearchAndSelect, un esempio viewer workflow mirato per search highlighting, text selection, selected-text preview, copy, clear e spread display modes - L'esempio dimostra
HighlightSearchText, opzioni di ricerca match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardeClearSelectionsenza aggiungere nuove API di libreria - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.6
Version 1.39.5
Demo\Delphi\ViewerInteractionLabè stato esteso in un esempio di esperienza UI del viewer nello stile di SearchAndSelect conHighlightSearchText, opzioni match-case / whole-word, anteprima del testo selezionato e controlli esistenti di selection / clipboardDemo\Delphi\PrintDialogè stato esteso per ispezionare PDF author print preferences:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlinge il duplex mapping visibile diSetPdfPrintPaperHandlingDevMode- Aggiunto
Demo\Delphi\SecurityAudit, un esempio risk-surface in sola lettura che elenca permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state e V8 / XFA helper availability - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.5
Version 1.39.4
- Aggiunti
Demo\CBuilder\ImageToPDFeDemo\Lazarus\ImageToPDF, completando la matrice di esempi ImageToPDF per Delphi, C++Builder e Lazarus - I nuovi esempi dimostrano selezione multi-immagine, anteprima dell'immagine selezionata, una pagina PDF per immagine, dimensionamento pagina A4 portrait / landscape, ridimensionamento centrato dell'immagine, avanzamento per immagine e apertura del PDF generato dopo il salvataggio
- Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.4
Version 1.39.3
- Aggiunto
Demo\CBuilder\BatchExport, portando il workflow di esportazione multi-file da PDF a JPG in C++Builder insieme agli esempi Delphi e Lazarus esistenti - L'esempio dimostra
LoadCustomDocument,IPdfCancellationTokenSource, inputTFileStreamin streaming, avanzamento per file e per pagina, gestione dell'annullamento, input DPI / quality / password e apertura della cartella di output al completamento - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.3
Version 1.39.2
- Aggiunto
Demo\Delphi\WatermarkStamp, un esempio eseguibile di workflow Form XObject che crea un PDF di destinazione e uno stamp PDF riutilizzabile, quindi applica filigrane centrate, timbri in alto a destra ed etichette con numero di pagina su ogni pagina - L'esempio dimostra
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixeFPDFPageObj_SetMatrixsenza aggiungere nuove API della libreria - Aggiornato
Docs\en-us\Examples.htmlper usare il pattern correnteTPdfMatrix.Handlequando si passano matrici aFPDFPageObj_SetMatrix - Aggiornati
TPdf.AboutInfo, Lazarus package metadata e installer version metadata per riportare 1.39.2
Version 1.39.1
- Aggiunto
Demo\Delphi\ViewerInteractionLab, un esempio mirato diTPdfViewper modalità di visualizzazione, modalità di adattamento, colori pagina, rotazione, selezione testuale dell'utente, azioni Appunti e feedback delle coordinateDeviceToPage - Aggiunto
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabcosì gli utenti Lazarus possono eseguire il workflow di validazione e marker-output per PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - Le unit standard sono ora elencate in
Lib\37.0\PDFiumPas.dprojeLib\FPC\PDFiumLaz.lpk, e la build del demo DelphiSplitViewè stata corretta rimuovendo un import duplicato diWinapi.ShellAPI - Corretti i blocchi della build batch dei demo Delphi in
BatchExport,PDFViewer,MultiPageViewereSplitViewsenza modificarne il comportamento a runtime - Corretta la compatibilità della build batch dei demo C++Builder in
PDFViewereMultiPageViewersostituendonullptrconNULLper la modalità di progetto corrente - Aggiornati
TPdf.AboutInfo, i metadati del pacchetto Lazarus e i metadati di versione dell'installer per riportare 1.39.1
Version 1.39.0
- Aggiunto
Demo\Delphi\StandardsLab, un esempio eseguibile di workflow per standard che carica o crea un PDF, esegueValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfReValidatePdfVT, e mostra conformance rilevata, stato di superamento e conteggi issue in una sola griglia - I pulsanti di salvataggio di StandardsLab chiamano
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfReSaveAsPdfVT, rendendo visibile l'output marker degli standard PDF senza scrivere un harness personalizzato - Aggiornati
TPdf.AboutInfo, metadati del pacchetto Lazarus e metadati versione dell'installer per indicare 1.39.0
Version 1.38.0
- Gli overlay di ricerca e selezione testo di
TPdfViewora usano alpha blending reale invece della pittura con mask logica, preservando il contenuto della pagina sotto le evidenziazioni - Aggiunto
SetPdfPrintPaperHandlingDevModeper mappareTPrintPaperHandlingsui valori WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALeDMDUP_VERTICAL TPdfView.SmoothScrollora anima i comandi line/page della scrollbar in timer-driven segments; il thumb tracking resta immediatoTPdf.AboutInfoe metadati versione degli installer aggiornati a 1.38.0
Version 1.37.0
TPdfora possiede un lock di rendering per istanza che serializzaRenderPage,RenderTile,RenderPageProgressive, reload pagina e unload documento. Il rendering da worker tramite componente condiviso è ora praticabile; l’applicazione coordina ancora mutazioni e ciclo di vita- Corretto il wrapper bitmap zero-copy per rifiutare DIB
TBitmapbottom-up e usare un buffer PDFium con copia finale, eliminando errori stride corruption / access violation nei test render VCL - Comportamento di selezione
TPdfViewrifinito:AllowUserTextSelectionblocca solo l’input utente, le API di selezione da codice continuano a disegnare, eSelectAllsegue lo spread visibile reale così la copertina non seleziona più pagina 2. Test Delphi, Lazarus e C++Builder estesi TPdf.AboutInfoe metadati versione degli installer aggiornati a 1.37.0
Version 1.36.0
- Attivata la selezione testuale per l'utente finale in
TPdfView— la proprietàAllowUserTextSelectionriservata in v1.17.0 ora governa una pipeline completa di selezione tramite trascinamento. Un clic sinistro su un carattere di testo entra in modalità selezione (hit-test automatico); un clic sinistro su un'area vuota continua a eseguire il pan come prima. Il widget form-fill mantiene la priorità, quindi un clic su un campo modulo continua a mettere a fuoco il campo invece di avviare una selezione - Il doppio clic seleziona la parola, il triplo clic seleziona la riga,
Ctrl+Aseleziona la pagina corrente (entrambe le pagine nelle modalità di visualizzazione spread) eCtrl+Ccopia la selezione negli Appunti di Windows comeCF_UNICODETEXT Shift+Left/Shift+Rightestende la selezione di un carattere alla volta (passando anche alla pagina adiacente in modalità spread);Shift+Home/Shift+Endla estende fino al bordo visivo della riga usando l'altezza del riquadro del carattere seme come tolleranza di clustering della riga, così le righe con corpi misti restano raggruppate correttamente- Quando il puntatore passa sopra il testo il cursore diventa
crIBeam; quando esce dal testo torna al cursore predefinito. Durante un trascinamento di selezione, entrare in una dead zone di 20 pixel lungo qualsiasi bordo del viewer attiva lo scorrimento automatico della pagina (tick da 50 ms, 16 px / tick, limitato agli stessi confini usati dal percorso di pan), così la selezione può estendersi oltre il viewport corrente senza dover prima rilasciare il mouse - La selezione tra pagine funziona nelle modalità di visualizzazione spread
dmTwoPageContinuous,dmTwoPageContinuousWithCover: un trascinamento avviato sulla pagina sinistra e terminato su quella destra seleziona l'intervallo contiguo che attraversa entrambe.SelectedTextunisce le porzioni per pagina con CR/LF, così il testo ricostruito si legge come normale contenuto multilinea - Nuova proprietà pubblicata
SelectionColor(predefinitaclHighlight, il colore di selezione di sistema di Windows) — indipendente daHighlightColor, che colora in giallo i risultati di ricerca. Le evidenziazioni di ricerca e una selezione trascinata attiva possono quindi apparire contemporaneamente sullo schermo senza conflitto di colori - Nuovo evento pubblicato
OnSelectionChange, emesso ogni volta che gli intervalli materializzati della selezione cambiano davvero e mai quando la stessa selezione viene riapplicata identica, così le applicazioni host possono collegarlo direttamente al testo della barra di stato o allo stato abilitato dei pulsanti senza debouncing - Nuova API pubblica su
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Questi sono entry point a livello di codice e funzionano sempre indipendentemente daAllowUserTextSelection— il flag limita solo l'input dell'utente (mouse, Ctrl+C, Ctrl+A, Shift+arrows), così gli host kiosk possono disabilitare la selezione guidata dall'utente continuando però a costruire pulsanti toolbar "Select All / Copy" che pilotano la stessa API - Un menu contestuale predefinito con voce
Copy/复制viene collegato automaticamente quando l'host non ha assegnato il proprioPopupMenu— la normale sequenza "seleziona testo, clic destro, copia" funziona subito. La didascalia viene scelta tra inglese e cinese in base aSysLocale.PriLangID; gli host che necessitano di una localizzazione completa (o di un menu più ricco) devono solo assegnare il proprioPopupMenue il predefinito viene soppresso - La selezione viene cancellata automaticamente su
SetPdf,SetPageNumber,SetActive(False)e nei passaggi diDisplayMode, conOnSelectionChangeemesso esattamente una volta quando la selezione precedente non era vuota. Il sottosistema form-fill mantiene la priorità — mentre un campo modulo è in modifica, tutte le scorciatoie da tastiera della selezione cedono il passo così il campo riceveCtrl+C/Ctrl+A/Shift+arrowsper la propria selezione - Le suite di regressione Delphi e Lazarus sono state estese a 202 casi ciascuna, e la suite C++Builder a 159 casi, coprendo valori predefiniti, round-trip, comportamento dell'API pubblica, cancellazioni su cambio stato, drag del mouse (hit-text / hit-blank), clic contro drag, commutazione del cursore IBeam, doppio clic parola, triplo clic riga, scorciatoie da tastiera, collegamento / soppressione / didascalia del popup predefinito e selezione cross-page nelle modalità spread, inclusa una verifica di round-trip CR/LF degli Appunti
Version 1.35.0
- Aggiunto supporto per l'iniezione dei marker PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT promuove il documento corrente a un file conforme PDF/VT-1 o PDF/VT-2 (il sottoinsieme PDF per la stampa variabile e transazionale). PDF/VT si basa su PDF/X-4 — ISO 16612-2 §6.2.1 richiede che ogni file PDF/VT-1 sia conforme anche a PDF/X-4 — quindi l'iniettore scrive l'intero set di marker PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)e/Trapped, catalogo/OutputIntentsche fa riferimento a un dizionario OutputIntent con profilo ICC incorporato) insieme alle proprietà specifiche di PDF/VT - L'iniezione specifica di PDF/VT copre XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" o "PDF/VT-2" secondo §6.3 Table 2) epdfvtid:GTS_PDFVTModDate(mantenuto sincronizzato conxmp:ModifyDatesecondo §6.3 NOTE 1), oltre a una descrizione pdfaExtension:schemas che dichiara sia il namespace pdfxid sia quello pdfvtid (URI NPEShttp://www.npes.org/pdfx/ns/id/ehttp://www.npes.org/pdfvt/ns/id/). Il trailer include un array/ID - Aggiunto TPdf.SaveAsPdfVTToStream per l'output PDF/VT in memoria e una scorciatoia predefinita
TPdf.SaveAsPdfVT(FileName)che produce PDF/VT-1 con OutputIntent sRGB IEC61966-2.1 incluso (3144 byte, lo stesso profilo usato da SaveAsPdfA / SaveAsPdfX) e/Trapped /False - Aggiunto TPdf.ValidatePdfVT: verifica un PDF aperto per i marker di conformità PDF/VT (presenza di XMP
pdfvtid:GTS_PDFVTVersioneGTS_PDFVTModDate, uguaglianza trapdfvtid:GTS_PDFVTModDateexmp:ModifyDate, presenza dell'identificatore sottostantepdfxid:GTS_PDFXVersion, presenza di/DPartRootnel catalogo secondo §6.5,/OutputIntentscon/DestOutputProfile, /ID nel trailer, stato di cifratura e presenza dixmp:CreateDate/ModifyDate) e restituisce TPdfVTValidationResult con il livello di conformità rilevato e l'insieme dei problemi trovati - Aggiunta la proprietà TPdf.PdfVTConformance: restituisce il livello di conformità del documento attualmente aperto (pvc1, pvc2, pvcNone o pvcUnknown) senza richiedere una chiamata esplicita a ValidatePdfVT
- Nuovi tipi esportati nella nuova unit FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue e TPdfVTSaveOptions
- La gerarchia Document Part (
DPartRoot/DParttree secondo §6.5) è una struttura di livello applicativo che dipende dalla mappatura destinatario/intervallo di pagine del flusso di stampa variabile. SaveAsPdfVT NON sintetizza un DPart tree — ValidatePdfVT espone l'assenza di/DPartRootcomepvviMissingDPartRootcosì i chiamanti possono instradare i file PDF/VT attraverso un passaggio separato di costruzione del DPart. I requisiti PDF/X-4 a livello di contenuto (embedding font, trasparenza, colore gestito ICC, divieti OPI / JavaScript / Reference XObject e così via) restano responsabilità dell'autore del documento e della pipeline di rendering PDFium - Aggiornata la stringa TPdf.AboutInfo per riportare la versione attuale del prodotto
Version 1.34.0
- Aggiunto supporto per l'iniezione dei marker PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR promuove il documento corrente a un file conforme PDF/R-1 (il sottoinsieme PDF per il trasporto di immagini raster usato per documenti scansionati). L'iniezione copre i requisiti applicabili a livello di formato file — il commento di identificazione di versione univoco
%PDF-raster-1.0scritto tra il dizionario trailer e la parola chiave startxref (§5), il dizionario catalogo ridotto alla white list di §6.3 (sopravvivono solo Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), il Document Information Dictionary ridotto alla white list di §6.4.3 (solo Creator / Producer / CreationDate / ModDate), uno stream XMP /Metadata nel catalogo con le quattro voci di §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) e un array trailer /ID - Aggiunto TPdf.SaveAsPdfRToStream per l'output PDF/R in memoria e una scorciatoia
TPdf.SaveAsPdfR(FileName)per il caso d'uso più comune - Aggiunto TPdf.ValidatePdfR: verifica un PDF aperto per i marker di conformità PDF/R-1 (commento a piè pagina
%PDF-raster-x.y, versione dell'header, assenza di /Type /ObjStm, conformità del catalogo alla white list, conformità del dizionario Info alla white list, presenza dello stream di metadati XMP, trailer /ID) e restituisce TPdfRValidationResult con il livello di conformità rilevato e l'insieme dei problemi trovati - Aggiunta la proprietà TPdf.PdfRConformance: restituisce il livello di conformità del documento attualmente aperto (prc1, prcNone o prcUnknown) senza richiedere una chiamata esplicita a ValidatePdfR
- Nuovi tipi esportati nella nuova unit FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue e TPdfRSaveOptions.
TPdfRSaveOptions.Defaultimposta StripInfoOptionalEntries e StripCatalogOptionalEntries su True, così l'iniettore produce per impostazione predefinita un catalogo e un dizionario Info conformi a §6.3 / §6.4.3; i chiamanti possono impostarli su False per conservare le voci del sorgente (in tal caso l'output non soddisferà quelle clausole PDF/R, ma gli altri marker resteranno applicati) - I requisiti a livello di contenuto restano responsabilità del PDF sorgente: struttura Contents per pagina (§6.5.1), forma MediaBox
[0 0 w h](§6.5.3), restrizioni sui filtri (§6.2.2 — solo FlateDecode, CCITTFaxDecode bitonale, DCTDecode 8-bit gray/RGB), assenza di object streams (§6.2.4) e layout strip secondo §6.6. Questi requisiti non possono essere imposti via post-processing — PDF/R è strutturalmente un sottoinsieme molto più rigido degli altri standard PDF/x e richiede che i byte sorgente vengano generati correttamente. ValidatePdfR espone i problemi di formato file che questa unit può rilevare; abbinarlo a un validatore PDF/R del TWAIN Working Group per verifiche complete - Aggiornata la stringa TPdf.AboutInfo per riportare la versione attuale del prodotto
Version 1.33.0
- Aggiunto supporto per l'iniezione dei marker PDF/X (famiglia ISO 15930): TPdf.SaveAsPdfX promuove il documento corrente a un file conforme PDF/X-1a:2001, PDF/X-3:2002 o PDF/X-4 tramite post-elaborazione del PDF base con un aggiornamento incrementale. L'iniezione copre i requisiti applicabili a livello di formato file — stream XMP con
pdfxid:GTS_PDFXVersion(epdfxid:GTS_PDFXConformanceper PDF/X-1a / PDF/X-3) insieme alla corrispondente descrizione pdfaExtension:schemas, un Document Information Dictionary riscritto con le voci/GTS_PDFXVersion,/GTS_PDFXConformancee/Trapped, un catalogo aggiornato con/OutputIntents [N 0 R]che punta a un dizionario OutputIntent con/S /GTS_PDFXe un profilo ICC incorporato, e un array trailer/ID - Aggiunto TPdf.SaveAsPdfXToStream per l'output PDF/X in memoria e una scorciatoia
TPdf.SaveAsPdfX(FileName)che produce PDF/X-4 con OutputIntent sRGB IEC61966-2.1 incorporato (3144 byte, identico al profilo usato da SaveAsPdfA) - Aggiunto TPdf.ValidatePdfX: verifica un PDF aperto per i marker di conformità PDF/X (identificatore XMP pdfxid e uguaglianza con il valore del dizionario Info, descrizione dello schema di estensione pdfxid, array /OutputIntents con /DestOutputProfile, presenza di Title, trailer /ID, stato di cifratura, presenza di xmp:CreateDate / xmp:ModifyDate) e restituisce TPdfXValidationResult con il livello rilevato e l'insieme dei problemi trovati
- Aggiunta la proprietà TPdf.PdfXConformance: restituisce il livello di conformità del documento attualmente aperto (pxc1a, pxc3, pxc4, pxcNone o pxcUnknown) senza richiedere una chiamata esplicita a ValidatePdfX. La stringa di versione XMP viene analizzata per distinguere i tre livelli di conformità
- Nuovi tipi esportati nella nuova unit FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue e TPdfXSaveOptions.
TPdfXSaveOptions.Defaultpunta a PDF/X-4 con OutputIntent sRGB e/Trapped /False; i chiamanti possono sovrascrivereConformance, fornire un blob CMYKIccProfileDataper i flussi di stampa commerciale o cambiareOutputCondition/OutputConditionIdentifier/RegistryNameper puntare a una specifica voce di registro di caratterizzazione ICC (per esempio FOGRA39, GRACoL2006_Coated1v2) - I requisiti a livello di contenuto (tutti i font incorporati, niente JavaScript, nessuna annotazione visibile, divieto di OPI, regole di trasparenza per PDF/X-1a / PDF/X-3 e così via) restano responsabilità dell'autore del documento e della pipeline di rendering PDFium. Abbinare ValidatePdfX a uno strumento di preflight come callas pdfaPilot o la Ghent PDF Workgroup Output Suite per una verifica completa della conformità
- Aggiornata la stringa TPdf.AboutInfo per riportare la versione attuale del prodotto
Version 1.32.0
- Aggiunto supporto per l'iniezione dei marker PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE promuove il documento corrente a un file conforme PDF/E-1 tramite post-processing del PDF di base con un aggiornamento incrementale. L'iniezione copre i requisiti applicabili al formato file — uno stream di metadati XMP con
pdfe:ISO_PDFEVersion = "PDF/E-1"e la corrispondente descrizione pdfaExtension:schemas, il Document Information Dictionary riscritto con la voce obbligatoria/ISO_PDFEVersion (PDF/E-1)richiesta da §5, i blocchi di corrispondenza Info-XMP ereditati da ISO 19005-1 §6.7 tramite §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) e l'array/IDnel trailer richiesto da §6.2 - Aggiunto TPdf.SaveAsPdfEToStream per output PDF/E in memoria e scorciatoia
TPdf.SaveAsPdfE(FileName) - Aggiunto TPdf.ValidatePdfE: verifica i marker di conformità PDF/E-1 nel PDF aperto — presenza di pdfe:ISO_PDFEVersion in XMP e corrispondenza con il valore del dizionario Info, descrizione dello schema di estensione pdfe, voce /ISO_PDFEVersion nel dizionario Info, /ID nel trailer e presenza di xmp:CreateDate / xmp:ModifyDate — e restituisce un risultato strutturato con il livello di conformità rilevato e l'insieme dei problemi trovati
- Aggiunta la proprietà TPdf.PdfEConformance: restituisce il livello di conformità del documento attualmente aperto (pec1, pecNone o pecUnknown) senza richiedere una chiamata esplicita a ValidatePdfE
- Nuovi tipi esportati nella nuova unit FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- La riscrittura del dizionario Info è una novità nel percorso di post-processing PDF/x di PDFium Delphi Component: l'oggetto Info esistente viene riscritto con lo stesso numero, mantenendo validi la sottosezione xref e il riferimento /Info del trailer. Se il trailer sorgente non ha una voce /Info, viene creato un nuovo dizionario Info. PDFium inserisce un dizionario Info in ogni output SaveAs, quindi normalmente viene eseguita la riscrittura
- I requisiti sul contenuto — incorporamento dei font, CMap ToUnicode, XObject / chiavi ExtGState / moduli XFA vietati e così via — restano responsabilità dell'autore del documento: SaveAsPdfE aggiunge i marker del formato file, ma non modifica il contenuto delle pagine né rimuove le funzionalità vietate
- Stringa TPdf.AboutInfo aggiornata per riportare la versione attuale del prodotto
Version 1.31.0
- Aggiunto supporto per iniezione marker PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa promuove il documento corrente a file conforme PDF/UA-1 tramite post-elaborazione del PDF base con un aggiornamento incrementale. L’iniezione copre i requisiti a livello formato file applicabili tramite post-elaborazione — flusso di metadata XMP con
pdfuaid:part = 1e descrizione pdfaExtension:schemas corrispondente,dc:titleobbligatorio, catalog/MarkInfo << /Marked true /Suspects false >>e/ViewerPreferences << /DisplayDocTitle true >>(solo se la sorgente non li ha), catalog/Lang(quando il chiamante fornisce un tag BCP 47) e array/IDnel trailer - Aggiunto TPdf.SaveAsPdfUaToStream per output PDF/UA in memoria, e una scorciatoia con opzioni di default
TPdf.SaveAsPdfUa(FileName)per il caso comune - Aggiunto TPdf.ValidatePdfUa: verifica in un PDF aperto i marker di conformità PDF/UA-1 (esistenza di StructTreeRoot, /Lang, /MarkInfo /Marked true con /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identificatore XMP pdfuaid:part, presenza di dc:title, /ID del trailer, stato di cifratura) e restituisce un risultato strutturato con il livello di conformità rilevato e l’insieme dei problemi trovati
- Aggiunta proprietà TPdf.PdfUaConformance: restituisce il livello di conformità del documento aperto (puc1, pucNone o pucUnknown) senza chiamare ValidatePdfUa esplicitamente
- Nuovi tipi esportati nella nuova unit FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- I campi vuoti di TPdfUaSaveOptions (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language) sono auto-popolati da FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage
- I requisiti a livello contenuto (completezza tagging StructTreeRoot, testo Alt di Figure, CMap ToUnicode, embedding font, ecc.) restano responsabilità dell’autore del documento — SaveAsPdfUa allega solo marker di formato. ValidatePdfUa segnala l’assenza di StructTreeRoot come
pvuaiMissingStructTreeRoot - Stringa TPdf.AboutInfo aggiornata per riportare la versione attuale del prodotto
Version 1.30.0
- L’output PDF/A-1b ora soddisfa i requisiti di equivalenza tra Document Information Dictionary e XMP di ISO 19005-1 (con Cor.1:2007): ogni voce dell’Info dictionary che PDFium scrive nel PDF di base viene riflessa nel pacchetto XMP, inclusi Title (dc:title), Author (dc:creator), Subject (dc:description secondo Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) e ModDate (xmp:ModifyDate). Viene emesso anche xmp:MetadataDate
- Il trailer di un documento PDF/A contiene ora sempre un array /ID (requisito obbligatorio di ISO 19005-1 6.1.3). Quando TPdf.SaveAsPdfA elabora un documento la cui sorgente ha già un file identifier, vengono riutilizzati gli ID di 16 byte permanent e changing; altrimenti viene derivato un ID di fallback deterministico di 16 byte dai byte di origine
- Il XMP iniettato ora incorpora la descrizione dell’extension schema pdfaid richiesta da ISO 19005-1 6.7.8 (sostituito da Cor.1): pdfaid è considerato un extension schema rispetto a XMP Specification 2004, quindi tutti i file conformi devono dichiarare i suoi property names, value types e categories nel contenitore pdfaExtension:schemas
- TPdfASaveOptions ha cinque nuovi campi opzionali: Producer, CreationDate, ModDate (stringhe data PDF in formato “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId e InstanceId (stringhe da 16 byte per l’array /ID del trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream riempiono automaticamente i campi mancanti tramite FPDF_GetMetaText e FPDF_GetFileIdentifier, quindi il codice esistente continua a funzionare senza modifiche
- TPdf.ValidatePdfA / TPdf.PdfAConformance ora segnalano tre problemi aggiuntivi: pvaiMissingTrailerId (nessun /ID nel trailer), pvaiMissingXmpDates (manca xmp:CreateDate o xmp:ModifyDate) e pvaiMissingExtensionSchema (descrizione dell’extension schema pdfaid assente)
- I caratteri non ASCII in Title, Author, Subject, Keywords, Creator e Producer sono ora codificati come UTF-8 nel pacchetto XMP (XMP Specification richiede UTF-8), preservando i metadati multilingue attraverso SaveAsPdfA
- Stringa TPdf.AboutInfo aggiornata per riportare la versione attuale del prodotto
Version 1.29.0
- Aggiornate le DLL PDFium incluse (Win32 e Win64, sia build standard sia con V8) allo snapshot PDFium del 2026-05-22, integrando le correzioni PDFium ai percorsi di crash di FPDFText_SetText / FPDFText_SetCharcodes e vari irrobustimenti interni del progetto PDFium
- Esposto il nuovo flag di salvataggio FPDF_SUBSET_NEW_FONTS di PDFium in FPdfPageOps.pas, consentendo ai chiamanti di FPDF_SaveAsCopy di richiedere il subsetting automatico dei file di font incorporati per gli oggetti di testo appena aggiunti. Le costanti esistenti FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL e FPDF_REMOVE_SECURITY sono ora definite con la forma a scorrimento di bit di PDFium (il vecchio valore numerico 3 viene mantenuto come FPDF_REMOVE_SECURITY_DEPRECATED per compatibilità binaria)
- Aggiunti l'enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) e il corrispondente campo m_FontLibraryType su FPDF_LIBRARY_CONFIG in FPdfView.pas, in modo che le applicazioni che inizializzano PDFium con il renderer Skia possano scegliere il backend dei font all'avvio
- Aggiornata la firma di TFPDFPage_InsertObject per allinearsi alla controparte C di PDFium: la funzione C ora restituisce FPDF_BOOL (TRUE in caso di successo, FALSE se page_object è NULL o se il trasferimento di ownership fallisce) invece di void. Le chiamate esistenti di PDFium Delphi Component continuano a compilare invariate, poiché Delphi / FPC consentono di ignorare il valore di ritorno di una funzione
- Corretta la stringa TPdf.AboutInfo affinché riporti la versione attuale del prodotto (era rimasta ferma a v1.27.0 dalla versione 1.28.0 dedicata solo alla documentazione)
Version 1.28.0
- Sostanzialmente ampliata la documentazione interna in tutta la API reference: ogni voce di property, method, event e global function include ora una Description di 3 paragrafi, un elenco Remarks, un Delphi Example multi-riga e un blocco See Also più ricco — coprendo oltre 200 pagine precedentemente sintetiche, inclusi tutti i counter di TPdf, i getter dei metadati, gli accessor di font e caratteri, le proprietà a livello di pagina, i record indicizzati, i metodi a livello di documento e l'intera superficie di stato / display / event di TPdfView
- Affinato il layout dell'help per allinearlo alla baseline visiva losLab: dimensioni h1/h2 uniformate, stili della griglia di navigazione API riuniti nel StyleSheet condiviso e override CSS inline specifici di Navigation.html rimossi
- La documentazione include ora uno script di supporto (Docs\Build-Expand-Entries.ps1) che rigenera l'arricchimento delle pagine delle voci da una singola tabella dati per una manutenzione ripetibile
Version 1.27.0
- Aggiunto supporto alla creazione di PDF/A-1b: TPdf.SaveAsPdfA salva qualsiasi documento aperto come file conforme a PDF/A-1b tramite post-elaborazione del PDF di base con un aggiornamento incrementale che inietta un flusso di metadati XMP, un OutputIntent ICC sRGB e un catalogo del documento aggiornato — il tutto senza richiedere API DLL aggiuntive. Funziona su qualsiasi piattaforma supportata da PDFium Delphi Component
- Aggiunto TPdf.SaveAsPdfAToStream per l'output PDF/A in memoria
- Aggiunto TPdf.ValidatePdfA: controlla un PDF aperto per verificarne la conformità PDF/A (marker XMP pdfaid, OutputIntent con profilo ICC incorporato, crittografia) e restituisce un risultato strutturato con il livello di conformità rilevato e un insieme di problemi specifici trovati
- Aggiunta property TPdf.PdfAConformance: restituisce il livello di conformità del documento attualmente aperto (pac1b, pac1a, pac2b, pac3b, pacNone o pacUnknown) senza dover invocare esplicitamente ValidatePdfA
- Esportati nuovi tipi: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (nella nuova unit FPdfPdfa.pas)
- SaveAsPdfA supporta un profilo ICC personalizzato tramite TPdfASaveOptions.IccProfileData; se lasciato vuoto viene utilizzato automaticamente il profilo sRGB IEC61966-2.1 integrato (HP/Microsoft, 3144 bytes)
- Sostituito il riferimento HTML monolitico con un sistema di help web ristrutturato: 302 singole pagine di voci API (una per ogni property, method, event e global function) che coprono TPdf e TPdfView, ciascuna con una descrizione completa, tabella dei parametri, esempio di codice Delphi e link See Also
- Aggiunto Navigation.html: un indice di navigazione API completo su una pagina organizzato in sei sezioni (TPdf properties/methods/events, TPdfView properties/methods/events, global functions) con una griglia flex a 5 colonne per una scansione rapida
- Ricostruiti TPdf.html e TPdfView.html come pagine compatte di panoramica dei componenti che mantengono le sezioni type-reference (Types, Constants, Global Variables) e rimandano alle singole pagine delle voci per tutti i membri
- Aggiunta ricerca full-text basata su Search.js con corrispondenza incrementale lato client su tutte le 312 pagine indicizzate
- Aggiornate tutte le barre di navigazione del sito per puntare a Navigation.html
Version 1.26.0
- Aggiunto Demo/Lazarus/BatchExport, il port LCL della demo Delphi BatchExport v1.14.0. Stesso set di funzionalità: esportazione PDF -> JPG multi-file con avanzamento generale per file, avanzamento corrente per pagina, input DPI / qualità / password e un batch cancellabile in modo cooperativo supportato da IPdfCancellationToken. La cartella di output viene aperta nel file manager della piattaforma al termine dell'estrazione
Version 1.25.0
- Aggiunto il riutilizzo di pagine Form XObject a TPdf, abilitando workflow di watermark, sovrapposizione di template e “stamp di una pagina su molte”: CreateXObjectFromPage produce un handle riutilizzabile da qualsiasi pagina di un altro documento; InsertFormObjectFromXObject inserisce UNA copia della pagina incapsulata nella pagina corrente. Restituisce il FPDF_PAGEOBJECT inserito in modo che il chiamante possa posizionarlo / scalarlo / ruotarlo con FPDFPageObj_SetMatrix e gli helper TPdfMatrix di v1.9.0
- La nuova classe Pascal TPdfXObject incapsula l'handle FPDF_XOBJECT di PDFium e lo chiude automaticamente nel suo destructor, eliminando il cerimoniale manuale di FPDF_CloseXObject
- Estese le suite di regression Delphi e Lazarus a 147 casi ciascuna e la suite C++Builder a 123 casi, coprendo i contratti di creazione di handle e di inserimento di page-object
Version 1.24.0
- Aggiunto TPdf.RenderPageProgressive — una variante cancellabile di RenderPage che pilota il loop di rendering progressivo di PDFium e interroga un IPdfCancellationToken v1.7.0 tra le iterazioni, in modo che render lunghi ad alta DPI possano essere interrotti a metà pagina invece di bloccare il chiamante fino al completamento
- Restituisce un valore TPdfProgressiveStatus: prsDone, prsCancelled o prsFailed. Passare AToken = nil per renderizzare fino al completamento senza mai mettere in pausa (nessuna possibilità di prsCancelled)
- Utilizza lo stesso zero-copy fast path introdotto in v1.21.0 — PDFium renderizza direttamente nel DIB del TBitmap di destinazione. Lo stesso fallback legacy si applica quando il DIB non può essere incapsulato
- Estese le suite di regression Delphi e Lazarus a 145 casi ciascuna e la suite C++Builder a 121 casi, coprendo nil-token (completa), token pre-cancellato (prsCancelled) ed equivalenza di pixel con RenderPage sincrono su un token vivo
Version 1.23.0
- Aggiunti sei nuovi metodi TPdfView che espongono alle applicazioni la selezione di testo dei form-widget e l'Undo/Redo di PDFium: GetSelectedFormText restituisce il testo attualmente selezionato all'interno del form widget con focus; SelectAllFormText seleziona tutti i caratteri; FormUndo / FormRedo / FormCanUndo / FormCanRedo pilotano la cronologia di editing del widget con focus. Le API PDFium sottostanti erano già bindate ma senza un punto di ingresso di alto livello. Tutti e sei terminano in modo sicuro in cortocircuito quando la view è inattiva o il documento non ha un widget AcroForm con focus
- Estese le suite di regression Delphi e Lazarus a 142 casi ciascuna e la suite C++Builder a 119 casi, coprendo il contratto no-form-no-focus per ogni nuovo metodo
Version 1.22.0
- Aggiunti wrapper di composizione pagine a TPdf: ImportPagesByIndex accetta un array di indici a base zero per copiare pagine specifiche da un documento di origine; ImportNPagesToOne restituisce un nuovo TPdf le cui pagine sono composite N-up di questo documento; MovePages riordina le pagine in-place. Le API PDFium sottostanti erano già bindate ma senza un punto di ingresso Pascal-friendly
- ImportPagesByIndex accetta un array vuoto per importare ogni pagina di origine (equivalente a passare nil al livello di ABI C)
- Estese le suite di regression Delphi e Lazarus a 136 casi ciascuna e la suite C++Builder a 115 casi, coprendo importazione di sottoinsiemi, importazione dell'intero documento, riordino di pagine e composito N-up
Version 1.21.0
- Migliorate le prestazioni di rendering passando TPdf.RenderPage / TPdf.RenderTile (e i corrispondenti helper TPdfView) a un percorso di output zero-copy. PDFium ora scrive direttamente nel buffer DIB del TBitmap di destinazione invece che in un buffer interno che veniva poi copiato riga per riga, risparmiando una copia di memoria di width x height x 4 bytes per ogni render. Il miglioramento è più evidente ad alta DPI (pannelli thumbnail, export print-quality, batch export)
- Il vecchio percorso per-scanline è mantenuto come fallback di sicurezza per il caso improbabile in cui il DIB di destinazione non possa essere incapsulato (dimensioni estreme, stride insolito, OOM). Il comportamento è byte-identico tra i due percorsi, solo più lento nel fallback
- Estese le suite di regression Delphi e Lazarus a 132 casi ciascuna e la suite C++Builder a 112 casi, coprendo upgrade del caller-bitmap a pf32bit, round-trip delle dimensioni e un test di coerenza dello stride su bitmap di grandi dimensioni
Version 1.20.0
- Aggiunta evidenziazione dei risultati di ricerca a TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) esegue la scansione della pagina di view corrente e restituisce il numero di corrispondenze trovate, dipingendo una maschera HighlightColor su ogni corrispondenza ad ogni redraw. ClearHighlight rimuove le evidenziazioni; il passaggio della view a una pagina diversa le elimina automaticamente poiché le corrispondenze sono specifiche per pagina
- HighlightColor ha valore predefinito clYellow ed è published in modo che le applicazioni possano adattare il tema dell'evidenziazione alla loro palette UI
- Estese le suite di regression Delphi e Lazarus a 129 casi ciascuna e la suite C++Builder a 109 casi, coprendo colore predefinito, round-trip del colore, “corrispondenze di parole reali in fixture” contro la stringa di sample.pdf e il contratto “parola mancante restituisce zero corrispondenze”
Version 1.19.0
- Aggiunta property FitMode a TPdfView con quattro valori: pfmNone (zoom manuale), pfmActualSize (100%), pfmFitPage (l'intera pagina entra nel viewport) e pfmFitWidth (la larghezza della pagina corrisponde alla larghezza del viewport). La modalità di adattamento attiva viene riapplicata automaticamente su Resize e quando cambia la pagina corrente, in modo che documenti lunghi con dimensioni di pagina miste rimangano perfettamente inquadrati
- Impostare direttamente Zoom annulla la modalità di adattamento attiva (FitMode torna a pfmNone), in linea con la convenzione standard dei lettori PDF in cui digitare un valore di zoom esce da Fit Page / Fit Width
- Il valore predefinito è pfmNone in modo che le applicazioni esistenti mantengano il loro comportamento di zoom esplicito
- Estese le suite di regression Delphi e Lazarus a 124 casi ciascuna e la suite C++Builder a 106 casi, coprendo valore predefinito, round-trip della modalità, fit-page che produce uno zoom reale su un documento caricato e zoom-manuale-annulla-fit-mode
Version 1.18.0
- Aggiunta property PageColor a TPdfView, disaccoppiando lo sfondo della pagina PDF renderizzata dal Color del controllo circostante. Il valore predefinito è clWhite, in modo che le pagine PDF vengano ora renderizzate bianco-carta indipendentemente dal tema dell'applicazione host. I visualizzatori in dark-mode possono ora mantenere scura l'area di scorrimento lasciando bianca la pagina PDF effettiva (o di qualsiasi colore scelto dall'applicazione)
- Cambiamento di comportamento: le applicazioni che impostavano TPdfView.Color per ricolorare la pagina PDF dovrebbero ora impostare PageColor. L'esperienza predefinita migliora per il caso comune (pagine bianche su sfondi di controllo a tema) senza alcuna modifica al codice
- Estese le suite di regression Delphi e Lazarus a 120 casi ciascuna e la suite C++Builder a 103 casi, coprendo valore predefinito e round-trip del colore
Version 1.17.0
- Aggiunti toggle di lock-down dell'input utente a TPdfView in modo che le applicazioni che integrano il visualizzatore in kiosk, pannelli di preview o contesti read-only possano disabilitare i gesti di navigazione senza fare subclassing: AllowUserPageChange controlla le nuove scorciatoie da tastiera PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling controlla i nuovi salti di pagina wheel-up / wheel-down; AllowUserTextSelection è riservato per il futuro percorso di selezione testo via mouse-drag. Tutti e tre hanno valore predefinito True in modo che le applicazioni esistenti effettuino l'upgrade senza alcun cambio di comportamento
- La navigazione di pagina con rotellina del mouse salta Ctrl+wheel in modo che le applicazioni possano mantenere Ctrl+wheel riservato per lo zoom
- Estese le suite di regression Delphi e Lazarus a 118 casi ciascuna e la suite C++Builder a 101 casi, coprendo valori predefiniti e round-trip dei toggle
Version 1.16.2
- Estesa la copertura di regression di TPdfView per i click sui link delle annotazioni quando la pagina del visualizzatore differisce dalla pagina TPdf associata, utilizzando un vero percorso di click del mouse headless su Delphi, Lazarus e C++Builder
- Le suite Delphi e Lazarus eseguono ora 114 casi ciascuna e C++Builder esegue 99 casi
Version 1.16.1
- Corretta la gestione dei click sui link in TPdfView in modo che le azioni automatiche di annotazione e web-link utilizzino la pagina attualmente visualizzata dal viewer, anche quando il componente TPdf associato è parcheggiato su una pagina diversa
- Irrobustito TPdfThumbnailView contro riferimenti Pdf pendenti quando il componente TPdf collegato viene distrutto
- Aggiunta copertura di regression sul ciclo di vita dei riferimenti dei thumbnail; le suite Delphi e Lazarus eseguono ora 113 casi ciascuna e C++Builder esegue 98 casi
- Sincronizzati README, documentazione di test, contenuto search/index dell'HTML Help e output dei pacchetti C++ generati con gli aggiornamenti di integrazione da v1.7.0 a v1.16.0
Version 1.16.0
- Aggiunta una nuova demo Delphi PrintDialog (Demo/Delphi/PrintDialog) focalizzata sulla stampa N-up (1 / 2 / 4 / 9 pagine per foglio) con filtro pagine dispari / pari, rendering in scala di grigi e bordi opzionali da 1 pixel per cella. È una piccola e deliberata compagna della demo PrintPDF esistente, che già copre preview, file recenti, zoom e scaling
Version 1.15.0
- Aggiunto un nuovo componente TPdfThumbnailView (unit FPdfThumbnail) che renderizza un thumbnail di pagina per riga in un pannello laterale scorrevole con evidenziazione hover e selezione, oltre alla navigazione click-to-go. Progettato per affiancare un TPdfView in modo che gli utenti finali possano sfogliare un documento lungo per pagina
- Il componente è registrato nella scheda della tavolozza losLab insieme a TPdf e TPdfView; properties chiave: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor e l'evento OnPageClick
- Estese le suite di regression Delphi e Lazarus a 112 casi ciascuna e la suite C++Builder a 97 casi, coprendo valori predefiniti, round-trip delle dimensioni thumbnail, clamping di valori estremi, round-trip del colore e assegnazione di event handler
Version 1.14.0
- Aggiunta una nuova demo Delphi BatchExport (Demo/Delphi/BatchExport) che mostra come convertire molti file PDF in JPG in un'unica passata utilizzando TPdf.LoadCustomDocument per il caricamento in streaming, IPdfCancellationToken per la cancellazione cooperativa e barre di avanzamento generale per file + corrente per pagina. La demo utilizza un'istanza TPdf per file (PDFium stesso non è thread safe) e apre la cartella di output in Explorer quando l'estrazione termina con successo
Version 1.13.0
- Aggiunto un overlay UI di async-rendering a TPdfView tramite tre nuove properties: AsyncRendering, LoadingText e LoadingColor. Quando AsyncRendering è True il percorso di paint single-page disegna un piccolo indicatore “Loading...” sopra la pagina renderizzata in modo che le applicazioni che usano il proprio worker per render lunghi condividano un affordance visiva coerente
- I valori predefiniti preservano il comportamento esistente: AsyncRendering è False, quindi le applicazioni che non aderiscono non vedono alcun cambio visivo
- La documentazione chiarisce che PDFium stesso non è thread safe — per delegare effettivamente il render a un worker il chiamante deve mantenere un TPdf per worker; la prossima demo batch-export mostra quel pattern
- Estese le suite di regression Delphi e Lazarus a 106 casi ciascuna e la suite C++Builder a 93 casi, coprendo valori predefiniti e round-trip delle tre properties
Version 1.12.0
- Aggiunta gestione dei link click-driven a TPdfView. La nuova property LinkOptions controlla il comportamento automatico per i quattro tipi di azione di link PDF: goto (salto di pagina), URI (ShellExecute), launch (ShellExecute) ed embedded GotoR (riservato). I valori predefiniti abilitano loAutoGoto e loAutoOpenURI; loAutoLaunch e loAutoEmbeddedGoto rimangono off in modo che un click accidentale non possa eseguire un programma arbitrario
- Aggiunti gli eventi OnAnnotationLinkClick e OnWebLinkClick che si attivano prima di qualsiasi azione automatica e consentono alle applicazioni di ispezionare il link, marcarlo come Handled o reindirizzarlo (per esempio, a un prompt di sicurezza)
- Il rilevamento del click sui link viene eseguito solo quando il gesto è un click piuttosto che un drag, utilizzando un nuovo anchor MouseDown in modo che i gesti di pan continuino a fluire attraverso il percorso di scroll esistente invariati
- Estese le suite di regression Delphi e Lazarus a 102 casi ciascuna e la suite C++Builder a 91 casi, coprendo LinkOptions predefinito, round-trip del set e assegnazione di event handler
Version 1.11.0
- Aggiunto polish visivo a TPdfView: le properties PageShadowSize, PageShadowColor e PageBorderColor dipingono un'ombra drop opzionale sotto il rettangolo della pagina e un bordo di un pixel attorno ad essa. I valori predefiniti preservano il precedente aspetto piatto (PageShadowSize = 0; il bordo viene disegnato nel clBlack predefinito ma si confonde nello sfondo bianco predefinito finché i chiamanti non cambiano i colori)
- Aggiunta una property SmoothScroll come flag opt-in per un futuro animation di scroll incrementale; la property ha round-trip oggi ed è collegata in modo che le applicazioni possano persistere la preferenza, mentre il lato rendering utilizza ancora il comportamento di scroll immediato esistente
- Estese le suite di regression Delphi e Lazarus a 98 casi ciascuna e la suite C++Builder a 89 casi, coprendo valori predefiniti, round-trip della property e il clamp di shadow-size negativo
Version 1.10.0
- Aggiunto inserimento diretto di immagini tramite nuovi overload TPdf.AddImage e TPdfView.AddImage che accettano un percorso di file oppure un TBitmap, oltre all'esistente AddPicture basato su TPicture. AddImage(FileName) riconosce qualsiasi formato registrato con le unit grafiche VCL o LCL (BMP, PNG tramite l'unit PngImage, JPG, ecc.) e percorre la stessa pipeline di AddPicture in modo che il comportamento sia identico
- AddImage(TBitmap) salta l'intermediario TPicture, semplificando i chiamanti che già detengono un TBitmap proveniente da operazioni di rendering o di generazione batch
- Estese le suite di regression Delphi e Lazarus a 92 casi ciascuna e la suite C++Builder a 84 casi, coprendo inserimento di bitmap, limiti di page-object, rifiuto di bitmap nil e caricamento di file BMP
Version 1.9.0
- Aggiunto supporto di alto livello alle matrici di trasformazione tramite la nuova classe TPdfMatrix nell'unit FPdfMatrix. TPdfMatrix incapsula FS_MATRIX di PDFium con un'API OO per Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew e Multiply, adatta a comporre trasformazioni prima di passarle a FPDFPageObj_SetMatrix e ad API PDFium simili
- TPdfMatrix.Multiply effettua correttamente lo snapshot dei sei elementi della matrice prima di calcolare i nuovi valori di riga, correggendo un problema latente in cui le implementazioni Pascal alternative sovrascrivono elementi precedenti durante la stessa chiamata e producono risultati errati per qualsiasi composizione oltre la semplice traslazione
- Estese le suite di regression Delphi e Lazarus a 88 casi ciascuna e la suite C++Builder a 81 casi, coprendo identity, reset, translate / scale / flip, ordine di composizione post-moltiplicativa e il caso di regression di Multiply
Version 1.8.0
- Aggiunto caricamento di stream on-demand tramite il nuovo metodo TPdf.LoadCustomDocument(AStream, AOwnsStream) e la classe helper TPdfStreamAdapter, basata su FPDF_LoadCustomDocument di PDFium. PDFium legge ora blocchi dal TStream fornito solo quando necessario, quindi PDF molto grandi o remoti non richiedono più una copia in memoria upfront
- Aggiunta proprietà opzionale dello stream: passando AOwnsStream = True si trasferisce il ciclo di vita del TStream a TPdf, che lo libera quando viene eseguito UnloadDocument
- Estese le suite di regression Delphi e Lazarus a 79 casi ciascuna e la suite C++Builder a 75 casi, coprendo caricamento in streaming tramite TFileStream, pulizia dello stream posseduto e il contratto di sopravvivenza all'unload dello stream posseduto esternamente
Version 1.7.0
- Aggiunte primitive di cancellazione async cooperativa nella nuova unit FPdfAsync, esponendo IPdfCancellationToken / IPdfCancellationTokenSource e un singleton PdfNoCancellationToken riutilizzabile in modo che i workflow di rendering ed export di lunga durata possano supportare semantiche pulite di cancel-from-UI
- Aggiunto un helper leggero TPdfFuture<T> che esegue un worker su un thread di background e posta l'envelope TPdfFutureResult<T> di nuovo al main thread, distinguendo i casi di successo, cancellazione e fallimento
- Estese le suite di regression Delphi e Lazarus a 76 casi ciascuna e la suite C++Builder a 73 casi, con copertura condivisa di stato di cancellazione, cancel idempotente, fan-out di callback e registrazione post-cancel
Version 1.6.10
- Aggiunto l'accesso di alto livello TPdf.PrintPageRanges alla preferenza di intervallo di pagine di stampa del visualizzatore PDF, restituendo intervalli di pagine a base uno per il codice applicativo
- Aggiunti TPdf.SetFormFieldFlags / SetFormFieldFlagsAt e gli helper corrispondenti di TPdfView in modo che le applicazioni possano aggiornare i flag dei campi AcroForm tramite l'API pubblica, inclusa la copertura dei flag di password e multi-select
- Irrobustita la copertura ABI del binding PDFium per FPDF_DWORD dimensionato per Windows, le callback FPDF_FILEACCESS e i campi slot dell'embedder V8
Version 1.6.9
- Aggiunti binding di basso livello per il rendering Skia per le API FPDF_RenderPageSkia e FPDF_FFLDrawSkia appena esportate nelle DLL PDFium standard e V8 incluse
- Estesi i controlli di copertura del binding pubblico in modo che il caricamento delle DLL standard e V8 verifichi ora i punti di ingresso di rendering Skia insieme alle sonde di capacità V8/XFA esistenti
Version 1.6.8
- Aggiunti TPdf.SetTextPositions e TPdfSingleArray per impostare posizioni per-carattere su oggetti di testo esistenti tramite la API FPDFText_SetPositions appena esportata
- Promossa FPDFText_SetPositions a binding richiesto per le DLL PDFium attualmente incluse, confermando al contempo che i punti di ingresso di rendering Skia rimangono non disponibili perché le DLL non li esportano ancora
- Estese le suite di regression Delphi, C++Builder e Lazarus a 65 casi ciascuna con copertura di posizione del testo
Version 1.6.7
- Aggiunto l'accesso di alto livello TPdf alle azioni JavaScript name-tree del documento, restituendo nomi di azione e script tramite JavaScriptAction e JavaScriptActions
- Aggiunto TPdf.FileIdentifier per leggere gli ID di trailer permanenti e cambianti come TBytes binari senza il byte terminatore di PDFium
- Aggiunti TPdf.PageBox, GetPageBox e SetPageBox per MediaBox, CropBox, BleedBox, TrimBox e ArtBox sulla pagina corrente
- Confermato che le DLL PDFium attualmente incluse lasciano solo i punti di ingresso di rendering Skia non disponibili a runtime perché tali export non sono presenti
- Estese le suite di regression Delphi, C++Builder e Lazarus a 64 casi ciascuna con copertura di JavaScript del documento, ID di trailer e page-box
Version 1.6.6
- Aggiunto supporto a runtime per la DLL PDFium V8-enabled inclusa. Impostare EnableV8Engine prima del caricamento seleziona ora pdfium.v8.dll dall'albero DLLs\Win32 o DLLs\Win64 ed espone i binding V8/XFA-only quando la DLL caricata li fornisce
- Aggiunti V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags e binding opzionali di basso livello per FPDF_BStr_*, FPDF_GetRecommendedV8Flags e FPDF_GetArrayBufferAllocatorSharedInstance
- Resa FPDFText_SetPositions opzionale in modo che PDFium Delphi Component continui a caricarsi con DLL PDFium che non esportano quel setter sperimentale di posizione del testo
- Estese le suite di regression Delphi, C++Builder e Lazarus a 61 casi ciascuna con copertura delle capacità standard-DLL e V8-DLL