تخطَّ إلى المحتوى
getnextpdf.com

Pro الإصدار

الامتثال — مرجع متعمّق

تجمع وحدة الامتثال ثلاثة أسطح مستقلة ضمن NextPDF\Pro\Compliance:

  • الإبلاغ عن وسوم اللغة — واجهة سياسة صارمة لـ ⁨PDF/UA-2⁩ حول /Lang إضافةً إلى مُبلِّغ أحداث امتثال مُهيكَل على هيئة ⁨PSR-3⁩.
  • معالجة الفواتير الإلكترونية — التحقق من ⁨Factur-X 1.08⁩ / ⁨ZUGFeRD 2.4⁩ مقابل النموذج الدلالي ⁨EN 16931⁩، وإصدار ⁨PDF/A-3⁩ الهجين.
  • المصدرية — تضمين واستخراج مخازن بيانات ⁨C2PA⁩ المُقدَّمة من المُستدعي عبر مُحلِّل ⁨JUMBF⁩ مُقوّى ضد الهجمات؛ ويبقى تركيب الادعاءات محصوراً في وضع المعاينة.

تُبلّغ الوحدة عمّا تفحصه. وهي لا تعتمد المستندات ولا تُجري توقيعاً تشفيرياً.

تُشحن هذه الإمكانية ضمن ⁨NextPDF Pro⁩ (nextpdf/pro) وتُفعَّل بمظروف ترخيص من فئة ⁨Pro⁩. ولا يُحمِّل أي نشر يفتقر إلى ذلك الاستحقاق فئاتِ هذه الإمكانية. قارن الإصدارات واحصل على ترخيص.

لا يوجد أي علم ترخيص لكل ميزة على حدة. فهذه إمكانية من إصدار ⁨Pro⁩. ويتطلب باني ادعاءات ⁨C2PA⁩ التجريبي إضافةً إلى ذلك اشتراكاً صريحاً عبر البيئة (انظر الحالات الحدّية وأوضاع الإخفاق).

سطح واجهة برمجة التطبيقات العامة

