CheckFileComplianceA

التوافق، فحص المستندات

الوصف

الحرف المُلحق A يُشير إلى نقطة دخول ANSI (char) في DLL؛ بينما تكشف واجهة ActiveX/COM الشكل Unicode فقط. السلوك مطابق لـ CheckFileCompliance وتُفسَّر وسائط السلاسل النصية باستخدام صفحة الرموز الحالية لـ SetAnsiMode

يقرأ ملف PDF خارجيًا ويتحقق منه ضد معيار امتثال ISO مختار. والقيمة المُرجعة إما صفر (يجتاز الملف الاختبار المختار بنظافة) أو مقبض StringListID غير صفري يسرد كل ملاحظة رُصدت. وكل مدخل في القائمة رمز قصير ونقطتان ورسالة مقروءة للإنسان — صيغة الرمز نفسها تمامًا التي تستخدمها GetPDFUADiagnostics. عدّد النتيجة بـ GetStringListCount وGetStringListItem

يغطي اختبار PDF/A جميع أوضاع الامتثال الستة (PDF/A-1a وPDF/A-1b وPDF/A-2a وPDF/A-2b وPDF/A-3a وPDF/A-3b) ويقرأ مدخلي XMP ‏pdfaid:part/pdfaid:conformance ليقرر مجموعة القواعد التي يطبقها

يفحص اختبار PDF/UA-1 ‏(أضيف في v3.56.0) ملف PDF خارجيًا ضد ISO 14289-1 ويصدر رموزًا تشخيصية في مدى 10xxx فتبقى منفصلة بصريًا عن رموز PDF/A ‏00xxx

الصيغة

Delphi

Function DLCheckFileComplianceA(InstanceID: Integer; InputFileName, Password: PAnsiChar; ComplianceTest, Options: Integer): Integer;

DLL

int DLCheckFileComplianceA(int InstanceID, const char * InputFileName, const char * Password, int ComplianceTest, int Options);

المعاملات

InputFileNameالمسار الكامل لملف PDF المطلوب التحقق منه. يُفتح الملف للقراءة فقط ولا يُعدَّل
Passwordكلمة المرور المستخدمة لفتح الملف. مرِّر سلسلة فارغة للمستندات غير المشفرة. ولاحظ أن المستند المشفر يفشل اختبار PDF/A‏ (الرمز 00006) بغض النظر عن تقديم كلمة المرور الصحيحة — PDF/A يحظر التشفير
ComplianceTestالمعيار المطلوب التحقق ضده.

1 — PDF/A ‏(ISO 19005-1/-2/-3، مستويات الامتثال الستة كلها).
2 — PDF/UA-1‏ (ISO 14289-1:2014، PDF ميسور الوصول)
Optionsبتات أعلام تعدل الاختبار.

0 — الافتراضي: الإبلاغ عن كل ملاحظة في المستند.
1 — التوقف بعد أول ملاحظة والعودة فورًا. مفيد عندما يحتاج المستدعي إشارة نجاح/فشل فقط

قيم الإرجاع

0الملف ممتثل للمعيار المختار
Non-zeropoPortrait أو poLandscape؛ ويبدل الوضع العرضي أبعاد الورق المضبوطة

PDF/A issue codes (ComplianceTest = 1)

00002يتجاوز إصدار PDF الحد الأقصى المسموح به بمستوى الامتثال‏ (PDF/A-1 يسقف عند 1.4؛ وPDF/A-2 وPDF/A-3 يسقفان عند 1.7). ويسمي سطر التفاصيل الإصدار المخالف والحد الأقصى المسموح
00003يحتوي الكتالوج /OCProperties‏ (محتوى اختياري / طبقات)، محظورًا في PDF/A-1. وتسمح PDF/A-2 وPDF/A-3 بالطبقات ولا تطلق هذا الفحص
00005زوج XMP ‏pdfaid:part+pdfaid:conformance مفقود أو مشوه أو يحتوي قيمة خارج المجموعة القانونية 1A و1B و2A و2B و3A و3B. وتتعذر على المكتبة تحديد مجموعة القواعد التي تطبقها، فيُبلغ عن ذلك كملاحظة قاتلة بغض النظر عن Options
00006المستند مشفر. يحظر PDF/A التشفير في كل جزء
00007لا يمتلك الكتالوج مدخلة /OutputIntents. وتتطلب جميع أجزاء PDF/A نية إخراج حتى يُعرَّف فضاء ألوان الرسم بلا لبس
00011لا يمتلك الكتالوج مدخلة /MarkInfo. مطلوبة فقط لامتثال المستوى a‏ (PDF/A-1a و2a و3a) — يجب أن يعلن PDF الموسوم عن نفسه
00012لا يمتلك الكتالوج مدخلة /StructTreeRoot. مطلوبة فقط لامتثال المستوى a. ويجب أن يملك مستند PDF موسومًا شجرة بنية منطقية

