function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
تعدّد الطريقة مرفقات المستند على مستوى المستند مرة واحدة وتعيد سجلات يملكها المستدعي تحمل Index و Name و Description و MimeType و Relationship و Size مفكوك الترميز و Readable
يُفحص MaxAttachments قبل ملء مصفوفة النتائج، ما يمنع مستندًا غير موثوق من التسبب في تخصيص بيانات وصفية بلا حدود
لا ينسخ استعلام الحجم بايتات الحمولة إلى ذاكرة PDFium Delphi Component، وإن كان PDFium قد يفك ترميز تيار داخليًا لتحديد طوله مفكوك الترميز
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
يجب أن يحتوي Destinations فتحة واحدة بالضبط لكل مرفق في المستند ويسير بالترتيب المعتمد على الصفر نفسه الذي تسيره Attachment[Index]
تشير الوجهة nil إلى أن العنصر سيُعلَّم بـ paesSkipped، ما يتيح للمستدعي انتقاء المرفقات دون تعداد ثانٍ
تُفك كل حمولة غير فارغة ترميزها عبر PDFium إلى مخزن مؤقت واحد لـ PDFium Delphi Component ثم تُكتب من ذلك المخزن بقطع حجمها ChunkBytes
يُحرَّر المخزن قبل المرفق التالي، فلا يحتفظ PDFium Delphi Component أبدًا بالدفعة كاملة، لكن واجهة PDFium العامة للمرفقات لا تدعم القراءات الجزئية وقد تستخدم ذاكرتها الخاصة لفك الحمولة كاملة داخليًا
تبقى التيارات مملوكة للمستدعي ويبدأ الكتابة من موضع كل تيار الحالي، ولا تعيد الطريقة تمريرها أو تقصيرها
قد يترك الإلغاء أو استثناء في إحدى الوجهات بايتات كُتبت إلى ذلك التيار فعلًا، فالمستدعون الذين يحتاجون خرجًا معامليًا عليهم تزويد تيارات مؤقتة ونشرها بعد تقرير ناجح فقط
| الحقل | الافتراضي | المعنى |
|---|---|---|
MaxAttachments | 10000 | الحد الأقصى لمدخلات البيانات الوصفية والتقرير |
MaxFileBytes | 256 MiB | الحد الأقصى للحجم مفكوك الترميز لمرفق واحد |
MaxTotalBytes | 1 GiB | الحد الأقصى للبايتات المكتوبة عبر كل الوجهات |
ChunkBytes | 1 MiB | الحد الأقصى للبايتات الممررة لكتابة تيار واحدة |
StopOnError | True | التوقف بعد أول عنصر غير قابل للقراءة أو متجاوز للميزانية أو فاشل في الكتابة |
يصف كل سجل TPdfAttachmentMetadata مرفقًا أصليًا واحدًا ويخزن TPdfAttachmentMetadataArray لقطة البيانات الوصفية
يجمع كل TPdfAttachmentBatchItem البيانات الوصفية و TPdfAttachmentExtractionState والبايتات المكتوبة وأي نص خطأ، بينما يخزن TPdfAttachmentBatchItems كل نتائج العناصر
قيم TPdfAttachmentExtractionState هي paesNotProcessed و paesSkipped و paesExtracted و paesUnreadable و paesFileLimit و paesAggregateLimit و paesCancelled و paesWriteFailed
يعدّ TPdfAttachmentBatchReport عدد AttachmentCount و ExtractedCount و SkippedCount و FailedCount إلى جانب BytesWritten و PeakBufferBytes
يعني Completed أن كل عنصر بلغ حالة نهائية دون إلغاء، بينما تشترط قيمة الدالة المُعادة إضافةً أن يكون FailedCount = 0
يُبلِّغ PeakBufferBytes عن أكبر مخزن حمولة لـ PDFium Delphi Component ولا يشمل الذاكرة الخاصة التي يستخدمها PDFium أثناء فك الترميز
var Options: TPdfAttachmentBatchOptions;
var Report: TPdfAttachmentBatchReport;
Options := TPdfAttachmentBatchOptions.Default;
Options.MaxFileBytes := 64 * 1024 * 1024;
Options.MaxTotalBytes := 256 * 1024 * 1024;
if not Pdf1.ExtractAttachmentsToStreams(Destinations, Options, Report) then
HandleAttachmentBatchFailure(Report);