الترحيل من mPDF إلى NextPDF
لمحة سريعة
قسم بعنوان «لمحة سريعة»يساعدك هذا الدليل على نقل قاعدة شفرة قائمة على mPDF إلى نواة NextPDF. في mPDF، يكون استدعاء المحتوى الرئيسي هو WriteHTML()، وهو يُعيَّن مباشرةً على Document::writeHtml(). يتمثل معظم العمل في تعيين مصفوفة إعداد المُنشئ (إذ يُهيِّئ mPDF كل شيء عبر مصفوفة ترابطية واحدة تُمرَّر إلى new Mpdf([...])) وفي التعامل مع اختلاف معالجة الخطوط. NextPDF وmPDF محركان مستقلان، لذلك يكون المستند المُرحَّل متوافقًا مع ناتج mPDF، لا مطابقًا له بايتًا ببايت. يغطي هذا الدليل تعيين الأفعال، وتعيين مصفوفة الإعداد، واختلافات الخطوط، واختلافات دعم صفحات الأنماط المتتالية (CSS)، والفروق السلوكية، وتسلسلًا آمنًا للترحيل.
تُحدِّد مصفوفة دعم صفحات الأنماط المتتالية (CSS) ميزات لغة ترميز النص التشعبي (HTML) وCSS التي جرى التحقق منها. يصف هذا الدليل السلوك، لكنه لا يؤكد التكافؤ المرئي مع mPDF.
التثبيت
قسم بعنوان «التثبيت»composer require nextpdf/core:^3أبقِ mpdf/mpdf مُثبَّتًا أثناء الترحيل. أزِله بعد اكتمال التحويل النهائي (انظر تسلسل الترحيل الآمن).
نظرة مفاهيمية عامة
قسم بعنوان «نظرة مفاهيمية عامة»يجمع كائن Mpdf الخاص بـ mPDF بين الإعداد وسلوك العرض ضمن واجهة واحدة. تُهيِّئه مصفوفة المُنشئ، ويُشغِّله WriteHTML() إضافةً إلى أفعال ترقيم الصفحات (AddPage، SetHTMLHeader، SetHTMLFooter). يفصل NextPDF الإعداد في كائن القيمة غير القابل للتغيير NextPDF\Core\Config ويكتب المحتوى عبر Document::writeHtml(). لا توجد سلسلة “وضع” في المُنشئ. يُحلِّل NextPDF ما تُمرِّره من HTML، ثم يُصدِر المستند عبر save() أو output() أو getPdfData().
الخطوط: يأتي mPDF مع دليل خطوط، وخريطة fontdata، ومجموعة احتياطية من “الخطوط الأساسية”. يحلّ NextPDF الخطوط من دليل خطوط واحد إضافةً إلى مطابقة font-family في CSS، ويُجزِّئ دائمًا الخطوط المضمَّنة (المنظمة الدولية للتوحيد القياسي (ISO) 32000-2 §9، iso32000_2_sec9#x1.x45.p7). مطابقة الخطوط والاحتياط منها خاصّان بكل محرك (CSS Fonts 4 §5.5، css_fonts_4#x1.x5.x5.x1.p13)، لذلك قد يختلف استبدال المحارف. هذا هو الاختلاف المرئي الأبرز، ويُغطَّى في اختلاف معالجة الخطوط.
سطح واجهة برمجة التطبيقات (API)
قسم بعنوان «سطح واجهة برمجة التطبيقات (API)»واجهة HTML الخاصة بـ NextPDF موثَّقة في مرجع وحدة Html. نقاط الدخول الأساسية هي Document::createStandalone()، Document::writeHtml(string $html): static، Document::writeHtmlCell(...)، Document::addPage()، Document::output(?string, OutputDestination)، Document::save(string $path): void، Document::getPdfData(): string، وكائن القيمة NextPDF\Core\Config.
تعيين أفعال واجهة برمجة التطبيقات (API)
قسم بعنوان «تعيين أفعال واجهة برمجة التطبيقات (API)»أسماء طرائق mPDF العامة أدناه مؤكَّدة مقابل المستودع العام المنبع (mpdf/mpdf، development)؛ راجِع ملف مصدر الإسناد داخل المستودع _source-sidecar-upstream-api.md. لا يُعاد إنتاج أي نص توثيق منبع.
| mPDF | NextPDF | ملاحظات |
|---|---|---|
new Mpdf([...]) | Document::createStandalone($config) | تُعيَّن مصفوفة إعداد mPDF على NextPDF\Core\Config؛ انظر تعيين الإعداد. استخدم DocumentFactory للعمليات طويلة العمر. |
$mpdf->WriteHTML($html) | $doc->writeHtml($html) | تعيين مباشر. وسيط mPDF الثاني $mode (مستند كامل مقابل CSS فقط مقابل عنصر) ليس له نظير في NextPDF؛ مرِّر HTML كاملًا. |
$mpdf->WriteFixedPosHTML(...) | $doc->writeHtmlCell(...) | منطقة HTML محدَّدة الموضع والحجم؛ عيِّن وسائط x/y/width/height. |
$mpdf->AddPage(...) | $doc->addPage() | لا يأخذ NextPDF تجاوزات mPDF لكل استدعاء والخاصة بالـ orientation/format/الهوامش كوسائط؛ وبدلًا من ذلك غيِّر نموذج المستند بين الاستدعاءات. |
$mpdf->SetHTMLHeader($html) / SetHTMLFooter($html) | header/footer عبر واجهة برمجة تطبيقات التخطيط (Layout API) | تُعيَّن رؤوس HTML الجارية في mPDF على آلية header/footer في NextPDF، وليس على HTML مضمَّن في أعلى المتن. |
$mpdf->Output($name, $dest) | $doc->output($name, OutputDestination::…) | تُعيَّن محارف الوجهة في mPDF (I/D/F/S) على تعداد OutputDestination (Inline/Download/file عبر save()/string عبر getPdfData()). |
$mpdf->Output('','S') | $doc->getPdfData() | تُرجِع بايتات. |
$mpdf->Output($path,'F') | $doc->save($path) | تكتب إلى مسار ملف. |
$mpdf->SetTitle($t) | $doc->setTitle($t) | تستقر في قاموس المعلومات في ISO 32000-2 §14 / منصة البيانات الوصفية القابلة للتوسيع (XMP) (iso32000_2_sec14#x1.x5.p5). |
$mpdf->SetProtection($perms,...) | $doc->setEncryption(...) (واجهة برمجة تطبيقات الأمان) | الأذونات تعاونية مع القارئ، وليست تحكمًا في الوصول — انظر ملاحظات الأمان. |
عيِّنة شفرة — بداية سريعة
قسم بعنوان «عيِّنة شفرة — بداية سريعة»<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
// mPDF:// $mpdf = new \Mpdf\Mpdf();// $mpdf->WriteHTML('<h1>Invoice</h1>');// $mpdf->Output('out.pdf', \Mpdf\Output\Destination::FILE);
// NextPDF — default page is A4 portrait:$doc = Document::createStandalone();$doc->setTitle('Invoice');$doc->addPage();$doc->writeHtml('<h1>Invoice</h1>');$doc->save(__DIR__ . '/out.pdf');
echo "Wrote out.pdf\n";عيِّنة شفرة — إنتاجية
قسم بعنوان «عيِّنة شفرة — إنتاجية»يتوافق هذا المثال مع examples/04-text-and-fonts.php، وهو الأساس القابل للتشغيل لمفاهيم معالجة الخطوط في هذا الدليل. يستخدم حجم صفحة صريحًا وهوامش ومتن محتوى يختبر انتقاء الخطوط.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\OutputDestination;use NextPDF\Core\Config;use NextPDF\Core\Document;use NextPDF\ValueObjects\Margin;use NextPDF\ValueObjects\PageSize;
// Equivalent of: new Mpdf(['format'=>'A4','margin_left'=>20, ...]).// Margin constructor order is (top, right, bottom, left) — NOT L,R,T,B.$config = new Config( pageSize: new PageSize(595.276, 841.890, 'A4'), margins: new Margin(16.0, 20.0, 16.0, 20.0), // top,right,bottom,left in points fontsDirectory: __DIR__ . '/fonts',);
$doc = Document::createStandalone($config);$doc->setTitle('Quarterly Report');$doc->addPage();
$html = <<<'HTML'<h1 style="font-family:'DejaVu Sans';color:#1E3A8A;">Quarterly Report</h1><p>Body text resolves through CSS font-family matching against the configuredfonts directory. mPDF's fontdata map has no direct analogue — register thefamily via CSS and the fonts directory instead.</p>HTML;
$doc->writeHtml($html);
// Equivalent of $mpdf->Output('report.pdf', Destination::DOWNLOAD):$doc->output('report.pdf', OutputDestination::Download);الحالات الحدِّية والمزالق
قسم بعنوان «الحالات الحدِّية والمزالق»- وسيط
$modeعلىWriteHTML. لا يوجد نظير لـWriteHTML($html, $mode)الخاص بـ mPDF (2 = CSS فقط، 1 = عنصر). ضع CSS ضمن ما تُمرِّره من HTML؛ لا يوجد تسلسل “اكتب CSS ثم اكتب المتن”. - تجاوزات لكل
AddPage. يسمح mPDF لـAddPage()بتغيير الـ format/orientation في منتصف المستند عبر وسائط. لا يأخذaddPage()في NextPDF مثل هذه الوسائط؛ تتغير أحجام النموذج على مستوى المستند، لا عبر استدعاء الصفحة. - رؤوس/تذييلات HTML. يُسجِّل mPDF الرؤوس الجارية كأجزاء HTML منفصلة؛ لا تلصقها في المتن. عيِّنها على آلية header/footer في NextPDF.
- أسماء الخطوط. يُسوِّي mPDF أسماء الخطوط عبر جدول
fontdata/core-font الخاص به. يطابق NextPDF الـfont-familyفي CSS مقابل دليل الخطوط؛ وقد يحتاج اسم mPDF المستعار الذي كان يُحلّ ضمنيًا إلى@font-face/family. صريحين. - محارف الوجهة. الـ
'I'/'D'/'F'/'S'غير مقبولة؛ استخدم تعدادOutputDestinationأوsave()/getPdfData().
الأداء
قسم بعنوان «الأداء»الدالة writeHtml() تعمل بتمريرة واحدة (ADR-001)؛ وتتبع ذروة الذاكرة حجم المستند، لا نموذج كائن مستند (DOM) محتفظًا به. ميزانية مثال هذا الدليل: wall_ms: 2000, peak_mb: 128. للمستندات الطويلة، قسِّم المحتوى عبر استدعاءات addPage() بدلًا من تمرير سلسلة ضخمة واحدة. هذا هو الإرشاد نفسه المنطبق على تقطيع $mode في mPDF، لكن بصياغة تناسب نموذج الصفحة.
ملاحظات الأمان
قسم بعنوان «ملاحظات الأمان»- الأذونات تعاونية مع القارئ. يوفر
SetProtection()←setEncryption()السرية، لا التحكم في الوصول: تعتمد بِتات الأذونات في ISO على قارئ متعاون. لا تعرض التشفير للمستخدمين على أنه تحكم في الوصول. - البيانات الوصفية. تستقر
SetTitle()ومعلومات المستند في قاموس المعلومات في ISO 32000-2 §14 / XMP (iso32000_2_sec14#x1.x5.p5)؛ لا تُخزِّن أسرارًا هناك أبدًا. - لا يُنفِّذ NextPDF النصوص البرمجية داخل المستند؛ ولا يُغيِّر أي توجيه mPDF ذلك هنا.
المطابقة
قسم بعنوان «المطابقة»| العبارة | المواصفة | البند | reference_id |
|---|---|---|---|
| تُكتب الخطوط كبرامج خطوط embedded/subset. | ISO 32000-2 | §9 | |
| تُعيَّن format/margins الصفحة على مربع حدود الصفحة. | ISO 32000-2 | §7 | |
| تستقر البيانات الوصفية للعنوان/الحماية في قاموس المعلومات / XMP. | ISO 32000-2 | §14 | |
| مطابقة الخطوط / الاحتياط منها خاصّة بكل محرك. | CSS Fonts 4 | §5.5 |
يُنتج NextPDF محتوى ISO 32000-2؛ لكنه لا يؤكد التطابق المرئي مع mPDF. راجِع الناتج كلما غيَّرت المُصيِّر.
السياق التجاري
قسم بعنوان «السياق التجاري»لا ينطبق. تُغطِّي نواة NextPDF مسار ترحيل mPDF الموصوف هنا.
انظر أيضًا
قسم بعنوان «انظر أيضًا»تفاصيل الترحيل (أقسام R6 المطلوبة)
قسم بعنوان «تفاصيل الترحيل (أقسام R6 المطلوبة)»لمن هذا الدليل
قسم بعنوان «لمن هذا الدليل»هذا الدليل موجَّه إلى الفِرق التي تُشغِّل mpdf/mpdf لتحويل HTML إلى PDF من جانب الخادم. إذا كانت شفرتك مبنية حول new Mpdf([...]) + WriteHTML + Output (+ header/footer اختياري)، فإن تعيين الأفعال وتعيين الإعداد يغطيانها.
النطاق
قسم بعنوان «النطاق»ضمن النطاق: مصفوفة إعداد مُنشئ Mpdf، وWriteHTML/Output/AddPage، وheaders/footers، والخطوط، والحماية، والبيانات الوصفية. خارج النطاق: أصناف mPDF الداخلية وسطح مساعِدات الاستجابة السريعة (QR)/barcode/watermark. عيِّن هذه الأجزاء على وحدات NextPDF المقابلة — Barcode وGraphics — التي لا تُغطَّى هنا.
خريطة التوافق
قسم بعنوان «خريطة التوافق»التوافق سلوكي، ولا توجد طبقة توافق جاهزة: لا يوفر NextPDF طبقة توافق لصنف Mpdf. أعِد كتابة كل موضع استدعاء. استخدم الصفوف التي جرى التحقق منها في مصفوفة دعم CSS لتحديد توقعات ميزات CSS.
تعيين مصفوفة إعداد المُنشئ
قسم بعنوان «تعيين مصفوفة إعداد المُنشئ»مفاتيح إعداد mPDF أدناه مؤكَّدة مقابل المستودع العام المنبع (mpdf/mpdf، development). لا يُعاد إنتاج أي نص من توثيق المنبع.
| مفتاح إعداد mPDF | NextPDF | ملاحظات |
|---|---|---|
mode | (لا نظير) | تختار سلسلة وضع mPDF ('utf-8'، 'c'، '+aCJK'، …) سلوك الـ font/script. NextPDF يعمل دائمًا بـ Unicode؛ ويُعالَج نص الصينية واليابانية والكورية (CJK) بانتقاء الخطوط، لا بوضع. أسقِط المفتاح. |
format | Config->pageSize (كائن القيمة PageSize (VO)) | تصبح الصيغ المسمّاة أبعادًا نقطية صريحة؛ وتُعيَّن المصفوفات [w,h] على PageSize. |
orientation | بدِّل width/height في PageSize | لا توجد راية اتجاه؛ يعني الوضع الأفقي أن العرض > الارتفاع. |
default_font_size | حجم خط CSS الأساسي | عيِّن هذا في صفحة الأنماط الأساسية لديك، لا في مفتاح مُنشئ. |
default_font | font-family في CSS / خط مُسجَّل | عيِّن العائلة الافتراضية عبر CSS / تسجيل الخطوط. |
margin_left / margin_right / margin_top / margin_bottom | Config->margins (Margin VO) بالنقاط | استخدم كائن قيمة Margin واحدًا؛ ترتيب مُنشئه هو Margin(top, right, bottom, left) (تحقَّق مقابل src/ValueObjects/Margin.php)، لا ترتيب مفاتيح mPDF. |
margin_header / margin_footer | إزاحة header/footer عبر واجهة برمجة تطبيقات التخطيط (Layout API) | عيِّن هذه على إعداد header/footer في NextPDF، لا على مفاتيح المُنشئ. |
اختلاف معالجة الخطوط
قسم بعنوان «اختلاف معالجة الخطوط»- دليل خطوط واحد. تتحول قائمة أدلة خطوط mPDF وخريطة
fontdataوالاحتياط بالخطوط الأساسية إلىConfig->fontsDirectoryإضافةً إلى مطابقةfont-familyفي CSS. - التجزئة دائمًا. يُجزِّئ NextPDF دائمًا الخطوط المضمَّنة (ISO 32000-2 §9،
iso32000_2_sec9#x1.x45.p7)؛ ولا نظير لرايات التجزئة في mPDF، وهي غير لازمة. - المطابقة خاصة بكل محرك. تختلف مطابقة الخطوط والاحتياط منها بحسب المحرك (CSS Fonts 4 §5.5،
css_fonts_4#x1.x5.x5.x1.p13)؛ وقد يحتاج اسم خط mPDF المستعار إلى@font-faceصريح أو اسم عائلة دقيق. أعِد ضبط أساس عرض المحارف بعد الترحيل. اختلافات الاستبدال متوقَّعة، وليست عيوبًا.
الفروق السلوكية
قسم بعنوان «الفروق السلوكية»- استبدال الخطوط (انظر أعلاه) — الاختلاف الرئيسي المرئي.
- لا
$modeعلىWriteHTML— مرِّر HTML كاملًا مع CSS مضمَّن. - لا تجاوز للصيغة لكل
AddPage— تتغير أحجام النموذج على مستوى المستند. - الأذونات تعاونية مع القارئ (انظر ملاحظات الأمان).
- محرك تخطيط مستقل — قد يختلف التفاف الأسطر / ترقيم الصفحات في المحتوى الكثيف؛ أعِد ضبط أساس الفروق المرئية.
هذه فروق سلوكية موثَّقة، وليست عيوبًا في أي من المحركين.
غير مدعوم / لا نظير مباشر
قسم بعنوان «غير مدعوم / لا نظير مباشر»- سلسلة مُنشئ
mode— غير مُنمذَجة (دائمًا Unicode). - وسائط الـ format/orientation/الهامش لكل
AddPage()— ليست وسائط في NextPDF. - خريطة
fontdataفي mPDF — يحلّ محلها دليل الخطوط + مطابقة CSS. - محارف الوجهة
'I'/'D'/'F'/'S'في mPDF — يحلّ محلها تعدادOutputDestination+save()/getPdfData().
تسلسل الترحيل الآمن
قسم بعنوان «تسلسل الترحيل الآمن»- أضِف
nextpdf/coreإلى جانبmpdf/mpdf؛ أبقِ mPDF مُثبَّتًا في الوقت الحالي. - اختر مستندًا واحدًا منخفض المخاطر. حوِّل
new Mpdf([...])عبر تعيين الإعداد وWriteHTML/Outputعبر تعيين الأفعال. - سجِّل الخطوط التي يستخدمها المستند في
Config->fontsDirectory، وأضِف تصريحات@font-face/family صريحة لأي اسم mPDF مستعار. - وَلِّد ملفي PDF كليهما للمدخل نفسه وقارِنهما مرئيًا. الفروق (استبدال الخطوط، التفاف الأسطر) متوقَّعة في المحركات المستقلة — اقبلها لكل مستند.
- عيِّن أي header/footer بصيغة HTML على آلية header/footer في NextPDF.
- كرِّر لكل مستند، الأقل خطورة أولًا؛ أبقِ mPDF مُثبَّتًا حتى التحويل الأخير.
- أزِل
mpdf/mpdfمنcomposer.jsonبعد التحويل النهائي.
اختبار الترحيل
قسم بعنوان «اختبار الترحيل»- خُذ لقطة من ناتج mPDF للمستندات الممثِّلة قبل تغيير الشفرة (مدخلات ذهبية؛ ستختلف البايتات).
- لكل مستند مُرحَّل، أكِّد القبول بفحصك الخاص (مقارنة مرئية
- واستخراج النص). يمارس
examples/04-text-and-fonts.phpوexamples/08-html-basic.phpسلوك الخطوط/HTML في NextPDF، إضافةً إلى مجموعتي Html/Font فيtests/الأساسية. قبول الترحيل خاصّ بكل مستند ويبقى مسؤوليتك.
- واستخراج النص). يمارس
- أضِف اختبار انحدار لكل مستند مُرحَّل.
الأدلة / إمكانية التتبع
قسم بعنوان «الأدلة / إمكانية التتبع»كل عبارة سلوكية عن NextPDF في هذه الصفحة مدعومة باختبار أو مثال أو توقيع مصدر أو سجل قرار معماري (ADR) داخل المستودع، أو — لخصائص صيغة PDF — ببنود ISO 32000-2 / CSS المثبَّتة عبر التوليد المعزَّز بالاسترجاع (RAG) في citations: في المقدمة الأمامية وجدول المطابقة. يُؤكَّد سلوك mPDF فقط على أنه “محرك مستقل — توقَّع فروقًا موثَّقة”؛ ولا تدّعي هذه الصفحة أي تكافؤ لا يُثبِته أثر داخل المستودع.
| ادعاء سلوكي عن NextPDF | الدليل داخل المستودع (المسار) |
|---|---|
تُعيَّن WriteHTML() مباشرةً على Document::writeHtml(string $html): static. | src/Core/Concerns/HasTextOutput.php (writeHtml()); examples/08-html-basic.php. |
تُعيَّن WriteFixedPosHTML(...) على writeHtmlCell(...). | src/Core/Concerns/HasTextOutput.php (writeHtmlCell()). |
الصفحة الافتراضية لـ createStandalone() هي A4 طولية (595.276 × 841.890 pt). | src/Core/Config.php (PageSize الافتراضي)؛ tests/Unit/Core/DocumentCreateStandaloneAndConfigWithersEdgeCaseTest.php. |
ترتيب مُنشئ Margin هو (top, right, bottom, left). | src/ValueObjects/Margin.php (ترتيب الخصائص المُرقّاة). |
وجهة الإخراج هي تعداد NextPDF\Contracts\OutputDestination؛ 'I'/'D'/'F'/'S' غير مقبولة. | src/Contracts/OutputDestination.php (الحالات Inline/Download/File/String)؛ tests/Unit/Core/Concerns/DocumentOutputDestinationDispatchTest.php. |
Output('','S') → getPdfData(); Output($path,'F') → save($path). | src/Core/Concerns/HasOutput.php (getPdfData(), save(), output()). |
تُعيَّن SetProtection() على setEncryption(...)؛ الأذونات تعاونية مع القارئ. | src/Core/Concerns/HasSecurity.php (setEncryption())؛ ISO 32000-2 §14 (المقدمة الأمامية citations:). |
تُعيَّن SetTitle() ← setTitle()؛ تستقر البيانات الوصفية في قاموس المعلومات / XMP. | src/Core/Concerns/HasMetadata.php (setTitle())؛ tests/Unit/Core/Concerns/DocumentInfoMetadataSetterBaselineTest.php؛ ISO 32000-2 §14 (المقدمة الأمامية citations:). |
| تُضمَّن الخطوط دائمًا كبرامج مُجزَّأة. | tests/Unit/Core/Concerns/DocumentTextOutputFontSubsettingAndBorderEdgeCaseTest.php؛ examples/04-text-and-fonts.php؛ ISO 32000-2 §9 (المقدمة الأمامية citations:). |
| مطابقة الخطوط / الاحتياط منها خاصّة بكل محرك (اختلاف الاستبدال). | CSS Fonts 4 §5.5 (المقدمة الأمامية citations: + المطابقة). |
الدالة writeHtml() تمريرة واحدة؛ تتبع ذروة الذاكرة حجم المستند. | docs/architecture/adr/ADR-001-stream-based-rendering-pipeline.md. |
التراجع
قسم بعنوان «التراجع»تبقى الحزمتان كلتاهما مُثبَّتتين حتى التحويل النهائي، لذا يعني التراجع لكل موضع استدعاء إرجاع ذلك الموضع إلى مسار mPDF. بعد التحويل النهائي، يعني التراجع استعادة mpdf/mpdf والشفرة السابقة من نظام التحكم في الإصدارات. لا يتضمن الأمر أي ترحيل للبيانات.
اعتبارات الأداء
قسم بعنوان «اعتبارات الأداء»انظر الأداء. يُزيل نموذج التمريرة الواحدة تكلفة المخزن المؤقت المحتفظ به في mPDF. التكلفة الجديدة لكل مستند هي حلّ الخطوط في وقت التشغيل (الخطوة 3)، وهو قابل للتخزين المؤقت عبر دليل الخطوط.
المزالق الشائعة
قسم بعنوان «المزالق الشائعة»- الإبقاء على مفتاح
modeوتوقُّع سلوك CJK منه؛ يُسقطه NextPDF، ويُعالَج CJK بانتقاء الخطوط. - تمرير
WriteHTML($html, 2)(وضع CSS فقط)؛ ضمِّن CSS بدلًا من ذلك. - لصق header/footer بصيغة HTML في المتن.
- توقُّع أن يُحلّ اسم mPDF مستعار إلى الخط نفسه دون عائلة صريحة.
- توقُّع ناتج byte/pixel-identical (محركان مستقلان — لا يدّعي هذا الدليل أبدًا توافقًا جاهزًا أو توافقًا بنسبة 100%).
- معاملة مصفوفة دعم CSS على أنها استشارية؛ فهي مرجع الميزات التي جرى التحقق منها.