function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;
SaveAsPdfAToStream est le pendant de streaming de SaveAsPdfA — il produit la même sortie PDF/A-1b, mais écrit le résultat dans n’importe quel TStream positionnable fourni par l’appelant au lieu de passer par un fichier temporaire. Utile pour les pipelines de téléversement HTTP, les colonnes BLOB, les couches de cache en mémoire, les conteneurs d’archive (ZIP / TAR), ou tout flux de travail où les octets PDF/A n’ont jamais besoin de toucher le disque
La logique de post-traitement est identique à SaveAsPdfA(FileName, Options) : le SaveAs de base s’exécute d’abord, puis une mise à jour incrémentale injecte le flux de métadonnées XMP (qui ponte le dictionnaire Document Information en forme XMP selon ISO 19005-1 6.7.3 / Cor.1 Tableau 1 et incorpore la description de schéma d’extension pdfaid requise par 6.7.8), l’OutputIntent référençant un profil ICC intégré (sRGB par défaut, personnalisé via Options.IccProfileData), une mise à jour du catalogue qui les lie ensemble, et un tableau /ID de trailer requis par 6.1.3. Les champs d’options laissés vides sont auto-remplis depuis FPDF_GetMetaText et FPDF_GetFileIdentifier afin que l’appelant typique ne définisse que Conformance
Renvoie True en cas de succès. Le flux de sortie est laissé à la position après le dernier octet écrit. Renvoie False si le SaveAs de base a échoué ou si le post-traitement PDF/A n’a pas pu être attaché (généralement parce que le PDF source était chiffré, ce que PDF/A interdit)
Write et Seek — un TMemoryStream, un TFileStream ou toute sous-classe qui honore les deux fonctionneSaveAsPdfAToStream n’est pas préservé si le flux a des données après la position courante ; la fonction ne suppose pas de sémantique seek-to-endMemory + Size directement au client HTTPsaRemoveSecurity d’abord
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;