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

مرجع API للتوافق مع TCPDF

تكشف حزمة nextpdf/compat-legacy صنفًا رئيسيًا واحدًا، هو NextPDF\Compat\Tcpdf\TCPDF. يحاكي هذا الصنف واجهة ⁨API⁩ العامة لـ ⁨TCPDF 6.x⁩، لكنه يُصيّر باستخدام محرك ⁨NextPDF⁩ الحديث. وتتضمن الحزمة أيضًا واجهة دعم صغيرة: LegacyBootstrap لأسماء الأصناف العامة البديلة، وواجهة التهيئة AdaptationConfig/LegacyDefaults، وأصناف جسور داخلية للإخراج والإنشاء واللون والوحدات وتنسيقات الصفحات، واستثناءات التوافق. استخدمها كوسيلة مساعدة على الترحيل، لا كاعتمادية دائمة. يُعَدّ جدول تغطية الدوال المصدر المرجعي لحالة دوال الإصدار القديم كاملةً. توثّق هذه الصفحة فقط الواجهات التي ينبغي لشيفرة التطبيق الاعتماد عليها عن قصد.

ابدأ من هنا: إذا كنت جديدًا على هذه الحزمة، فأنشئ NextPDF\Compat\Tcpdf\TCPDF، وأجرِ استدعاءات ⁨TCPDF⁩ المعتادة (AddPage() وSetFont() وCell())، ثم اختم بـ Output($name, $dest). هذا الصنف هو نقطة الدخول لكل شيء تقريبًا فيما يلي. للاطلاع على نقاط بداية قابلة للتشغيل، راجع المهام الشائعة.

هذه هي مهام الحزمة التي ستستخدمها غالبًا. جرت مطابقة كل مقطع مع مصدر المُحوِّل، وهو يعمل كما هو.

أنتج ملف صيغة المستندات المحمولة (⁨PDF⁩) باستخدام استدعاءات ⁨TCPDF⁩ المألوفة، ثم التقطه كسلسلة نصية لاستخدامه في قائمة انتظار، أو استجابة ⁨HTTP⁩، أو التخزين:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF('P', 'mm', 'A4');
$pdf->SetTitle('Invoice 1234');
$pdf->SetFont('helvetica', '', 12);
$pdf->AddPage();
$pdf->Cell(0, 10, 'Hello from the NextPDF engine', 1, 1, 'C');
$bytes = $pdf->Output('invoice.pdf', 'S');

ما الذي يفعله: يُنشئ مستند ⁨PDF 2.0⁩ عبر المُحوِّل ذي الشكل المطابق لـ ⁨TCPDF.⁩ ويُعيد البايتات الخام (%PDF...) لأن الوجهة 'S' توجِّه عبر OutputBridge إلى Document::getPdfData() بدلًا من الطباعة المباشرة، لذلك يكون آمنًا داخل عامل معالجة أو وحدة تحكم.

سجّل الأسماء البديلة العامة مرة واحدة عند الإقلاع لتشغيل شيفرة new \TCPDF(...) القائمة دون تعديل المصدر:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\LegacyBootstrap;
LegacyBootstrap::enableAliases();
$pdf = new \TCPDF('P', 'mm', 'A4'); // resolves to the adapter
$pdf->AddPage();
$pdf->Cell(0, 10, 'Legacy call site, modern engine');
$pdf->Output(__DIR__ . '/legacy.pdf', 'F');

ما الذي يفعله: تُسجِّل enableAliases() بصورة آمنة عند التكرار \TCPDF (والمساعدات \TCPDF_STATIC/\TCPDF_FONTS/\TCPDF_COLORS/\TCPDF_IMAGES) فقط حين لا تكون تلك الأسماء معرَّفة مسبقًا. عندئذٍ تعمل الشيفرة القديمة دون تغيير على المُحوِّل.

دقِّق عملية الترحيل بإظهار كل معامل من معاملات ⁨TCPDF⁩ كان المُحوِّل سيُسقِطه بصمت لولا ذلك:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\Exception\TcpdfNotImplementedException;
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF();
$pdf->setStrictMode(true);
$pdf->AddPage();
$pdf->SetFont('helvetica', '', 12);
try {
$pdf->Image('photo.jpg', 10, 10, 50, 0, '', '', '', true, 300);
} catch (TcpdfNotImplementedException $e) {
fwrite(STDERR, $e->getMessage() . "\n"); // names every ignored parameter
}

