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 (який переносить Document Information Dictionary у форму XMP
згідно з ISO 19005-1 6.7.3 / Cor.1 Table 1 і вбудовує опис схеми
розширення pdfaid, необхідний згідно з 6.7.8), OutputIntent, що
посилається на вбудований профіль ICC (типово sRGB, власний —
через Options.IccProfileData), оновлення каталогу, яке
зв’язує їх докупи, та масив /ID у трейлері, необхідний
згідно з 6.1.3. Поля Options, залишені порожніми, автоматично
заповнюються з FPDF_GetMetaText і FPDF_GetFileIdentifier,
тож типовий викликувач задає лише Conformance
Повертає True у разі успіху. Вихідний потік лишається
на позиції після останнього записаного байта. Повертає False,
якщо базовий SaveAs завершився невдало або якщо постобробку PDF/A
не вдалося додати (типово тому, що вихідний PDF був зашифрований,
чого PDF/A забороняє)
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;