الامتثال: مدقق PDF/R-1 وقواعد Arlington وأدوات دورة الحياة
لمحة سريعة
قسم بعنوان «لمحة سريعة»توفر NextPDF\Compliance مدققات دفق البايتات ومراجعة متقاطعة للقواعد تقرأ ملف Portable Document Format (PDF) مكتملاً، وتبلّغ عن مواضع اختلافه عن العقد المعياري. عندما يُرجِع المدقق صفرًا من النتائج، تكون النتيجة مُتحقَّقًا منها مقابل البنود التي يطبّقها، لكنها ليست شهادة شاملة.
التثبيت
قسم بعنوان «التثبيت»composer require nextpdf/core:^3نظرة مفاهيمية عامة
قسم بعنوان «نظرة مفاهيمية عامة»تتكون الوحدة من ثلاثة أجزاء.
PdfRValidator يدقق دفق بايتات مرشحًا وفق ISO 23504-1:2020 (PDF/R-1). يعمل على البايتات الخام، لا على الحالة الداخلية للكاتب. يلتقط الانحراف بين ما ينوي الكاتب إصداره وما تتطلبه المواصفة، ليكون الفحص النهائي. مجموعة البنود المطبَّقة هي عنقود v5.1.0: §5 تعليق تعريف الإصدار، و§6.2.2/§6.2.3 قائمة السماح للترويسة، و§6.2.4 منع الجيل-0 ودفق الكائنات، و§6.5.7 قائمة السماح لمشغِّلات دفق المحتوى (q، Q، cm، Do فقط)، و§6.6.1 قائمة السماح لمفاتيح XObject الصورية، و§6.4.3 قائمة السماح لمفاتيح قاموس Info، و§6.3 قائمة السماح لمفاتيح Catalog. التحديثات التزايدية في §6.7 والتشفير في §6.8 خارجان صراحةً عن نطاق العنقود الأولي، وهذا مُعلَن في claims.json. لا يتوقف المدقق عند أول نتيجة، بل يجمع كل اختلاف في مرور واحد لتتمكن من رؤية الفرق الكامل.
PdfRConformancePolicy سياسة غير قابلة للتغيير للنطاقات الموصى بها ذات الطابع الإعلامي المحيطة بـ PDF/R-1. الحد الأدنى المعياري في §6 غير قابل للضبط مطلقًا. تتحكم السياسة فقط في توصيات حدود التطبيق في §A.5، وتثبيط الشرائح المتعددة في §6.6.1، ومتطلب XMP Extensible Metadata Platform (XMP) في §A.6 لأجل إعادة تصنيف PDF/A اللاحقة.
ArlingtonValidator يشغّل نموذج Arlington PDF المنبع من PDF Association في وضع الإبلاغ فقط. وهو استشاري طوال الدورة الحالية: لا يطلق validateReportOnly() استثناءً أبدًا. ويتراجع عبر ثلاثة أوضاع. عندما يتوفر ثنائي المدقق المرجعي، يحلل نتائج منظَّمة. وعندما تتوفر القواعد المثبَّتة فقط، يصدر نتيجة info واحدة تثبت أن تثبيت القواعد قد حُمّل. وعندما تكون القواعد غير متوفرة، يُرجِع قائمة فارغة. يتيح WaiverRegistry للمنسّق إخفاء الخلافات المعروفة والمقبولة مع الحفاظ على مسار التدقيق.
تطابق قاعدة الصدق مصفوفة دعم Cascading Style Sheets (CSS) ووحدة المطابقة. يكون البند متحقَّقًا منه فقط عند وجود اختبار ناجح والاستشهاد بالبند المعياري. أما البند المطبَّق دون تجهيزة اختبار ناجحة مخصصة فيكون مُدَّعًى. تُذكَر البنود الخارجة عن النطاق صراحةً، ولا تُترَك غامضة. تؤكد نتيجة PdfRValidator التي لا تتضمن أي نتائج البنود التي يفحصها فقط، ولا تدّعي أي شيء بشأن §6.7 أو §6.8، اللذين لا يطبّقهما.
واجهة API
قسم بعنوان «واجهة API»| النوع | الصنف | الأعضاء الأساسيون |
|---|---|---|
NextPDF\Compliance\Validator\PdfRValidator | final class | validate(string $pdfBytes): list<PdfRValidationFinding> |
NextPDF\Compliance\Validator\PdfRValidationFinding | final readonly class | string $clause، 'error'|'warning'|'info' $severity، string $message |
NextPDF\Compliance\Profile\PdfRConformancePolicy | final readonly class | __construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false)؛ lax()، strictArchival() |
NextPDF\Compliance\Validator\ArlingtonValidator | final class | validateReportOnly(string $pdfPath): list<ArlingtonFinding> |
NextPDF\Compliance\Validator\WaiverRegistry | final class | isWaived(string $validator, string $ruleId, string $scopeKey): bool |
عينة شيفرة — بداية سريعة
قسم بعنوان «عينة شيفرة — بداية سريعة»<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\PdfRValidator;
$validator = new PdfRValidator();$findings = $validator->validate(file_get_contents('candidate.pdf'));
if ($findings === []) { // Zero divergences from the §6 clauses PdfRValidator implements. // This is NOT a PDF/R-1 certificate — §6.7 and §6.8 are not checked. echo "No PDF/R-1 §6 divergences detected (implemented clause set).\n";} else { foreach ($findings as $f) { echo "[{$f->severity}] §{$f->clause}: {$f->message}\n"; }}عينة شيفرة — للإنتاج
قسم بعنوان «عينة شيفرة — للإنتاج»<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\ArlingtonValidator;use NextPDF\Compliance\Validator\ArlingtonGrammarLoader;use NextPDF\Compliance\Validator\WaiverRegistry;
$validator = new ArlingtonValidator( waivers: new WaiverRegistry(/* loaded waiver entries */), grammar: new ArlingtonGrammarLoader(/* pinned submodule path */), adapter: null, // grammar-only mode when the reference checker is absent);
// Advisory by contract — never throws on findings.$findings = $validator->validateReportOnly('artifact.pdf');
foreach ($findings as $finding) { // Each finding pins the Arlington grammar commit SHA for provenance. logger()->info('arlington', [ 'rule' => $finding->ruleId, 'severity' => $finding->severity, 'grammarSha' => $finding->grammarSha, ]);}الحالات الحدية والمزالق
قسم بعنوان «الحالات الحدية والمزالق»PdfRValidatorقائم على التعبيرات النمطية، وليس محلِّلًا كاملًا. يستهدف المخرَج الحتمي لـNextPDF\Writer\PdfRWriter. استخدمه كاشفًا للانحراف لذلك الكاتب، لا محلِّل PDF عامًّا.- صفر من النتائج ≠ مطابقة PDF/R-1 الكاملة. §6.7 (التحديثات التزايدية) و§6.8 (التشفير) غير مطبَّقَين في عنقود v5.1.0 ومُعلَن أنهما خارج النطاق في
claims.json. عامِل النتيجة النظيفة على أنها “لا انحراف عن مجموعة البنود المطبَّقة”، ولا أكثر. - Arlington استشاري. في الدورة الحالية، لا يُفشِل
validateReportOnly()عملية البناء أبدًا. يستهلك التكامل المستمر (CI) المُخرَج، لكنه لا يحجب البناء بناءً عليه. - تدقيق PDF/A الخاص بـ International Color Consortium (ICC) ليس هنا. يقع تدقيق OutputIntent ICC الخاص بـ ISO 19005-4:2020 §6.2.2 في
PdfAManagerالخاص بإصدار Enterprise (nextpdf/pro)، لا في وحدة Compliance الخاصة بـ Core. واجهة PDF/A الخاصة بـ Core هي مميِّزConformanceModeفقط. - التنازلات تحفظ مسار التدقيق. تُخفى القاعدة المتنازَل عنها من قائمة النتائج، لكن مدخلة التنازل تظل سجلَّ السبب.
الأداء
قسم بعنوان «الأداء»ينفذ PdfRValidator::validate() مرورًا خطيًا واحدًا بمسارات تعبيرات نمطية محدودة فوق دفق البايتات. تتناسب التكلفة مع حجم المستند وتبقى داخل ميزانية الوحدة بأريحية. في وضع القواعد فقط، يكون ArlingtonValidator بتعقيد O(grammar-rule-count) لنتيجة إثبات التحميل. يعمل مسار المدقق المرجعي كعملية فرعية، وتحدّه الأداة المنبع لا NextPDF. وهو خطوة CI خارج النطاق.
ملاحظات أمنية
قسم بعنوان «ملاحظات أمنية»تقرأ هذه المدققات بايتات PDF غير موثوقة. يجرّد PdfRValidator القيم الحرفية المحصورة بأقواس والقيم الست عشرية قبل استخراج المفاتيح، لذلك لا يمكن لسلسلة Creator مُصاغة بخبث حقن مفتاح /Name زائف (معالجة الهروب في ISO 32000-1:2008 §7.3.4.2). يشغّل مهايئ Arlington المدقق المنبع كعملية فرعية محدودة، ويعامِل انتهاء المهلة أو خطأ التنفيذ على أنه “لا نتائج” بدلًا من الوثوق بمخرَج جزئي. راجع نموذج التهديد الخاص بالمشروع للاطلاع على سطح هجوم تحليل PDF.
المطابقة
قسم بعنوان «المطابقة»| المعيار | البند | ما تفعله وحدة Compliance | الحالة |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | يفرض PdfRValidator قائمة السماح لمشغِّلات دفق المحتوى {q,Q,cm,Do} | متحقَّق منه (نجاح اختبارات الوحدة + ملف المعايير + التكامل) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | يفرض PdfRValidator قائمة السماح لمفاتيح قاموس Info | متحقَّق منه (مدعوم باختبار) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7، §6.8 | غير مطبَّق في عنقود v5.1.0 | عدم تغطية صريح (مُعلَن في claims.json) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | فحص قائمة السماح لمفاتيح Catalog | مُدَّعًى (فحص بتعبير نمطي؛ هيكلي) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | إدراك مخطط التعريف عبر وحدة Conformance | إحالة متقاطعة (انظر /specifications/pdfa4/) |
الدعم ليس مطابقة. تشغيل PdfRValidator الذي لا يُرجِع أي نتائج يثبت فقط أن المُدخَل لم ينحرف عن بنود §6 التي يطبّقها المدقق. وهو لا يؤكد أن الملف ملف PDF/R-1 مطابق: §6.7 و§6.8 غير مفحوصَين. المراجعة المتقاطعة لـ Arlington استشارية ولا تؤكد المطابقة أبدًا. بالنسبة إلى PDF/A-4، يكون veraPDF هو المدقق المرجعي ويعمل خارج النطاق. راجع وحدة المطابقة للاطلاع على أوراكل veraPDF والحجب الاختياري الخاص به.
الاستشهادات مُعاد صياغتها من مدونة امتثال NextPDF. تُسجَّل بصمات reference_id الكاملة المكوَّنة من 64 محرفًا في ترويسة الصفحة وفي _normative-evidence-conf.md.
انظر أيضًا
قسم بعنوان «انظر أيضًا»- وحدة المطابقة — توجيه
ConformanceModeوأوراكل veraPDF - وحدة التدقيق — مسار التدقيق وواجهة التصديق
- تعيين مواصفة PDF/A-4 — تغطية ISO 19005-4 وعدم تغطيتها
- وحدة الأمان — نموذج تهديد تحليل PDF