ما الذي يفعله: مع setStrictMode(true)، فإن أي استدعاء لا يمكنه إعادة إنتاج سلوك ⁨TCPDF⁩ يُطلِق TcpdfNotImplementedException ويُسمّي كل معامل مُتجاهَل. وهذا يحوّل التدهور الصامت إلى قائمة أعمال للترحيل. شغّله أثناء جولة تدقيق فقط، وليس في الإنتاج أبدًا.

هذا الجدول هو واجهة المُحوِّل المرجعية. استخدمه للعثور على الصنف الذي تُنشئه (TCPDF)، ودوالّ الوضع الصارم ومخارج الطوارئ الخاصة به، والعقد الذي يُنفّذه.

الرمزالمعاملاتالسلوك الافتراضيالقيمة المُعادةيُطلِق أو يفشل بـملاحظات
NextPDF\Compat\Tcpdf\TCPDFتتبع معاملات المُنشئ شكل ⁨TCPDF⁩ القديم عبر ConstructorBridge.يُنشئ مُحوِّلًا مدعومًا بمستند ⁨NextPDF.⁩TCPDFاستثناءات التحقق من صحة المُنشئ أو الميزات غير المدعومة.استخدمه أثناء الترحيل، لا في شيفرة ⁨NextPDF⁩ الأصيلة الجديدة.
TCPDF::getDocument()لا شيء.يُعيد مستند ⁨NextPDF⁩ الأساسي.NextPDF\Core\Documentلا شيء متوقَّع.استخدمه كمخرج طوارئ لشيفرة الترحيل التي تحتاج إلى المزج بين الاستدعاءات القديمة والأصيلة.
TCPDF::getUnitConverter()لا شيء.يُعيد المُحوِّل المُنشأ من الوحدة القديمة.UnitConverterلا شيء متوقَّع.استخدمه لتشخيصات الترحيل، لا لشيفرة التطبيق العادية.
TCPDF::setStrictMode(bool $enabled)راية الوضع الصارم.يُمكِّن أو يُعطِّل الفشل الصريح لسلوك التوافق غير المدعوم.staticلا شيء متوقَّع.أبقِه مُمكَّنًا أثناء عمليات تدقيق الترحيل.
TCPDF::isStrictMode()لا شيء.يُعيد راية الوضع الصارم الحالية.boolلا شيء متوقَّع.مفيد في تأكيدات الاختبار.
دوال TCPDF القديمةيختلف بحسب الدالة.الدوال المدعومة تُربَط باستدعاءات مستند النواة؛ والدوال غير المدعومة تفشل صراحةً.يختلف بحسب الدالة.TcpdfNotImplementedException أو UnsupportedFeatureException.تحقّق من تغطية الدوال قبل الاعتماد على دالة.
CompatAdapterInterface::getDocument()لا شيء.دالة العقد التي يُنفّذها TCPDF.Documentلا شيء متوقَّع.تتيح للأدوات الوصول إلى المستند الأصيل.
CompatAdapterInterface::Output(string $name = '', string $dest = '')اسم الملف والوجهة القديمة.يُفوِّض إلى جسر الإخراج.stringأخطاء كتابة النواة أو الوجهة غير المدعومة.يحاكي إخراج ⁨TCPDF⁩ القديم؛ ويوفّر تطبيق TCPDF::Output الملموس القيم الافتراضية 'doc.pdf'/'I'.

يربط هذا الجدول عائلات دوال ⁨TCPDF⁩ التي يغطّيها المُحوِّل. استعرضه لتحديد موضع استدعاء قديم قبل التحقق من حالته الدقيقة في تغطية الدوال.

