function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;
SaveAsPdfAToStream 是 SaveAsPdfA 的流式对应方法——它生成相同的 PDF/A-1b 输出, 但会把结果写入调用者提供的任意可 seek 的 TStream,而不是先经过临时文件。适用于 HTTP 上传 流水线、BLOB 列、内存缓存层、归档容器(ZIP / TAR)或任何不需要让 PDF/A 字节落盘的流程
后处理逻辑与 SaveAsPdfA(FileName, Options) 完全相同:先执行基础 SaveAs,
然后附加一个增量更新,注入 XMP 元数据流(按 ISO 19005-1 6.7.3 / Cor.1 Table 1 把
Document Information Dictionary 桥接为 XMP 形式,并嵌入 6.7.8 所需的 pdfaid 扩展架构描述)、
通过嵌入式 ICC 配置文件引用的 OutputIntent(默认 sRGB,可通过 Options.IccProfileData
自定义)、把它们连接起来的目录更新,以及 6.1.3 要求的 trailer /ID 数组。留空的
Options 字段会从 FPDF_GetMetaText 和 FPDF_GetFileIdentifier
自动填充,因此通常调用者只需设置 Conformance
成功时返回 True。输出流会停在最后一个已写字节之后的位置。如果基础 SaveAs
失败,或者 PDF/A 后处理无法附加(通常是因为源 PDF 已加密,而 PDF/A 不允许),则返回
False
Write 和 Seek——TMemoryStream、TFileStream 或任何同时满足这两点的子类都可以SaveAsPdfAToStream 之前的流内容不会被保留;该函数不假定 seek-to-end 语义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;