PDF/UA-1 issue codes (ComplianceTest = 2)

10001لا يحتوي تدفق البيانات الوصفية XMP ‏pdfuaid:part أو القيمة ليست 1. يتطلب ISO 14289-1 §5 من الملف الممتثل أن يعرّف عن نفسه عبر هذه الخاصية؛ ويحظر ISO 14289-1 §6.2 الإبلاغ عن امتثال دونها
10002لا يمتلك كتالوج المستند تدفق /Metadata. ويُسجل ادّعاء امتثال PDF/UA-1 داخل هذا التدفق؛ ودونه يتعذر على الملف الإعلان عن نفسه كميسور الوصول
10003قاموس /MarkInfo في الكتالوج مفقود أو /Marked ليست true. يتطلب ISO 14289-1 §7.1 من كل ملف ممتثل أن يعلن عن نفسه كموسوم حتى تعتمد تقنيات المساعدة على شجرة البنية
10004لا يمتلك الكتالوج مدخلة /StructTreeRoot. يجب أن يتضمن ملف PDF/UA-1 شجرة بنية منطقية تصف ترتيب قراءة المستند ودلالاته
10005قاموس /ViewerPreferences مفقود أو مدخلة /DisplayDocTitle فيه ليست true. يتطلب ISO 14289-1 §7.1 من القارئات الممتثلة إظهار عنوان المستند في إطار نافذتها بدلًا من اسم الملف
10006مدخل /Lang في الكتالوج مفقود أو فارغ. يتطلب ISO 14289-1 §7.2 ‏(إحالة إلى ISO 32000-1 §14.9.2) من كل ملف ممتثل أن يعلن لغته الطبيعية حتى تختار قارئات الشاشة الصوت وقواعد النطق الصحيحة
10007لا يحمل تدفق البيانات الوصفية XMP ‏dc:title غير فارغ لمجموعة Dublin Core. يتطلب ISO 14289-1 §7.1 ‏"مدخلة dc:title تحدد المستند بوضوح"
10008قاموس /MarkInfo مضبوطًا فيه /Suspects على true. ISO 14289-1 §7.1: يجب أن تمتلك الملفات المدّاعية الامتثال لـ PDF/UA قيمة Suspects تساوي false — والقيمة true تميز الوسم كمعروف بامتلاكه أخطاء
10009يعيد /RoleMap للمستند مطابقة نوع بنية قياسي واحدًا أو أكثر. ISO 14289-1 §7.1: ينبغي عدم إعادة مطابقة الوسوم القياسية المعرفة في ISO 32000-1 §14.8.4‏ (P وH1..H6 وFigure وTable وهكذا). ويسمي سطر التفاصيل أول وسم قياسي أُعيدت مطابقته
10010الملف مشفر لكن البت 10 من مفتاح الأذونات /P للتشفير‏ (القناع 512، "استخراج لإمكانية الوصول") غير مضبوط. يتطلب ISO 14289-1 §7.16 من كل ملف مشفر ممتثل السماح باستخراج إمكانية الوصول حتى تصل تقنيات المساعدة إلى المحتوى
10011مصفوفة بايتات من نوع variant تحتوي ملف PDF المدخل لبناء قسم التحديث عليه
10012StringListID غير صالح أو لا يشير إلى قائمة سلاسل يملكها هذا المثيل
10013رُصدت تعليقات TrapNet توضيحية واحدة أو أكثر. يحظر ISO 14289-1 §7.18.2 صراحةً TrapNet في الملفات الممتثلة. ويُبلغ سطر التفاصيل عن عدد التعليقات التوضيحية الموجودة
10014صفحات تحمل تعليقات توضيحية لكنها لا تضبط /Tabs /S في قاموس صفحتها. يتطلب ISO 14289-1 §7.18.3 أن يتبع ترتيب التبويب في هذه الصفحات شجرة البنية، ويُشار لذلك بـ /Tabs /S. ويُبلغ سطر التفاصيل عن عدد الصفحات المخالفة
10015تعليقات Link توضيحية واحد أو أكثر تنقصها وصف بديل /Contents غير فارغ. يتطلب ISO 14289-1 §7.18.5 من كل تعليق توضيحي Link أن يحمل وصفًا يسهل الوصول إليه حتى تتمكن قارئات الشاشة من الإعلان عن هدف الارتباط. ويُبلغ سطر التفاصيل عن عدد تعليقات Link التوضيحية المخالفة
10016قواميس FileSpec لملفات مضمّنة واحد أو أكثر تنقصها مفتاح اسم الملف /F. يتطلب ISO 14289-1 §7.11 من كل FileSpec لملف مضمّن أن يحمل /F و/UF معًا
10017قواميس FileSpec لملفات مضمّنة واحد أو أكثر تنقصها مفتاح اسم الملف Unicode‏ /UF. يتطلب ISO 14289-1 §7.11 من كل FileSpec لملف مضمّن أن يحمل /F و/UF معًا
10018قواميس تهيئة محتوى اختياري واحد أو أكثر تنقصهم سلسلة نص /Name غير فارغة. يتطلب ISO 14289-1 §7.10 من كل قاموس تهيئة OCG‏ (مدخل D الافتراضي إضافة إلى كل قاموس في OCProperties/Configs) أن يحمل /Name غير فارغ
10019قواميس تهيئة محتوى اختياري واحد أو أكثر تحتوي مفتاح /AS المحظور. يحظر ISO 14289-1 §7.10 صراحةً /AS في أي قاموس تهيئة OCG لمنع تعديلات الحالة التلقائية المدفوعة بمعلومات الاستخدام
10020خطوط غير Standard-14 واحدة أو أكثر يشير إليها المستند لا تضمّن برنامج خطها (بلا مدخل FontFile أو FontFile2 أو FontFile3 على الـ FontDescriptor). يتطلب ISO 14289-1 §7.21.4.1 من كل خط مستخدم للرسم أن يضمّن برنامجه. وتتخطى خطوط Type 3 هذا الفحص لأن حروفها CharProcs داخل السطر
10021أحفاد CIDFontType2 واحد أو أكثر تنقصهم مدخلة /CIDToGIDMap. يتطلب ISO 14289-1 §7.21.3.2 من كل CIDFont من Type 2 مضمّن أن يحمل /CIDToGIDMap‏ (إما كتدفق يطابق CIDs بفهارس الحروف أو كاسم Identity)
10022تُشار خطوط Standard 14 واحدة أو أكثر‏ (Helvetica وTimes وCourier وSymbol وZapfDingbats وتنويعاتها العريضة/المائلة) دون برنامج خط مضمّن. ويوضح ISO 14289-1 §7.21.4 NOTE 5 أنه لا إعفاء من التضمين لخطوط Type 1 القياسية الأربعة عشر
10023خطوط واحد أو أكثر تنقصها CMap‏ /ToUnicode ولا تطابق قائمة إعفاء §7.21.7. وتغطي قائمة الإعفاء‏ MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding المعرفة مسبقًا، وخطوط Type 0 التي يستخدم CIDFont التابع لها مجموعات محارف Adobe‏ GB1 / CNS1 / Japan1 / Korea1، وخطوط TrueType غير الرمزية
10024أول عنصر عنوان بترتيب المستند ليس H1‏ (أو H شديد البنية). ISO 14289-1 §7.4.2: ‏"إذا استُخدمت أي وسوم عناوين فيجب أن يكون H1 هو الأول"
10025رُصدت تخطيات مستوى عنوان واحدًا أو أكثر بترتيب المستند — مثل H1 يليه فورًا H3 متجاوزًا H2. يتطلب ISO 14289-1 §7.4.2 أن تتقدم تسلسلات العناوين الهابطة بترتيب رقمي صارم دون تخطي المستويات الوسيطة
10026تعليقات Widget توضيحية واحد أو أكثر تنقصهم مدخلة /StructParent. يتطلب ISO 14289-1 §7.18.4 أن تتداخل تعليقات Widget التوضيحية داخل وسم بنية Form؛ وبدون /StructParent يستحيل الوصول إلى الـ Widget من شجرة البنية. ويُبلغ سطر التفاصيل عن العدد
10027تعليقات Widget توضيحية واحد أو أكثر تملك مدخلة /StructParent لكن قيمتها لا تُحل عبر StructTreeRoot/ParentTree إلى عنصر بنية بـ /S = Form. يتطلب ISO 14289-1 §7.18.4 أن يتداخل كل تعليق توضيحي Widget داخل وسم بنية Form. الأسباب المحتملة: مدخلة /ParentTree غائبة كليًا أو تشير إلى غير StructElem‏ (عدد صحيح خام / قاموس MCR) أو تسمي وسمًا غير Form
10028خطوط TrueType غير رمزية واحد أو أكثر تملك /Encoding‏ (أو /BaseEncoding لقاموس Encoding) ليست MacRomanEncoding أو WinAnsiEncoding. ويقيّد الفقرة الرابعة من ISO 14289-1 §7.21.6 ترميز TrueType غير الرمزي إلى هذين الاسمين المعرفين مسبقًا
10029خطوط TrueType رمزية واحدة أو أكثر تحمل مدخلة /Encoding في قاموس الخط. يحظر ذلك الفقرة الرابعة من ISO 14289-1 §7.21.6 — ينبغي التعبير عن ترميز TrueType الرمزي عبر جدول cmap لبرنامج الخط المضمّن فقط
10030عناصر بنية L‏ (قائمة) واحد أو أكثر تنقصهم خاصية ListNumbering. يتطلب ISO 14289-1 §7.6 من كل وسم L أن يعلن نمط ترقيمه عبر هذه الخاصية. والقيم الصالحة هي None وDisc وCircle وSquare وDecimal وUpperRoman وLowerRoman وUpperAlpha وLowerAlpha‏ (ISO 32000-1 Table 347)
10031تعليقات Link توضيحية واحد أو أكثر تحمل قاموس إجراء URI قيمة /IsMap فيه true. يحظر ISO 14289-1 §7.18.5‏ /IsMap = true على إجراء URI ما لم توفر وظيفة مكافئة في مكان آخر من المحتوى دون مفتاح /IsMap. وعلى المؤلفين ذوي حالة استخدام IsMap المشروعة كبت هذا التشخيص بأنفسهم
10032عناصر بنية Note واحد أو أكثر تنقصها مدخلة /ID. يتطلب ISO 14289-1 §7.9 من كل وسم Note أن يعلن /ID فريدًا حتى تستقر المراجع المتقاطعة على هدف ثابت
10033عنصرا بنية Note أو أكثر يتشاركان قيمة /ID نفسها. ويُبلغ سطر التفاصيل عن عدد الأزواج المكررة المرصودة. يتطلب ISO 14289-1 §7.9 أن تكون معرفات Note فريدة داخل المستند
10034برامج TrueType غير رمزية واحد أو أكثر‏ (FontDescriptor بعلم Symbolic ممسوح وتدفق FontFile2 موجود) تضمّن جدول cmap لوحته الفرعية الوحيدة هي مدخلة Microsoft الرمزية ‏(3,0). يتطلب الفقرة الأولى من ISO 14289-1 §7.21.6 لوحة فرعية cmap غير رمزية واحدة على الأقل حتى يستطيع البرنامج رسم نقاط الشيفرة التي يعلنها /Encoding الخاص به
10035خطوط TrueType غير رمزية واحدة أو أكثر تعلن /Encoding بمصفوفة /Differences تحتوي أسماء حروف ليست أعضاء في Adobe Glyph List 2.0. و.notdef في القائمة البيضاء لأن المواصفة تسمح به ضمنيًا. ويتطلب الفقرة الثالثة من ISO 14289-1 §7.21.6 أن تستقر كل مدخلة Differences في AGL
10042قواميس بيانات مقاطع وسائط واحد أو أكثر (المعرفة بـ /S /MCD واختياريًا /Type /MediaClip) تنقصها مدخلة نوع المحتوى /CT المطلوبة. وترقي ISO 14289-1 §7.18.6 هذا المفتاح الاختياري من ISO 32000-1 Table 274 إلى مطلوب
10043قواميس بيانات مقاطع وسائط واحد أو أكثر تنقصها مصفوفة /Alt المطلوبة‏ (أزواج سلسلة لغة + نص بديل). وترقي ISO 14289-1 §7.18.6 هذا المفتاح الاختياري من ISO 32000-1 Table 274 إلى مطلوب حتى تتمكن تقنيات المساعدة من الإعلان عن وصف للوسائط المتعددة المضمّنة
10044عقد في شجرة البنية تحمل أكثر من ابن H‏ (عنوان عام) مباشر واحدًا. يحظر ISO 14289-1 §7.4.4 ذلك صراحةً — قسّم القسم أو استبدل وسوم H بمستويات مرقمة H1..H6

