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 metadata
الذي يربط Document Information Dictionary بصيغة XMP
وفق ISO 19005-1 6.7.3 / Cor.1 Table 1 ويضم وصف مخطط الامتداد
pdfaid المطلوب بواسطة 6.7.8، وOutputIntent يشير إلى ICC profile
مضمن، وتهيئة sRGB افتراضيًا مع إمكان التخصيص عبر
Options.IccProfileData، وتحديث catalog يربطها معًا،
ومصفوفة trailer /ID المطلوبة بواسطة 6.1.3
تُملأ الحقول الفارغة في Options تلقائيًا من
FPDF_GetMetaText وFPDF_GetFileIdentifier
لذا يكتفي المستدعي المعتاد بضبط Conformance
تُعيد True عند النجاح. يبقى موضع دفق الإخراج عند
الموضع التالي لآخر بايت مكتوب. وتُعيد False إذا فشل
SaveAs الأساسي أو إذا تعذر إرفاق المعالجة اللاحقة الخاصة بـ PDF/A
عادةً لأن ملف PDF المصدر كان مشفرًا، وهو ما يحرمه PDF/A
Write وSeek — ويعمل معه TMemoryStream أو TFileStream أو أي صنف فرعي يلتزم بكليهماSaveAsPdfAToStream إذا كان الدفق يحتوي بيانات بعد الموضع الحالي؛ فالدالة لا تفترض دلالة seek-to-endMemory + Size مباشرة إلى عميل HTTPsaRemoveSecurity أولًا
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;