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

إنشاء الامتدادات: نظرة عامة على واجهة SPI العامة

توفّر ⁨NextPDF⁩ مجموعة صغيرة ومدروسة من العقود العامة في فضاءَي الأسماء NextPDF\Contracts وNextPDF\Event. نفِّذ هذه العقود لإضافة الخطوط، أو اعتراض النص، أو مراقبة دورة حياة المستند، أو توفير واجهة توقيع خلفية خاصة بك من دون تفريع المحرّك.

Terminal window
composer require nextpdf/core:^3

تفصل ⁨NextPDF⁩ واجهة موفِّر الخدمة (⁨SPI⁩) العامة الخاصة بها عن كودها الداخلي. واجهة ⁨SPI⁩ هي مجموعة الأنواع التي يمكنك تنفيذها أو مراقبتها. أما ما عدا ذلك فهو خاص وقد يتغيّر من دون إشعار.

تتخذ واجهة ⁨SPI⁩ العامة ثلاثة أشكال:

  • عقود السجل. خدمات تمتد طوال عمر العملية وتملؤها قبل إنشاء المستندات؛ FontRegistryInterface وImageRegistryInterface هما المثالان الرئيسيان. سجِّل الأصول، فيقرؤها المحرّك.
  • عقود الاستراتيجية. خطافات لمهمة واحدة يستدعيها المحرّك أثناء التصيير. يتولّى TextPreprocessorInterface اعتراض النص في وقت التخطيط، ويضبط HtmlSecurityPolicyInterface بوابة ميزات لغة ترميز النص التشعبي (⁨HTML⁩). أنت توفّر السلوك، والمحرّك يستدعيه.
  • عقود التوقيع. واجهات تشفير خلفية. تتيح لك SignerInterface، وHsmSignerInterface، وDeferredSignerInterface توفير حفظ المفتاح وإنتاج التوقيع. يبني المحرّك بنية بناء جملة رسائل التشفير (⁨CMS⁩)، بينما يحتفظ كودك بالمفتاح.

يتولّى المراقبةَ نظامُ أحداث منفصل في NextPDF\Event، وهو متوافق مع توصية ⁨PHP⁩ المعيارية رقم 14 (⁨PSR-14⁩). تتيح لك أحداث دورة الحياة التفاعل مع إنشاء المستند، والصفحات الجديدة، وتحميل الخطوط، والتوقيع، والكتابة النهائية. لكنها لا تغيّر سلوك المحرّك.

يحمل كل عقد وسم @stability في تعليق ⁨PHPDoc⁩ المصدري الخاص به: stable، أو experimental، أو deprecated. يوضح لك هذا الوسم، مع وعد التوافق الخلفي لكل عقد، مقدار التغيير المتوقّع. راجِع قواعد استقرار واجهة ⁨SPI⁩ للاطلاع على السياسة الكاملة.

القدرةالعقد العامالاستقرار
تسجيل الخطوط والبحث عنهاNextPDF\Contracts\FontRegistryInterfaceمستقر (منذ 1.7.0)
تخزين الصور مؤقتًا وفك ترميزهاNextPDF\Contracts\ImageRegistryInterfaceمستقر (منذ 2.0.0)
اعتراض النص في وقت التخطيطNextPDF\Contracts\TextPreprocessorInterfaceمستقر (منذ 1.9.0)
ضبط بوابة ميزات ⁨HTML⁩NextPDF\Contracts\HtmlSecurityPolicyInterfaceمستقر (منذ 3.1.0)
ربط مصنع المستنداتNextPDF\Contracts\DocumentFactoryInterfaceمستقر (منذ 1.7.0)
التوقيع المتزامنNextPDF\Contracts\SignerInterfaceمستقر (منذ 1.0.0)
التوقيع المدعوم بالعتادNextPDF\Contracts\HsmSignerInterfaceمستقر (منذ 1.0.0)
التوقيع المؤجَّل والمجمَّعNextPDF\Contracts\DeferredSignerInterfaceتجريبي (منذ 3.0.0)
الختم الزمني وفق ⁨RFC 3161⁩NextPDF\Contracts\TimestampProviderInterfaceتجريبي (منذ 3.0.0)
مراقبة دورة الحياةNextPDF\Event\* (متوافق مع ⁨PSR-14⁩)موزِّع مستقر؛ حمولات تجريبية

الأنواع التالية داخلية. لا تستوردها، ولا تشتقّ منها، ولا تعتمد عليها:

  • أي صنف خارج فضاءَي الأسماء NextPDF\Contracts وNextPDF\Event، ما لم يحمل تعليق ⁨PHPDoc⁩ الخاص به وسم @stability.
  • كود المحرّك الفعلي، بما في ذلك محلل ⁨HTML⁩، والكاتب، وخط أنابيب التخطيط، ومجزِّئ الخطوط.
  • حزمتا ⁨NextPDF Pro⁩ و⁨NextPDF Enterprise.⁩ أصنافهما الداخلية ليست جزءًا من السطح مفتوح المصدر. عندما تشحن إصدارة مدفوعة تنفيذًا لواجهة ⁨SPI⁩، استهلك العقد العام، لا نوعه الداخلي.