قسم بعنوان «سطح واجهة برمجة التطبيقات العامة»
Terminal window
composer require nextpdf/pro:^3
الرمزالمعامِلاتالسلوك الافتراضيالقيمة المُعادةيرمي أو يُخفق بـملاحظات
LangComplianceReporter::warn() / ::error()string $tag, string $reason, ?string $clauseReference = nullيُصدر سجل ⁨JSON⁩ مُهيكَل واحد لكل حدث وسم لغة عبر مُسجِّل ⁨PSR-3⁩voidJsonException إذا أخفق ترميز السجل بصيغة ⁨JSON⁩warn = رفض في الوضع المتساهل؛ error = رفض في الوضع الصارم
LangComplianceReporter::reportException()InvalidBcp47TagException $exception, string $severity = 'error'يستخرج الوسم والسبب من الاستثناء؛ ويُفوِّض إلى warn() أو error()voidكما سبقمسار مُيسِّر
LangComplianceReporter::buildRecord()string $severity, string $tag, string $reason, ?string $clauseReference = nullيبني مصفوفة السجل دون تسجيلarrayلا يرميللمصارف المخصّصة مثل ملخّصات ⁨JSON⁩ لكل ملف
ConformancePolicy::default()?LoggerInterface $logger = nullسياسة ⁨UA-2⁩ صارمة: تُرفض وسوم /Lang المُشوَّهة أو غير المُسجَّلةselfلا يرميالافتراضي في ⁨v5.0⁩ صارم
ConformancePolicy::fromCore()CoreConformancePolicy $core, ?LoggerInterface $logger = nullيلفّ سياسة ⁨Core⁩ قائمة كما هي؛ دون قلب أي محورselfلا يرميفضّل default() للوضع الصارم
ConformancePolicy::withStrictUa2()bool $enabledيُعيد نسخة مع ضبط المحور الصارم؛ ويُصدر تعطيلُه إشعار ⁨PSR-3⁩ من نوع noticeselfلا يرمياشتراك خروج مهجور؛ هدف الإزالة 6.0.0
ConformancePolicy::isStrictUa2() / ::mode()يقرأ سياسة ⁨Core⁩ الأساسيةbool / ConformanceModeلا يرمي
EInvoiceValidator::validate()string $pdfPathخط معالجة كامل: فحص غلاف ⁨PDF/A-3⁩، واستخراج المرفق، وكشف النمط، وقواعد ⁨EN 16931⁩، و⁨Schematron⁩EInvoiceValidationResultفئة فرعية من EInvoiceException عند إخفاق الإدخال/الإخراج، أو بنية ⁨PDF⁩ مُشوَّهة، أو انهيار الأدواتواجهة ⁨SPI⁩ مُجمَّدة؛ يُعيد ملف ⁨PDF⁩ سليم البنية وليس فاتورة إلكترونية نتيجةً، ولا يرمي أبداً
EInvoiceXmlValidator::validate()string $xmlPayload, ValidatorContext $contextفحص بنيوي تمهيدي إضافةً إلى مجموعة قواعد ⁨EN 16931⁩ الدلالية العميقة على حمولة ⁨CII⁩ValidationResult التعاقديلا يرمي عند الإدخال غير الصالح؛ يظهر الرفض كنتيجة مُخفِقة مع النتائجمُتحقِّق ملموس عابر للفئات؛ يُبوَّب الإدخال عبر XmlGuard
EInvoiceValidationResult::isValid()صحيح فقط عندما يصمد الغلاف ومواصفة المرفق والنمط والتركيب ولا يوجد أي انتهاك من نوع ⁨FATAL⁩boolلا يرميقائمة انتهاكات فارغة وحدها لا تعني الصلاحية
EInvoiceValidationResult::notAnEInvoice()نتيجة حتمية: كلها ⁨null⁩ وكلها ⁨false⁩selfلا يرميمصنع لحالة «ليست فاتورة هجينة»
EInvoiceProfileتعداد مدعوم بنصالحالات MINIMUM، BASIC_WL، BASIC، EN16931، EXTENDED، مدعومة بمُعرِّفات ⁨URN⁩ من ⁨BT-24⁩isEn16931Conformant() تساوي ⁨false⁩ للحالتين MINIMUM وBASIC_WL
EInvoiceSyntaxتعداد مدعوم بنصالحالات UN_CEFACT_CII، UBL_INVOICE، UBL_CREDIT_NOTEالوحيد المؤهَّل عبر isFacturXEligible() هو ⁨CII⁩؛ أما ⁨UBL⁩ فللتحقق فقط
BusinessRuleViolationstring $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = nullكائن نقل بيانات ⁨DTO⁩ لانتهاك غير قابل للتغييرعائلات مُعرِّفات القواعد BR-، BR-CO-، BR-CL-، BR-DEC-، BR-FXEXT-
BusinessRuleSeverityتعداد مدعوم بنصFATAL يُبطل الفاتورة؛ WARNING يُنبّه إلى مسألة جودةيعكس مستويات ⁨Schematron⁩ في ⁨EN 16931⁩
FacturXEmbedder::embed()انظر سياج التوقيعيُلحِق تدفق ملف مُضمَّن ومواصفة ملف و⁨XMP⁩ بمصدر ⁨PDF/A⁩؛ ويُعيد كتابة ⁨xref⁩voidEInvoiceException عند ⁨XML⁩ مُشوَّه، أو مصدر غير قابل للقراءة، أو فهرس (catalog) مفقود، أو مصدر بتدفق كائنات أو تدفق ⁨xref⁩، أو إخفاق كتابة المُخرَجيُترك الملف المصدر سليماً
FacturXEmbedderOptions::default()/AFRelationship /Alternative، اسم الملف factur-x.xml، النوع INVOICE، الإصدار 1.0selfلا يرميتفي الافتراضات بالإلزام الألماني وتبقى مقبولة في فرنسا
FacturXEmbedderOptions::withRelationship() / ::withFilename()stringيُعيد نسخة مع تطبيق التجاوزselfInvalidArgumentException خارج مجموعات القبولالعلاقات: Source، Data، Alternative؛ وتشمل أسماء الملفات zugferd-invoice.xml وxrechnung.xml
FacturXEmbedderOptions::withDocumentType()string $documentTypeيُعيد نسخة مع تجاوز نوع مستند ⁨XMP⁩selfلا يرميالقيم ليست معدودة دفاعياً
FacturXContractEmbedder::embed()string $pdfBytes, string $xmlPayload, EmbedderOptions $optionsمُحوِّل من بايتات إلى بايتات فوق FacturXEmbedder عبر ملفات مؤقتة قصيرة العمرstringEInvoiceException؛ ويُرفض نمط XRECHNUNG لأنه حصري لـ ⁨Enterprise⁩تنفيذ EmbedderInterface عابر للفئات
C2paManifestEmbedder::embed()string $pdfBytes, ManifestStore $storeيُضمِّن الترميز البايتي للمخزن في موضع النمطstringC2paException عند أي إخفاق تضمينواجهة ⁨SPI⁩ مُجمَّدة؛ بايتات فقط، دون إدخال/إخراج
C2paManifestEmbedder::extract()string $pdfBytesيُحلِّل مخزناً مُضمَّناً عبر مُحلِّل ⁨JUMBF⁩ المُقوّىManifestStore|nullفئة فرعية من C2paException عندما يوجد مخزن لكنه يخرق سقف تقويةتشير ⁨null⁩ إلى الغياب؛ والغياب لا يرمي أبداً
ManifestStore::fromBoxes() / ::empty()list<JumbfBox> / —يبني كائن قيمة المخزن غير القابل للتغييرselfلا يرميترتيب الصناديق حامل للمعنى في تكافؤ الرحلة الكاملة
ManifestStore::toBytes() / ::isEmpty() / ::size()يُرمِّز الصناديق الجذرية؛ ويُرمَّز المخزن الفارغ إلى سلسلة فارغةstring / bool / intلا يرمي
JumbfBoxParser::parse()string $bytesيُحلِّل صناديق ⁨JUMBF⁩ على المستوى الجذري ضمن سقوف صارمةlist<JumbfBox>MalformedJumbfException، JumbfBombException، JumbfCycleDetectedException، JumbfDepthExceededExceptionالسقوف: عمق 8، و64 ⁨MiB⁩ لكل صندوق، و128 ⁨MiB⁩ إجمالاً، وMAX_CHILDREN_PER_SUPERBOX يساوي 4096
JumbfBox::superbox() / ::leaf()string $tbox, …يبني صندوقاً مُتحقَّقاً منه؛ وtoBytes() يقوم برحلة كاملة عبر المُحلِّلselfMalformedJumbfException عندما لا يكون ⁨TBox⁩ بطول 4 بايت بالضبط
C2paCapabilityStatus::current() / ::summary()يُبلّغ عن نضج إمكانية ⁨C2PA⁩، وهو حالياً preview-draftself / stringلا يرميعلامة معاينة قابلة للفحص آلياً
Feature::PREVIEW_C2PA_DRAFT->isEnabled()يقرأ بيئة العملية في كل استدعاء؛ ولا يُفعِّل إلا القيمة الحرفية '1'boolلا يرميمتغير البيئة NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT
ExperimentalC2paEmbedder::buildManifestStore()string $sourceBytes, string $producerيبني مخزن بيانات مُثبَّتاً على مسودة مع تأكيد ادعاء واحد لربط تجزئة ⁨SHA-256⁩ManifestStoreيرمي الباني LogicException عندما يكون علم المعاينة مُطفأًمعاينة؛ صيغة النقل مُثبَّتة على لقطة مسودة؛ لا يُصدَر أي توقيع ادعاء

