Conversione da PDF caricato a raster PDF/A-4
HPDFArchivalConversion crea un nuovo documento PDF/A-4 dal contenuto visibile delle pagine di un documento THotPDF caricato, usando rendering nativo rigoroso e un profilo ICC sRGB fornito dal chiamante
Ogni pagina di output contiene un'immagine raster RGB compressa lossless ai DPI richiesti, con le dimensioni visibili originali, crop, rotazione e UserUnit riportate nella geometria della pagina di output
Usate il profilo separato che preserva testo e vettori quando devono sopravvivere i font incorporati originali, gli operatori testuali, i percorsi vettoriali, le immagini, i layer OCR e gli appearance visibili di annotazioni o widget; il profilo raster non preserva quelle strutture
Punti di ingresso
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
Caricare prima la sorgente e mantenere vivo ogni stream di input di proprietà del chiamante finché il documento sorgente non viene distrutto
Usare il punto di ingresso su file per la pubblicazione di archiviazione ordinaria: sonda un target esistente per aliasing della sorgente prima di creare un file temporaneo esclusivo nella directory del target, valida la conversione completa, esegue il flush del file e sostituisce il target con MoveFileEx usando MOVEFILE_REPLACE_EXISTING e MOVEFILE_WRITE_THROUGH
I fallimenti di conversione, rendering, validazione, cancellation e pubblicazione conservano un file target esistente e rimuovono l'output temporaneo
Il punto di ingresso su stream richiede una destinazione vuota e seekable alla posizione zero e respinge gli alias noti dell'input tramite IsLoadedSourceStreamAlias; pubblica i byte solo dopo che l'intero output staged ha superato la validazione nativa
Un fallimento di scrittura sulla destinazione innesca un reset best-effort a stream vuoto, ma un dispositivo arbitrario o uno stream custom possono respingere il reset e conservare una scrittura parziale; usare il punto di ingresso su file quando la pubblicazione del file deve essere atomica
Opzioni e limiti delle risorse
| Opzione | Predefinito | Significato |
|---|---|---|
DPI | 150 | Risoluzione fisica richiesta, intervallo accettato da 36 a 1200 |
MaxPages | 1000 | Numero massimo di pagine sorgente caricate |
MaxPixelsPerPage | 40,000,000 | Massimo di pixel per pagina e massimo di pixel per singola immagine sorgente |
MaxTotalPixels | 500,000,000 | Massimo di pixel raster accumulati in output |
MaxRasterBytes | 256 MiB | Allocazione raster massima per pagina o immagine sorgente, verificata in modo conservativo a quattro byte per pixel |
MaxOutputBytes | 256 MiB | Dimensione massima del PDF staged, applicata prima dell'allocazione dello stream e delle scritture |
MaxDecodedStreamBytes | 64 MiB | Limita ogni catena di filtri, il preflight combinato del contenuto di ogni pagina, i singoli callback nativi di lettura stream, i singoli stream di immagini sorgente codificate e il validator nativo dell'output |
MaxTotalDecodedBytes | 256 MiB | Limita il lavoro aggiuntivo dei decoder nativi filtrati lungo la conversione, il preflight combinato del contenuto tra pagine e i callback nativi di lettura stream accumulati tra pagine |
MaxInputObjects | 200,000 | Numero massimo di oggetti indiretti già caricati |
CancellationToken | nil | Token preso in prestito, verificato prima del lavoro, durante rendering e decodifica nativi e prima della pubblicazione |
Checkpoint | nil | Callback sincrono preso in prestito, invocato con sender nil ai checkpoint di conversione e delle risorse native; non rientrare nel documento sorgente |
I limiti di decodifica conteggiano il lavoro del decoder e possono addebitare di nuovo lo stesso stream filtrato durante preflight, compilazione della display list e rendering; aumentare un budget è una decisione esplicita del chiamante
Il preflight dei pixel copre sia la risoluzione fisica richiesta sia il valore intero di DPI del renderer nativo dopo lo scaling di UserUnit; unità molto piccole possono richiedere pixel raster aggiuntivi, e dimensioni di pagina frazionarie possono introdurre resampling subpixel quando l'immagine viene riportata sulla pagina fisica
I limiti di conversione si applicano dopo il caricamento della sorgente; configurare i limiti di risorse propri del loader quando si accetta input non fidato
Il grafo di oggetti della sorgente viene conservato, mentre le cache di lettura e le statistiche di decodifica possono risultare popolate; le impostazioni di rendering, cancellation token, backend e budget di decodifica vengono ripristinate sia a successo sia a fallimento
Dare al convertitore accesso esclusivo al proprio documento sorgente mentre applica temporaneamente queste impostazioni
Rendering e colore
Ogni pagina deve effettuare il rendering senza diagnostica di fallback nativo, diagnostica scartata o fallimento per risorsa mancante; il contenuto non supportato respinge la conversione invece di pubblicare una pagina incompleta
L'argomento ICC deve descrivere sRGB con una rappresentazione matrix/TRC riconosciuta, le primarie standard adattate a D50 e la funzione di trasferimento IEC sRGB; profili RGB non correlati, profili CMYK, profili malformati e profili basati su LUT vengono respinti
L'output dichiara un OutputIntent sRGB e metadati XMP PDF/A-4; un workflow ICC di proof o output personalizzato già configurato sulla sorgente viene respinto, perché le sue impostazioni di image decoder non possono essere reinterpretate in sicurezza come sRGB
La build FPC richiede il proprio bridge codec nativo con LittleCMS disponibile e respinge la conversione quando quel backend di color management manca
Gli stream immagine JPEG e JPX, incluse le immagini inline codificate, hanno le dimensioni effettive del codestream ispezionate prima della decodifica nativa dei pixel e devono coincidere con il dizionario immagine del PDF
JPEG accetta header 8-bit baseline, extended sequential e progressive con limiti; JPX accetta header J2K SIZ con limiti e box JP2 di lunghezza ordinaria con al massimo quattro componenti e precisione di componente al massimo 16 bit
I codec codificati hanno un budget di lavoro conservativo aggiuntivo di 64 byte per pixel sorgente, e i metadati tile JPX sono limitati sia da MaxInputObjects sia da 1024 byte per tile entro MaxRasterBytes; il budget raster predefinito di 256 MiB consente quindi al massimo 4,194,304 pixel sorgente codificati, e i chiamanti possono aumentarlo esplicitamente per immagini più grandi
La conversione JBIG2 viene respinta perché le sue allocazioni interne di regioni e simboli non possono essere limitate tramite l'API di header disponibile; vengono respinti anche i codec immagine non terminali, i box JP2 di lunghezza estesa, i wrapper non supportati e gli stream codec con DecodeParms
I parametri fax CCITT devono conservare le dimensioni immagine positive dichiarate; gli override di DecodeParms.Columns e Rows diversi dal dizionario, incluso un Rows=0 sconosciuto, vengono respinti prima della decodifica nativa
Questi controlli limitano i profili noti di header e allocazione accettati da questo convertitore e non promettono una sandbox completa della memoria di processo per ogni decoder nativo
Perdita di informazioni e di qualità
- Contenuto vettoriale, font, trasparenza e spazi colore della sorgente diventano pixel RGB di pagina; un numero di DPI maggiore migliora il dettaglio visivo ma aumenta l'uso di memoria e la dimensione del file
- Il testo di output non è ricercabile né selezionabile, e non viene sintetizzato alcun livello di testo o output OCR
- Annotazioni, appearance di annotazioni, campi form, appearance di widget e appearance di firme visibili vengono omessi invece di essere impressi nel raster di pagina
- Firme digitali, file incorporati, script, action, segnalibri, layer come controlli interattivi, tag strutturali e l'identità originale del documento non vengono conservati
- Il risultato non preserva l'editabilità vettoriale, la validità originale delle firme, l'accessibilità PDF/UA o la semantica del documento sorgente
THPDFArchivalConversionReport fornisce stato di successo e cancellation, conteggi di pagine sorgente e renderizzate, pixel raster, byte di output, conteggi di annotazioni/form/allegati rimossi, una diagnostica di fallimento e le segnalazioni della validazione nativa
FailureKind distingue afkNone, afkConversion, afkBudget e afkCancelled; i fallimenti tipizzati di budget del convertitore forniscono anche BudgetMetric, BudgetObserved e BudgetLimit
Un'eccezione di checkpoint ferma la conversione e viene riportata tramite il risultato di fallimento nativo; i wrapper che richiedono la categoria originale dell'eccezione del callback devono conservarla prima che il convertitore la catturi
L'operazione archive.pdfa4.raster JSON e C ABI richiede l'accettazione esplicita della perdita di informazioni, preserva l'handle della sorgente, consegna il PDF validato e il report di perdita e applica cap conservativi al budget per job
Verifica di conformità
Il convertitore ricarica il proprio output staged e richiede ValidatePDFA4 con il profilo base PDF/A-4 prima della pubblicazione; il validator nativo copre il proprio set di regole documentato e delimitato e non è una prova di ogni requisito ISO 19005-4
L'accettazione indipendente può usare veraPDF con --flavour 4; la fixture di regressione contenente testo non incorporato, trasparenza, un'immagine RGB, un link, un widget di firma e un allegato ha superato veraPDF 1.30.2 senza regole o controlli falliti
Eseguire Tests/Delphi/Run-HotPDFArchivalTests.bat per la suite di regressione non-GUI mirata