function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;
SaveAsPdfAToStream è la controparte streaming di
SaveAsPdfA — produce lo stesso output PDF/A-1b,
ma scrive il risultato in qualsiasi TStream seekable fornito dal chiamante
invece di passare da un file temporaneo. Utile per pipeline di upload HTTP,
colonne BLOB, layer di cache in memoria, contenitori di archivio
(ZIP / TAR), o qualsiasi flusso di lavoro in cui i byte PDF/A non debbano mai
toccare il disco
La logica di post-processing è identica a quella di
SaveAsPdfA(FileName, Options): prima gira il SaveAs base,
poi un aggiornamento incrementale inietta lo stream di metadati XMP
(che travasa il Document Information Dictionary in forma XMP
secondo ISO 19005-1 6.7.3 / Cor.1 Tabella 1 e incorpora la descrizione dello schema di estensione pdfaid
richiesta da 6.7.8), l'OutputIntent
che referenzia un profilo ICC incorporato (sRGB per predefinito, personalizzabile
tramite Options.IccProfileData), un aggiornamento del catalogo che
collega il tutto, e un array /ID nel trailer richiesto
da 6.1.3. I campi Options lasciati vuoti vengono auto-popolati da
FPDF_GetMetaText e FPDF_GetFileIdentifier
così il chiamante tipico imposta solo Conformance
Restituisce True in caso di successo. Lo stream di output resta
posizionato dopo l'ultimo byte scritto. Restituisce False
se il SaveAs base è fallito o se il post-processing PDF/A non ha potuto
essere applicato (tipicamente perché il PDF sorgente era crittografato, cosa
che PDF/A vieta)
Write e Seek — vanno bene un TMemoryStream, un TFileStream o qualunque sottoclasse che onori entrambiSaveAsPdfAToStream non viene preservato se oltre la posizione corrente c'è già dati; la funzione non assume semantiche di seek-to-endMemory + SizesaRemoveSecurity
var
Stream: TMemoryStream;
Opts: TPdfASaveOptions;
begin
Stream := TMemoryStream.Create;
try
Opts := Default(TPdfASaveOptions);
Opts.Conformance := pac1b;
if Pdf1.SaveAsPdfAToStream(Stream, Opts) then
begin
Stream.Position := 0;
UploadToArchive(Stream);
end;
finally
Stream.Free;
end;
end;