توقيعات نقاط الدخول، حرفياً:

public static function default(?LoggerInterface $logger = null): self
public function withStrictUa2(bool $enabled): self
public function isStrictUa2(): bool
public function validate(string $pdfPath): EInvoiceValidationResult
public function embed(
string $sourcePdfPath,
string $xml,
EInvoiceProfile $profile,
string $outputPdfPath,
?FacturXEmbedderOptions $options = null,
): void
public function embed(string $pdfBytes, ManifestStore $store): string
public function extract(string $pdfBytes): ?ManifestStore

الإبلاغ عن وسوم اللغة. يُصدر LangComplianceReporter سجل ⁨JSON⁩ مُهيكَل واحد لكل حدث وسم لغة في ⁨PDF/UA-2⁩. ويحمل كل سجل مُميِّز الحدث الثابت، ودرجة خطورة (warn للرفض في الوضع المتساهل، وerror للرفض في الوضع الصارم)، والوسم المُخالف حرفياً، وسبباً قابلاً للقراءة آلياً، ومكوّنات الوسم المُحلَّلة (أو null عندما يُخفق الوسم في قواعد الشكل ⁨RFC 5646⁩)، ومرجع بند ⁨ISO 14289-2 §8.4.4⁩، وطابعاً زمنياً ⁨UTC⁩ بدقة الميكروثانية. وتنتقل ⁨JSON⁩ بوصفها متن رسالة ⁨PSR-3⁩؛ وتُحلِّل المصارف اللاحقة حقل الرسالة مباشرةً. وConformancePolicy هي واجهة ⁨Premium⁩ فوق سياسة الامتثال في ⁨Core⁩. ويُطبّق افتراضُها معالجة لغة ⁨UA-2⁩ صارمة ويرفض أي وسم مُشوَّه أو غير مُسجَّل يصل إلى /Lang. ويُعيد مُساعد الخروج withStrictUa2(false) السلوكَ المتساهل القديم ويُسجِّل إشعار ⁨PSR-3⁩ عندما تتغير القيمة الفعلية بالفعل. وتضع ⁨NextPDF⁩ ذلك المُساعد في خانة المهجور منذ ⁨v5.0⁩ مع هدف إزالة ⁨6.0.0⁩. وللترحيل: دقِّق المجموعة بحثاً عن قيم /Lang المُشوَّهة باستخدام composer pdfua2:audit-lang-tags <pdf-or-dir>، وصحِّحها، ثم أسقِط استدعاء الخروج.