خريطة العقود المولَّدة هي المرجع الموثوق، ويُعاد بناؤها من المصدر مع كل إصدارة. تعامَل مع وسم ⁨PHPDoc⁩ @stability في كل ملف واجهة على أنه المصدر الوحيد للحقيقة. استخدم الجدول أعلاه كوسيلة مساعدة على القراءة.

سجِّل خطًا، ثم راقب تحميله. تستخدم كلتا الخطوتين أنواعًا عامة فقط.

<?php
declare(strict_types=1);
use NextPDF\Contracts\FontRegistryInterface;
use NextPDF\Event\Content\FontLoadedEvent;
use NextPDF\Event\EventDispatcher;
use NextPDF\Event\ListenerProvider;
/** @var FontRegistryInterface $fonts */
$fonts->register('/srv/fonts/Inter-Regular.ttf', 'Inter');
$listeners = new ListenerProvider();
$listeners->addListener(
FontLoadedEvent::class,
static function (FontLoadedEvent $event): void {
\error_log("Font loaded: {$event->family} {$event->style}");
},
);
$dispatcher = new EventDispatcher($listeners);

في عامل طويل التشغيل، ابنِ السجلات مرة واحدة عند الإقلاع، واقفلها، واحقن موزِّعًا مشتركًا عبر مصنع المستندات.

<?php
declare(strict_types=1);
use NextPDF\Contracts\DocumentFactoryInterface;
use NextPDF\Contracts\FontRegistryInterface;
use NextPDF\Event\EventDispatcher;
use NextPDF\Event\ListenerProvider;
use Psr\Log\LoggerInterface;
final class DocumentBootstrap
{
public function __construct(
private readonly FontRegistryInterface $fonts,
private readonly DocumentFactoryInterface $factory,
private readonly LoggerInterface $logger,
) {}
public function warmup(): EventDispatcher
{
$this->fonts->warmup([
'/srv/fonts/Inter-Regular.ttf',
'/srv/fonts/Inter-Bold.ttf',
]);
$this->fonts->lock();
$listeners = new ListenerProvider();
$listeners->addListener(
\NextPDF\Event\Security\SignatureAppliedEvent::class,
fn (object $event): mixed => $this->logger->info('Signature applied'),
);
return new EventDispatcher($listeners);
}
}
  • قفل السجل. بعد FontRegistryInterface::lock()، تطرح طرق التغيير LogicException. اقفل السجل فقط بعد انتهاء التسخين.
  • عدم تطابق الاستقرار. قد يتغيّر العقد experimental في إصدارة ثانوية. تحقّق من الاستقرار المعلن قبل أن تعتمد على العقد في الإنتاج.
  • انضباط فضاء الأسماء. أي نوع خارج NextPDF\Contracts أو NextPDF\Event دون وسم @stability هو داخلي، حتى لو كان من الناحية التقنية public.

تكلفة واجهة ⁨SPI⁩ معدومة عند عدم استخدامها. إذا لم يكن أي مستمع مرتبطًا بصنف حدث، يعود موزِّع الأحداث فورًا بعد فحص hasListeners() واحد. تحتفظ السجلات ببيانات ⁨PHP⁩ صرفة، وتدعم التسخين وقت الإقلاع لتوزيع زمن استجابة الطلب الأول.

عقود التوقيع هي السطح الحساس أمنيًا. يقتضي HsmSignerInterface ألّا يغادر المفتاح الخاص حدود العتاد أبدًا. يجب أن يحترم تنفيذك هذا المتطلب. راجِع عقد موفِّر نظام إدارة المفاتيح (⁨KMS⁩) للاطلاع على عقد واجهة التوقيع الخلفية الخاصة بطرف ثالث ونموذج تهديدها.

لا تُقدَّم أي ادعاءات معيارية في صفحة النظرة العامة هذه. مطابقة كل عقد، بما في ذلك التوقيعات الإلكترونية المتقدمة لـ ⁨PDF⁩ (⁨PAdES⁩) وإدارة المفاتيح، موثَّقة في صفحات واجهة ⁨SPI⁩ ذات الصلة.

توفّر ⁨NextPDF Pro⁩ و⁨NextPDF Enterprise⁩ تنفيذات إنتاجية لعدة عقود توقيع وتحقق، بما في ذلك التوقيع المدعوم بنظام إدارة المفاتيح. اعتمد على العقد العام بينما توفّر الإصدارة التنفيذ، ليبقى كودك قابلًا للنقل عبر الإصدارات.

يعرّف المسرد ⁨SPI⁩، ونقطة الامتداد، ووسم الاستقرار، ووعد التوافق الخلفي؛ راجِع المسرد المنشور للحصول على كل تعريف قانوني.