PDF caricato a PDF/A-4 con preservazione di testo e vettori
HPDFArchivalConversion offre un profilo di preservazione per documenti caricati i cui font visibili, spazi colore e risorse di rendering possono soddisfare PDF/A-4 senza sostituire il contenuto delle pagine
Il convertitore conserva gli operatori di testo originali, i path vettoriali, le immagini, la geometria di pagina e i layer di testo OCR esistenti, appiattisce gli appearance visibili normali di annotazioni e widget in Form XObjects vettoriali, ripara i problemi di metadati e struttura supportati e valida il risultato serializzato prima della pubblicazione
Questo profilo non rasterizza mai una pagina: RasterizedPages resta zero, anche quando l'OCR renderizza una bitmap temporanea di riconoscimento e accoda testo invisibile ricercabile
L'accettazione runtime copre Delphi Win32 e Win64; FPC Windows compila l'implementazione da sorgenti fresche, e gli header pubblici generati compilano con C++Builder Win32 e Win64x
Punti di ingresso
function HPDFConvertLoadedToPDFA4Preserving(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
function HPDFConvertLoadedToPDFA4PreservingFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
Caricate prima la sorgente, tenete vivo ogni stream di input di proprietà del chiamante e date al convertitore accesso esclusivo al documento durante l'operazione
Options := THPDFArchivalPreservationOptions.Default;
if not HPDFConvertLoadedToPDFA4PreservingFile(Source, TargetFileName,
SRGBProfile, Options, Report) then
raise Exception.Create(Report.Conversion.Diagnostic);
Prova di preservazione
Il convertitore scatta uno snapshot del grafo sorgente correntemente modificato sotto una transazione del grafo e riporta la sorgente indietro dopo la serializzazione, poi esegue tutto il lavoro di conversione su un clone caricato indipendente
Gli stream di contenuto di pagina decodificati originali devono restare byte-identici e raggiungibili dalle pagine originali nel loro ordine originale dopo il reload dell'output
Gli alberi di risorse di pagina e gli alberi di risorse degli appearance normali trattenuti vengono attraversati con limiti su oggetti e ricorsione; i programmi font incorporati, le mappe ToUnicode, le immagini, i profili ICC e i Form XObjects annidati conservano i propri payload codificati originali, verificati con SHA-256 streaming e controllati per la raggiungibilità continuata dalle pagine di output
Gli stream di contenuto indipendenti racchiudono gli operatori originali di pagina con guardie del graphics state e contengono gli operatori appearance accodati, evitando il percorso nativo di append a stream singolo che riscriverebbe uno stream di contenuto originale
TextAndVectorContentPreserved diventa true solo dopo che validazione dell'output nativo e controlli di preservazione sono passati; viene azzerato quando la conversione o la pubblicazione su file fallisce
Gestione degli appearance
- Gli appearance normali
AP/Nvisibili vengono mappati dal loro Form BBox e Matrix al Rect dell'annotazione usando il flattening nativo delle annotazioni, conservando i propri font e risorse - I flag Invisible, Hidden e NoView impediscono il paint anche quando è presente un appearance normale esistente; le annotazioni Popup vengono rimosse senza paint
- I link senza bordo e senza appearance normale vengono rimossi senza paint solo quando un bordo esplicito a larghezza zero stabilisce che non hanno bordo visibile
SynthesizeMissingAppearancesha default true e invoca la generazione nativa di appearance per markup o campi; sottotipi non supportati, rettangoli non validi o generazione fallita rifiutano la conversione- Gli appearance testuali mancanti supportano valori ASCII con un encoding font nativo compatibile; i valori testuali esadecimali, Unicode o mascherati richiedono un appearance normale esplicito
- Gli appearance testuali sintetizzati vengono confrontati con i valori sorgente nel testo ricercabile ricaricato dopo la normalizzazione degli spazi; un encoding font incompatibile rifiuta la pubblicazione
Fornire un appearance normale esistente supporta testo arbitrario con font incorporato già rappresentato correttamente in quell'appearance, incluso Unicode; il convertitore conserva quell'appearance invece di sostituire un font di sistema
Il flattening rimuove l'interazione delle annotazioni, i campi editabili, i calcoli, le azioni e i campi firma mantenendo gli appearance visibili; ogni annotazione coinvolta e ogni appearance sintetizzato produce una entry di perdita con la propria pagina sorgente, indice dell'annotazione e numero di oggetto quando disponibili
Colore, font e perdite esplicite
L'argomento ICC richiesto è un profilo sRGB matrix/TRC accettato dal validatore archivistico esistente; ogni profilo di output esistente deve avere esattamente gli stessi byte decodificati del profilo fornito, altrimenti la conversione viene rifiutata per evitare di reinterpretare la condizione di output esistente
Il convertitore aggiunge un output intent sRGB PDF/A solo quando necessario, sincronizza il serializzatore reale a un header PDF 2.0 e invoca la riparazione limitata di metadati e struttura base PDF/A-4
Non incorpora programmi font visibili mancanti, non ricodifica il testo originale, non ricolora operatori DeviceCMYK, non sostituisce una condizione di output esistente e non appiattisce la trasparenza di pagina in una bitmap; i findings nativi di preflight irrisolti rifiutano la pubblicazione
Le sorgenti cifrate devono essere decifrate prima della conversione; i campi firma richiedono AllowSignatureInvalidation esplicito, e i file incorporati esistenti richiedono RemoveEmbeddedFiles esplicito perché questo profilo punta al PDF/A-4 base
Losses riporta anche l'invalidazione delle firme, la rimozione dei file incorporati, la rimozione dei dizionari Info legacy e la rimozione di metadati proibiti di catalogo o presentazione
XMP esistente viene trattenuto quando supportato; quando i metadati vengono generati, le informazioni supportate di titolo, autore, soggetto e parole chiave vengono trasferite, mentre i campi Info legacy arbitrari non hanno garanzia di sopravvivenza
OCR e budget
AddOCRToImagePages ha default false; abilitandolo si riconoscono le pagine prive di testo estraibile e si accoda testo invisibile senza sostituire il contenuto originale o i layer OCR esistenti
Impostate OCREngine a un engine dell'applicazione o lasciatelo nil per l'engine OCR ASCII limitato integrato, la cui copertura di lingue e tipografia resta quella del profilo di riconoscimento integrato
OCROptions controlla risoluzione del riconoscimento e budget delle parole, mentre il convertitore forza skip-pages-with-text, la conservazione dei layer OCR esistenti e l'omissione di un nuovo gruppo optional-content
Limits usa THPDFArchivalConversionOptions.Default per numero di pagine, numero di oggetti, byte di output in staging, lavoro per singolo stream, lavoro cumulativo sugli stream, cancellazione e checkpoint sincroni; i limiti sui pixel raster si applicano solo quando l'OCR renderizza bitmap di riconoscimento
Gli altri default sono 1.024 entry di perdita, 1.048.576 code unit di testo estratto o atteso e 4.000.000 di token di contenuto per passata di validazione nativa
L'hashing dei payload delle risorse conteggia i byte codificati contro gli stessi budget di lavoro per stream; verifica sorgente e verifica output consumano entrambe lavoro cumulativo, quindi grandi collezioni di scansioni possono richiedere un MaxTotalDecodedBytes esplicitamente aumentato anche se la verifica delle risorse usa un buffer hash fisso di 64 KiB
I budget si applicano dopo il caricamento della sorgente e limitano separatamente snapshot e output in staging di proprietà del convertitore; configurate i limiti del loader quando accettate input non fidato
Pubblicazione e validazione
L'API su stream richiede una destinazione vuota e seekable a posizione zero e rifiuta alias della sorgente; copia i byte in staging solo dopo che reload, validazione nativa, controlli di preservazione e controlli di cancellazione sono riusciti
Un fallimento di scrittura sulla destinazione innesca un reset best-effort; uno stream custom arbitrario può rifiutare quel reset, quindi usate il punto di ingresso su file per la pubblicazione atomica su file
L'API su file sonda per alias della sorgente, crea un file temporaneo esclusivo accanto al target, ne fa il flush e sostituisce il target con MoveFileEx solo dopo che tutti i controlli sono passati; i fallimenti precedenti conservano un target esistente e rimuovono il file temporaneo
InitialValidationIssues, Repair, Conversion.ValidationIssues, dettagli OCR, conteggi stream, conteggi testo estratto e perdite esplicite restano disponibili per ispezione
La validazione nativa copre le regole PDF/A-4 supportate di HotPDF e non è una certificazione universale di PDF arbitrari; l'accettazione di regressione usa inoltre verifiche indipendenti pypdf e MuPDF più validazione veraPDF PDF/A-4 sugli artifact di appearance generati e OCR nativo
La regressione su corpus reale include guide Word e di libreria con font incorporati e una collezione di scansioni cinesi di 380 pagine, mentre un report commerciale con font non incorporati e contenuto DeviceCMYK è un caso di rifiuto esplicito
Comandi di regressione
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win32
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win64
python Tests/Delphi/Fixtures/ArchivalPreservation/verify_preserving_output.py
verapdf --format xml --flavour 4 Tests/Delphi/generated/ArchivalPreservation/appearance.pdf Tests/Delphi/generated/ArchivalPreservation/ocr.pdf Tests/Delphi/generated/ArchivalPreservation/native-appearance.pdf
Il runner Delphi sopprime il lancio del viewer e include sia i fixture di preservazione sia quelli di regressione raster esistenti; l'accettazione veraPDF indipendente usa l'attuale profilo di validazione PDF/A-4
Argomenti correlati
Raster archival conversion offre un profilo separato con perdita esplicita di testo e vettori originali quando il rendering nativo è supportato