معالجة الفواتير الإلكترونية. EInvoiceValidator هو عقد ⁨SPI⁩ المُجمَّد للتحقق من ⁨PDF⁩ الهجين: فحص غلاف ⁨PDF/A-3⁩، واستخراج مرفق /AF، وكشف النمط من مُعرِّف المواصفة ⁨BT-24⁩، ومحرك قواعد العمل ⁨EN 16931⁩، وتمريرة ⁨Schematron⁩. ويُعيد ملف ⁨PDF⁩ سليم البنية وليس ⁨Factur-X⁩ القيمةَ EInvoiceValidationResult::notAnEInvoice() بدلاً من الرمي؛ ولا تُثير فئةً فرعية من EInvoiceException إلا إخفاقات الإدخال/الإخراج، أو بنية ⁨PDF⁩ المُشوَّهة، أو انهيارات الأدوات. وEInvoiceXmlValidator هو مُتحقِّق ⁨XML⁩ الملموس العابر للفئات: يُبوِّب الإدخال عبر XmlGuard من ⁨Core⁩، ويُجري فحصاً بنيوياً تمهيدياً ومجموعةَ قواعد ⁨EN 16931⁩ الدلالية العميقة، ويُخفق مُغلَقاً — إذ تظهر أخطاء المحرك كنتائج خطأ، لا كتمريرات صامتة أبداً. وFacturXEmbedder يُعدِّل مصدر ⁨PDF/A⁩ إلى ⁨PDF/A-3⁩ هجين: يُلحِق تدفق ملف مُضمَّن، ومواصفة ملف بـ /AFRelationship قابل للضبط، وحزمة امتداد ⁨XMP⁩ لـ ⁨Factur-X⁩، ثم يُعيد كتابة جدول الإحالات المرجعية الكلاسيكي. وتُشير كلٌّ من مصفوفة /AF في الفهرس وشجرة الأسماء /Names /EmbeddedFiles إلى المرفق، فتستطيع قارئات ⁨ZUGFeRD⁩ القديمة تحليله.