ملاحظات

اختبار PDF/A مخصص كفحص ذاتي سريع قبل التسليم. ويلتقط مشكلات مستوى المستند التي تستبعد ملفًا قاطعًا (إصدار PDF خاطئ، نية إخراج مفقودة، شجرة بنية مفقودة عند المستوى A، تشفير، طبقات في PDF/A-1). وهو لا يمشي على كل عامل تدفق محتوى ولا يتحقق من تضمين الخطوط أو مراجع فضاءات الألوان لكل كائن مرسوم — تلك التحققات تتطلب مدقق PDF/A مخصصًا (مثل veraPDF). استخدم هذه الدالة كفحص خط أول وبوابة انحدار في خطوط البناء. واستخدم CreatePreflightReport أو SavePreflightReport عندما تريد من المكتبة تنسيق قوائم الملاحظات في تقرير نصي قابل لإعادة الاستخدام. واستخدم CreatePreflightReportEx أو SavePreflightReportEx لإخراج تقرير نصي أو JSON أو HTML أو CSV، أو راجع Preflight Reports لسير عمل التقرير الكامل

تجري الواجهة المرافقة GetPDFUADiagnostics فحوصًا مماثلة لـ PDF/UA-1‏ (ISO 14289-1) على المستند في الذاكرة قيد البناء حاليًا بدلًا من ملف خارجي

عندما تنتج إخراج PDF/A بهذه المكتبة استدعِ SetPDFAMode قبل إضافة أي محتوى. ويحجب حارس التوليد داخل SetPDFAMode العمليات المحظورة من الجزء المختار فيمتثل مستند بُني بهذه الطريقة عادةً لـ CheckFileCompliance تلقائيًا

مثال

// Validate a delivered PDF/A file and print all issues
var
  Issues, Count, I: Integer;
begin
  Issues := PDF.CheckFileCompliance('archive.pdf', '', 1, 0);
  if Issues = 0 then
    WriteLn('archive.pdf: PDF/A conformant')
  else
  begin
    Count := PDF.GetStringListCount(Issues);
    WriteLn('archive.pdf: ', Count, ' PDF/A issue(s) detected:');
    for I := 1 to Count do
      WriteLn('  ', PDF.GetStringListItem(Issues, I));
  end;
end;

// Fast pass/fail gate in a CI pipeline — stop on the first issue
var
  Failed: Boolean;
begin
  Failed := PDF.CheckFileCompliance('build/output.pdf', '', 1, 1) <> 0;
  if Failed then
    Halt(1);
end;

انظر أيضا

Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode