function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;
SaveAsPdfAToStream ist das Streaming-Gegenstück zu
SaveAsPdfA — es erzeugt dieselbe PDF/A-1b-Ausgabe,
schreibt das Ergebnis aber in einen beliebigen seekbaren TStream, den der Aufrufer bereitstellt,
statt über eine temporäre Datei zu laufen. Nützlich für HTTP-Upload-
Pipelines, BLOB-Spalten, Speicher-Cache-Schichten, Archivcontainer
(ZIP / TAR) oder jeden Workflow, in dem die PDF/A-Bytes nie die
Platte berühren müssen
Die Post-Processing-Logik ist identisch zu
SaveAsPdfA(FileName, Options): Das basisliegende SaveAs läuft
zuerst, dann schiebt ein inkrementelles Update den XMP-Metadaten-Stream nach
(der das Document Information Dictionary in XMP-Form überführt,
gemäß ISO 19005-1 6.7.3 / Cor.1 Table 1, und die von 6.7.8 geforderte pdfaid-
Extension-Schema-Beschreibung einbettet), den OutputIntent
mit Verweis auf ein eingebettetes ICC-Profil (standardmäßig sRGB, eigenes
über Options.IccProfileData), ein Katalog-Update, das
alles miteinander verknüpft, und das von 6.1.3 geforderte Trailer-/ID-Array. Leere Options-Felder befüllt die Funktion automatisch aus
FPDF_GetMetaText und FPDF_GetFileIdentifier,
sodass der typische Aufrufer nur Conformance setzt
Liefert True bei Erfolg. Der Ausgabe-Stream steht danach
an der Position nach dem letzten geschriebenen Byte. Liefert False,
wenn das basisliegende SaveAs scheiterte oder sich die PDF/A-Nachbearbeitung
nicht anhängen ließ (typischerweise, weil das Quell-PDF verschlüsselt war, was
PDF/A verbietet)
Write und Seek unterstützen — ein TMemoryStream, TFileStream oder jede Unterklasse, die beides beherrscht, funktioniertSaveAsPdfAToStream bleiben nicht erhalten, wenn hinter der aktuellen Position Daten liegen; die Funktion setzt keine Seek-to-End-Semantik vorausMemory + Size direkt an den HTTP-Client durchreichensaRemoveSecurity
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;