المصدرية. يُضمِّن C2paManifestEmbedder مخزنَ بيانات ⁨C2PA⁩ مُقدَّماً من المُستدعي داخل سلسلة بايتات ⁨PDF⁩، أو يستخرج واحداً. وManifestStore هو كائن القيمة غير القابل للتغيير الذي يعبر الحدّ. والوصلة بايتات فقط ومحايدة للمورِّد: فهي لا تُركِّب ادعاءات، ولا تستوعب إحالات ⁨URI⁩، ولا تحلّ روابط التجزئة، ولا تُجري أي إدخال/إخراج شبكي أو على نظام الملفات. ويُعيد extract() القيمة ⁨null⁩ عند عدم الوجود، وهو زهيد التكلفة على ملفات ⁨PDF⁩ الخالية من مخزن. وقد اجتاز كل استخراج غير فارغ سقوفَ التقوية في JumbfBoxParser سلفاً.

تُبلّغ هذه الوحدة عمّا تفحصه. وهي لا تعتمد أي مستند، ولا تجعله مُلزِماً قانونياً، ولا تضمن أن أي مُخرَج يفي بلائحة تنظيمية. ومُتحقِّق الفواتير الإلكترونية ليس مُتحقِّق سلطة ضريبية، وهو يستثني الامتدادات الوطنية (على سبيل المثال ⁨SDI⁩ الإيطالي، و⁨Chorus Pro⁩ الفرنسي، و⁨XRechnung⁩ الألماني). وكما ينص ⁨EN 16931-1⁩، يظل مُصدِر الفاتورة مسؤولاً عن استيفاء قواعد التشريع ذي الصلة. ودعم معيار ما ليس امتثالاً له. راجِع فريق الامتثال لديك بشأن الكفاية التنظيمية.

الحالات الحدّية وأوضاع الإخفاق

قسم بعنوان «الحالات الحدّية وأوضاع الإخفاق»
  • يُعيد ملف ⁨PDF⁩ سليم البنية وليس ⁨Factur-X⁩ نتيجة «ليست فاتورة إلكترونية»؛ وهو لا يرمي.
  • قائمة انتهاكات قواعد العمل الفارغة لا تعني بذاتها أن المستند صالح؛ فتنطبق أيضاً فحوص الغلاف والمرفق.
  • يُخفق FacturXEmbedder مُغلَقاً على المصادر التي تستخدم تدفقات كائنات مضغوطة (/Type /ObjStm) أو تدفقات إحالات مرجعية (/Type /XRef، والهجين /XRefStm). أعِد حفظ هذه المصادر بجدول إحالات مرجعية كلاسيكي أولاً.
  • تُبوَّب حمولات ⁨XML⁩ عبر XmlGuard من ⁨Core⁩: فتُرفض تصريحات ⁨DOCTYPE⁩ أو الكيانات، والإدخال المفرط الحجم، و⁨UTF-8⁩ غير الصالح، بـ EInvoiceException على مسار التضمين، أو بنتيجة مُخفِقة على مسار التحقق.
  • يرفض FacturXContractEmbedder نمط XRECHNUNG صراحةً بدلاً من تخفيضه صامتاً؛ فإصدار ⁨XRechnung⁩ إمكانية من ⁨Enterprise⁩.
  • يُميّز C2paManifestEmbedder::extract() بين الغياب (⁨null⁩) والتشوّه (فئة فرعية من C2paException تُسمّي الثابت المخروق: بنية مُشوَّهة، أو قنبلة حجم أو عدد، أو دورة إزاحة، أو عمق تداخل).
  • يرمي إنشاء ExperimentalC2paEmbedder استثناء LogicException ما لم يساوِ علم بيئة المعاينة '1'. وصيغة نقله مُثبَّتة على لقطة مسودة ⁨C2PA⁩ وقد تتغير دون إشعار؛ وهو لا يُصدر أي توقيع ادعاء. وتبقى هذه الإمكانية في وضع المعاينة حتى يتجمّد نمط ⁨C2PA⁩ الخاص بـ ⁨PDF⁩.
  • اشتراك الخروج المتساهل من ⁨UA-2⁩ الصارم مهجور؛ رحِّل إلى الافتراضي الصارم (انظر عقد السلوك).
  • لا تُجري هذه الوحدة توقيعاً تشفيرياً. وتوقيع ادعاءات ⁨C2PA⁩ وحفظ المفاتيح خارج النطاق؛ انظر وحدة ⁨Security⁩ لسلوك التوقيع في وضع ⁨FIPS⁩.