المجموعةرموز تمثيليةالسلوك الافتراضيملاحظات
دورة الحياة والإخراجOpen(), Close(), Output(), getPDFData()يحافظ على دورة حياة مستند ذي شكل مطابق لـ ⁨TCPDF⁩ فوق مستند أصيل.فضّل واجهات الإخراج الأصيلة بعد اكتمال الترحيل.
البيانات الوصفيةSetTitle(), SetAuthor(), SetSubject(), SetKeywords(), SetCreator()يربط واضعات البيانات الوصفية بالمستند الأساسي.أبقِ تطبيع البيانات الوصفية في شيفرة التطبيق.
الصفحات والتموضعAddPage(), setPage(), lastPage(), GetX(), SetXY()يحوّل الوحدات والإحداثيات القديمة إلى عمليات صفحات أصيلة.تحقّق بصريًا من التموضع المطلق بعد الترحيل.
الهوامش والتخطيطSetMargins(), SetAutoPageBreak(), setCellPaddings(), getMargins()يُخزِّن حالة التوافق ويربط القيم المدعومة.قد يتطلب سلوك فواصل صفحات ⁨TCPDF⁩ المعقّد مراجعةً يدوية.
الخطوط والنصوصSetFont(), AddFont(), Cell(), MultiCell(), Write(), Text()يوجِّه عمليات النصوص الشائعة إلى واجهات الخطوط والنصوص الأصيلة.تحقّق من سلوك ⁨CJK⁩ والترميز باستخدام خطوط الإنتاج.
⁨HTML⁩writeHTML(), writeHTMLCell(), fixHTMLCode()يمرّر ⁨HTML⁩ المدعوم إلى خط أنابيب ⁨HTML⁩ الأصيل.المُصيّر الأصيل ليس نسخة كاملة من ⁨HTML⁩ الخاص بـ ⁨TCPDF.⁩
الصور والرسمImage(), Line(), Rect(), Circle(), SetDrawColor()يربط عمليات الرسوميات المدعومة عبر مكوّنات المُحوِّل المختصة.التنسيقات المتجهة أو الخاصة غير المدعومة تفشل صراحةً.
التنقّل والتعليقات التوضيحيةBookmark(), AddLink(), SetLink(), Annotation()يحافظ على استدعاءات التنقّل الشائعة حيث تكون مربوطة.تحقّق من صحة المخططات والروابط المُولَّدة.
الأمن والتواقيعSetProtection(), setSignature(), setTimeStamp(), setUserRights()يربط استدعاءات الأمن القديمة المدعومة بالميزات الأصيلة.تعامل مع المُخرَجات التشفيرية كبوابة تحقُّق منفصلة.
النماذج والقوالب والتحويلاتTextField(), startTemplate(), StartTransform(), Rotate(), Scale()يُنفّذ المجموعات الفرعية المدعومة ويفشل بوضوح عند السلوك غير المدعوم.دقِّق كل استدعاء مقابل تغطية الدوال قبل الطرح.

استخدم هذا الجدول حين تدمج المُحوِّل في مسار إقلاع تطبيق، أو تُسجّل الأسماء البديلة العامة، أو تختار بين الثوابت القديمة وAdaptationConfig الحديث.

الرمزالمعاملاتالسلوك الافتراضيالقيمة المُعادةيُطلِق أو يفشل بـملاحظات
LegacyBootstrap::enableAliases()لا شيء.يُسجِّل الأسماء البديلة للتوافق مرة واحدة.voidأخطاء التحميل التلقائي أو البيئة.استخدمها فقط حين تتوقع الشيفرة القديمة وجود أسماء ⁨TCPDF⁩ في النطاق العام.
LegacyBootstrap::isRegistered()لا شيء.يُبلِّغ عمّا إذا كانت الأسماء البديلة قد سُجِّلت.boolلا شيء متوقَّع.مفيد في اختبارات التمهيد.
LegacyBootstrap::resetForTesting()لا شيء.يمسح حالة التسجيل من أجل الاختبارات.voidلا شيء متوقَّع.مساعد مخصص للاختبار فقط.
AdaptationConfigرايات المُحوِّل وضوابط الترحيل.يستخدم القيم الافتراضية للحزمة عند حذفها.AdaptationConfigقيم خيارات غير صالحة.أبقِ التهيئة صريحة أثناء عمليات تدقيق الترحيل.
AdaptationConfig::fromLegacyConstants()لا شيء.يقرأ الثوابت القديمة المعروفة ويبني كائن تهيئة.AdaptationConfigقيم ثوابت قديمة غير صالحة.مساعد انتقالي للتطبيقات القديمة الكبيرة.
LegacyDefaultsلا شيء.يوفّر القيم الافتراضية القديمة.القيم الافتراضية.لا شيء متوقَّع.مكان مركزي للقيم الافتراضية للتوافق.

