function SaveAsPdfUaToStream(Stream: TStream; const Options: TPdfUaSaveOptions): Boolean;
SaveAsPdfUaToStream es la contraparte de flujo de
SaveAsPdfUa — produce la misma salida PDF/UA-1
pero escribe el resultado en cualquier TStream que admita posicionamiento y que proporcione quien llama
Útil para canalizaciones de carga HTTP, columnas BLOB, capas de caché
en memoria, contenedores de archivo (ZIP / TAR), o cualquier flujo de trabajo donde los
bytes de PDF/UA nunca necesiten tocar el disco.
La lógica de posprocesamiento es idéntica a
SaveAsPdfUa(FileName, Options): primero se ejecuta el
SaveAs base, luego una actualización incremental inyecta el flujo de
metadatos XMP (con el dc:title obligatorio según ISO 14289-1 §7.1 y
la descripción del esquema de extensión pdfuaid), /MarkInfo de
catálogo y /ViewerPreferences cuando el
origen no los tiene, /Lang de catálogo cuando quien llama suministró
una etiqueta BCP 47, y un arreglo /ID de trailer. Los campos de Options
que se dejen vacíos se autorrellenan a partir de los lectores de PDFium
(FPDF_GetMetaText, FPDF_GetFileIdentifier,
FPDFCatalog_GetLanguage) por lo que un llamador típico solo
establece DocumentTitle o Language si es necesario.
Devuelve True en caso de éxito. El flujo de salida queda en
la posición después del último byte escrito. Devuelve False
si el SaveAs base falló o si el posprocesamiento no pudo
adjuntarse (normalmente un origen cifrado).
saRemoveSecurity primero.
var
Stream: TMemoryStream;
Opts: TPdfUaSaveOptions;
begin
Stream := TMemoryStream.Create;
try
Opts := TPdfUaSaveOptions.Default;
Opts.DocumentTitle := 'Quarterly Report';
Opts.Language := 'en';
if Pdf1.SaveAsPdfUaToStream(Stream, Opts) then
begin
Stream.Position := 0;
UploadToArchive(Stream);
end;
finally
Stream.Free;
end;
end;