السلوكالمرجعالحالة
تصريح اللغة الطبيعية (/Lang)ISO 14289-2:2024 §8.4.4مفحوص / مُبلَّغ عنه
النموذج الدلالي الأساسي للفاتورةEN 16931-1:2026مفحوص (تظل المسؤولية على المُصدِر)
الملفات المرتبطة / تدفقات الملفات المُضمَّنةISO 32000-2:2020 §14.13.2مُصدَر (/AF، /EF، /Params)
علاقة المرفق وقواعد الحاويةFactur-X 1.08 §3.1, §6.2مُصدَر / مفحوص (الافتراضي /AFRelationship /Alternative)
مخزن بيان ⁨C2PA⁩ / ⁨JUMBF⁩C2PA 2.1 §11.1التضمين / الاستخراج مدعومان؛ تركيب الادعاءات في وضع المعاينة

يُسجِّل هذا المواصفاتِ التي بُنيت الوحدة عليها وما تفحصه أو تُصدره. وليس بياناً باعتماد أو كفاية تنظيمية. ولا تملك ⁨NextPDF⁩ أي اعتماد لهذه المعايير.

  • شكل سجل المُبلِّغ عقد مستقر؛ فقد تُثبِّت قواعد التنبيه اللاحقة نفسها على مُميِّز الحدث الثابت.
  • يُصدر تعطيل ⁨UA-2⁩ الصارم إشعار هجر مرئياً في القياس عن بُعد فقط عندما تتغير القيمة الفعلية؛ أما إعادة تأكيد القيمة الحالية فصامتة.
  • يحفظ مُضمِّن ⁨Factur-X⁩ بايتات المصدر حرفياً ويُلحِق كائنات جديدة؛ ويهدف إلى الحفاظ على مطابقة ⁨PDF/A-3⁩ لكنه لا يُعيد التحقق. مرِّر المُخرَج عبر مُتحقِّق ⁨PDF/A⁩ خارجي للحصول على إثبات قاطع.
  • تُجمِّد وصلة ⁨C2PA⁩ خمسة ثوابت: لا استيرادات من أطراف ثالثة، وعقد بايتات فقط، ولا إدخال/إخراج، واستخراج يُعيد ⁨null⁩ عند عدم الوجود، ولا تركيب ادعاءات في الطبقة المستقرة.
  • سقوف JumbfBoxParser ثوابت عامة؛ فقِس المدخلات التي تقبلها مقابلها بدلاً من إعادة اشتقاق الحدود.

توثّق هذه الصفحة السلوك القابل للملاحظة خارجياً وسطح واجهة برمجة التطبيقات العامة المدعوم فقط. أما مسارات فضاءات الأسماء الداخلية، وفئات المساعدة، وجداول الآليات، وأسماء ملفات كتيّبات التشغيل، وبادئات التذاكر فخارج النطاق.