function SaveAsPdfUaToStream(Stream: TStream; const Options: TPdfUaSaveOptions): Boolean;
SaveAsPdfUaToStream es la contrapartida de streaming de
SaveAsPdfUa — produce la misma salida PDF/UA-1
pero escribe el resultado en cualquier TStream posicionable que proporcione el llamador.
Útil para canalizaciones de subida HTTP, columnas BLOB, capas de caché
en memoria, contenedores de archivo (ZIP / TAR) o cualquier flujo de
trabajo donde los bytes PDF/UA nunca necesiten tocar disco.
La lógica de posprocesado 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), el
/MarkInfo y /ViewerPreferences del catalog
cuando el origen no los tiene, el /Lang del catalog cuando el
llamador suministró una etiqueta BCP 47 y un array /ID de tráiler. Los
campos de Options dejados vacíos se autorrellenan desde los lectores de PDFium
(FPDF_GetMetaText, FPDF_GetFileIdentifier,
FPDFCatalog_GetLanguage) de modo que el llamador habitual solo
establece DocumentTitle o Language si lo necesita.
Devuelve True en caso de éxito. El flujo de salida queda en
la posición tras el último byte escrito. Devuelve False
si el SaveAs base falló o si el posprocesado 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;