تُشغِّل أصناف التحويل الداخلية هذه المُحوِّل. استخدم هذا الجدول حين تساهم في تغطية المُحوِّل أو تشخّص طريقة ترجمة وسيط قديم. في شيفرة التطبيق اليومية، فضّل واجهة المُحوِّل العامة.

الرمزالمعاملاتالسلوك الافتراضيالقيمة المُعادةيُطلِق أو يفشل بـملاحظات
ConstructorBridgeقائمة وسائط مُنشئ قديمة.يُسوّي الخيارات القديمة إلى تهيئة ⁨NextPDF.⁩بيانات المُنشئ.قيم وسائط قديمة غير صالحة.يُستخدَم داخليًا بواسطة المُحوِّل.
CellParameterAdapterمعاملات خلية ⁨TCPDF.⁩يربط الوسائط الموضعية القديمة بخيارات تخطيط نص النواة.معاملات مُكيَّفة.أبعاد أو محاذاة غير صالحة.فضّل دوال النواة الأصيلة في الشيفرة الجديدة.
OutputBridge::dispatch(Document $document, string $filename, string $dest)المستند الأصيل واسم الملف والوجهة القديمة.يربط سلوك ⁨inline/download/⁩الحفظ بواجهات إخراج ⁨NextPDF.⁩stringأخطاء كتابة النواة؛ والوجهة غير المدعومة.تحقّق من صحة أسماء الملفات وجذور التخزين قبل الإخراج.
OutputBridge::resolveDestination(string $dest)رمز الوجهة القديمة.يحوّل الوجهة إلى وجهة إخراج أصيلة.OutputDestinationأخطاء الوجهة غير المدعومة.يُبقي ربط الوجهات مركزيًا.
ColorTranslatorوسائط لون ⁨TCPDF.⁩يُسوّي صيغ الألوان القديمة.قيمة لون النواة.قيم ألوان غير صالحة.تستخدمه مكوّنات اللون والرسم.
PageFormatResolverمُدخَل تنسيق صفحة قديم.يربط الأسماء المعروفة بأحجام صفحات النواة.قيمة تنسيق الصفحة.تنسيق غير معروف.استخدم أحجام صفحات أصيلة وصريحة بعد الترحيل.
UnitConverterقيم القياس والوحدات القديمة.يحوّل إلى وحدات النواة.قيمة عددية.وحدة غير صالحة.يساعد على الحفاظ على سلوك التخطيط القديم.

استخدم هذا الجدول حين يفشل استدعاء ترحيل بوضوح. فهو يفصل حالات الفشل “غير المُنفَّذة” عن “المعروفة لكن غير المدعومة” ويُظهِر مسار الاسترداد.

الرمزالمعنىالاسترداد
TcpdfNotImplementedExceptionالمُحوِّل لا يُنفّذ عمدًا الدالة القديمة المطلوبة.استبدل الاستدعاء بواجهة ⁨NextPDF⁩ الأصيلة أو أزِل الاعتمادية.
TcpdfNotImplementedException::forSilentIgnore()استدعاء قديم كان سيُتجاهَل سابقًا، لكنه يُظهَر من أجل وضوح الترحيل.قرّر ما إذا كان سلوك عدم التنفيذ الصريح مقبولًا.
TcpdfNotImplementedException::forUnimplemented()استدعاء قديم ليس له مسار مُحوِّل مُنفَّذ.استبدل الاستدعاء أو اعزله خلف شيفرة الترحيل.
UnsupportedFeatureExceptionالميزة القديمة معروفة لكنها غير مدعومة ضمن حدود المُحوِّل.راجع إرشادات الترحيل واعزل الميزة خلف مُحوِّل على مستوى التطبيق.
UnsupportedFeatureException::forMethod()يُنشئ خطأ ميزة غير مدعومة خاصًّا بدالة معيّنة.استخدمه في مساهمات التوافق للحفاظ على اتساق رسائل الفشل.
  • تعامل مع المُحوِّل كأداة ترحيل. ينبغي للشيفرة الجديدة أن تستهدف واجهات نواة ⁨NextPDF⁩ مباشرةً.
  • ينبغي للسلوك غير المدعوم أن يفشل بوضوح. لا تلتقط استثناءات التوافق وتستمر بمستند جزئي ما لم يقبل التطبيق تلك المخاطرة صراحةً.
  • أبقِ تغييرات الترحيل صغيرة وتحقّق من كل دالة قديمة مقابل جدول التغطية.