function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;
SaveAsPdfAToStream は SaveAsPdfA のストリーミング版です。同じ PDF/A-1b 出力を生成しますが、一時ファイルを経由せずに、呼び出し側が提供するシーク可能な TStream へ結果を書き込みます。HTTP アップロードパイプライン、BLOB 列、インメモリキャッシュレイヤー、アーカイブコンテナー(ZIP / TAR)、または PDF/A バイトがディスクに触れる必要のないワークフローに有用です
後処理ロジックは SaveAsPdfA(FileName, Options) と同じです。基本の SaveAs が最初に実行され、インクリメンタルアップデートが XMP メタデータストリーム(ISO 19005-1 6.7.3 / Cor.1 表 1 に従い Document Information Dictionary を XMP 形式へ橋渡しし、6.7.8 で要求される pdfaid 拡張スキーマ記述を組み込む)、埋め込み ICC プロファイルを参照する OutputIntent(既定で sRGB、Options.IccProfileData でカスタム)、それらを一緒にリンクするカタログアップデート、6.1.3 で要求されるトレーラー /ID 配列を注入します。空のままの Options フィールドは FPDF_GetMetaText と FPDF_GetFileIdentifier から自動的に穴埋めされるため、典型的な呼び出し側は Conformance のみを設定します
成功すると True を返します。出力ストリームは最後に書き込んだバイトの後の位置に残ります。基本の SaveAs が失敗した場合、または PDF/A 後処理を付加できなかった場合(通常はソース PDF が暗号化されていたためで、PDF/A はこれを禁止します)は False を返します
Write と Seek をサポートする必要があります。TMemoryStream、TFileStream、または両方を尊重する任意のサブクラスが動作しますSaveAsPdfAToStream の前のストリーム内容は保持されません。この関数は末尾へシークする意味論を仮定しませんMemory と Size を HTTP クライアントへ直接渡しますsaRemoveSecurity が必要です
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;