property AttachmentCount: Integer; // read only
تستعرض الخاصية AttachmentCount مسارات الملفات المضمّنة التي يمكن الوصول إليها عبر شجرة الأسماء
/Names /EmbeddedFiles في الكتالوج (القسم 7.11 من مواصفة PDF 1.7). وهذه
ملفات عشوائية (XML أو جداول بيانات أو ملفات CAD مصدرية أو XML موقعة أو أرشيفات ZIP…)
معبأة داخل ملف PDF وتعرضها البرامج في الشريط الجانبي
“Attachments”. ويشترط PDF/A-3 تحديدًا تضمين كل مكوّن مصدر ذي صلة
بهذه الطريقة لضمان إمكانية إعادة الإنتاج على المدى الطويل
تكون القيمة 0 عندما تكون Active تساوي False وعندما
لا يحمل المستند أي ملفات مضمّنة. أما تعليقات إرفاق الملفات
(النوع الفرعي /FileAttachment) فلا تُحتسب هنا إطلاقًا —
فهي تعليقات على مستوى الصفحة وتظهر عبر AnnotationCount
بدلًا من ذلك. ويكشف PDFium Delphi Component المسارات المضمّنة على هيئة TBytes عبر
Attachment[Index]؛ أما اسم الملف المقروء والنوع بأسلوب MIME
فيتاحان عبر AttachmentName[Index]
و AttachmentType[Index]
الحلقة المعتادة هي for I := 0 to Pdf.AttachmentCount - 1 do. وكل
وصول إلى Attachment[I] يفك ضغط مسار الملف المضمّن في الذاكرة،
لذا خزّن TBytes مؤقتًا إذا احتجت إلى كتابته على القرص وتمريره إلى
محلل. كما أن إضافة مرفق أو إزالته يبطل الفهارس — فأعد قراءة
AttachmentCount بعد أي تغيير
لا يُعدَّد سوى شجرة الأسماء /EmbeddedFiles. فالملف المرافق في PDF 2.0
(ISO 32000-2 §7.11.4) المُشار إليه من مصفوفة /AF وحدها — على الـ catalog
أو صفحة أو تعليق أو أي كائن آخر — وغير المسجَّل كذلك في شجرة الأسماء لا يُحتسب ولا فهرس له في
Attachment أو AttachmentName أو
AttachmentRelationship. ويشمل ذلك الملفات التي تكتبها
SaveAsWithAssociateFiles لأنها تضيف
مدخلات /AF فقط. أما معظم منتجي PDF/A-3، بما في ذلك أدوات Factur-X و
ZUGFeRD، فيسجلون كل ملف مرافق في الموضعين، لذا تُدرَج تلك الملفات كالمعتاد
FeatureSupported(feAttachment) للكشف عن ما إذا كان
بناء PDFium المثبَّت يدعم تعديل أسماء المرفقات
var I: Integer;
var Data: TBytes;
for I := 0 to Pdf1.AttachmentCount - 1 do
begin
Data := Pdf1.Attachment[I];
TFile.WriteAllBytes(Pdf1.AttachmentName[I], Data);
end;