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 将文档信息字典桥接到 XMP 形式,
并嵌入 6.7.8 所要求的 pdfaid 扩展架构描述)、引用嵌入 ICC 配置文件
(默认为 sRGB,通过 Options.IccProfileData 自定义)的 OutputIntent、
将它们链接在一起的目录更新,以及 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;