function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;
SaveAsPdfAToStream es la contraparte en streaming de
SaveAsPdfA — produce la misma salida PDF/A-1b, pero escribe el resultado en cualquier
TStream con capacidad de búsqueda que proporcione quien llama en lugar de pasar por un archivo
temporal. Útil para canalizaciones de carga HTTP, columnas BLOB, capas de caché en memoria, contenedores de
archivo (ZIP / TAR) o cualquier flujo de trabajo en el que los bytes PDF/A nunca necesiten tocar disco
La lógica de posprocesado es idéntica a SaveAsPdfA(FileName, Options): primero se ejecuta el
SaveAs base, luego una actualización incremental inyecta el flujo de metadatos XMP (que lleva el
diccionario de información del documento a forma XMP según ISO 19005-1 6.7.3 / Cor.1 Table 1 y embebe la
descripción del esquema de extensión pdfaid requerida por 6.7.8), el OutputIntent que referencia
un perfil ICC incrustado (sRGB por defecto, personalizable mediante Options.IccProfileData), una
actualización del catálogo que los enlaza y un array /ID de trailer requerido por 6.1.3. Los
campos de opciones que se dejan vacíos se autocompletan desde FPDF_GetMetaText y
FPDF_GetFileIdentifier, así que el llamador típico solo fija Conformance
Devuelve True si tiene éxito. El flujo de salida queda en la posición posterior al último byte
escrito. Devuelve False si falló el SaveAs base o si no se pudo acoplar el
posprocesado PDF/A (normalmente porque el PDF origen estaba cifrado, algo que PDF/A prohíbe)
Write y Seek — funciona un TMemoryStream, un TFileStream o cualquier subclase que respete ambosTMemoryStream y pasa su Memory + Size directamente al cliente HTTPSaveAsPdfA: este método no hace cumplir las reglas de contenido PDF/A, y los documentos cifrados necesitan primero 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;