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

الانتقال من Dompdf إلى NextPDF

يساعدك هذا الدليل على نقل قاعدة شفرة قائمة على ⁨Dompdf⁩ تُنشئ ملفات تنسيق المستندات المحمولة (⁨PDF⁩) من لغة ترميز النص التشعبي (⁨HTML⁩) إلى مسار ⁨Html⁩ في ⁨NextPDF.⁩ تُنقَل معظم مواضع الاستدعاء مباشرة لأن المكتبتين تتبعان التدفق العام نفسه: تحميل ⁨HTML⁩، وعرضه، وإصدار ⁨PDF.⁩ يكمن العمل الحقيقي في خريطة الخيارات واختلافات دعم صفحات الأنماط المتتالية (⁨CSS⁩). ⁨NextPDF⁩ و⁨Dompdf⁩ محركان مستقلان، لذا فإن أي تخطيط أنتجه ⁨Dompdf⁩ يكون متوافقاً مع نتيجة ⁨NextPDF⁩، لا مطابقاً لها على مستوى البايت. يغطي هذا الدليل تعيين الأفعال، وتعيين مفاتيح الخيارات، والاختلافات السلوكية، وتسلسل انتقال آمن.

لا يضمن دعم ⁨NextPDF⁩ لميزة ⁨HTML/CSS⁩ إعادة إنتاج مستند ⁨Dompdf⁩ بكسلاً ببكسل. تُعدّ مصفوفة دعم ⁨CSS⁩ المرجع المعتمد للميزات المُتحقَّق منها. يصف هذا الدليل السلوك، ولا يدّعي التكافؤ البصري.

Terminal window
composer require nextpdf/core:^3

أبقِ dompdf/dompdf مثبَّتاً أثناء الانتقال. يُشغّل تسلسل الانتقال الآمن المحركين جنباً إلى جنب حتى يُحوَّل كل موضع استدعاء. أزِله بعد اكتمال التحويل.

كائن Dompdf في ⁨Dompdf⁩ واجهة واحدة تملك نموذج كائن المستند (⁨DOM⁩)، وورقة الأنماط، وشجرة الإطارات، واللوحة. يفصل ⁨NextPDF⁩ هذه الاهتمامات: يملك NextPDF\Core\Document نموذج الصفحة والإخراج، ويقود writeHtml() مسار ⁨HTML.⁩ لا توجد مرحلة منفصلة من خطوتين: “العرض، ثم الإخراج”. يُخطِّط writeHtml() المحتوى أثناء كتابته، وتُصدِر المستند باستخدام save() أو output() أو getPdfData().

محتوى الصفحة الذي يكتبه ⁨NextPDF⁩ هو رسم لتدفق المحتوى وفق ⁨ISO 32000-2⁩ (⁨ISO 32000-2⁩ §8، iso32000_2_sec8#x1.x3.p14). تُعيَّن هندسة الصفحة التي يتحكم فيها خيار حجم الورق إلى الكائن MediaBox للصفحة (⁨ISO 32000-2⁩ §7، iso32000_2_sec7#x1.x104.p10). هذه أساسيات في المحرك يتشاركها أي كاتب متوافق. أما خوارزمية التخطيط التي تحوّل ⁨CSS⁩ إلى ذلك المحتوى، فهي خاصة بـ ⁨NextPDF⁩ وتختلف عن خوارزمية ⁨Dompdf⁩؛ راجع الاختلافات السلوكية.

وُثِّقت واجهة برمجة التطبيقات (⁨API⁩) الخاصة بـ ⁨Html⁩ في ⁨NextPDF⁩ ضمن مرجع وحدة ⁨Html⁩، الذي يُولَّد تلقائياً من ⁨PHPDoc.⁩ نقاط الدخول المستخدمة أدناه هي Document::createStandalone() وDocument::writeHtml(string $html): static وDocument::writeHtmlCell(...) وDocument::output(?string, OutputDestination) وDocument::save(string $path): void وDocument::getPdfData(): string، وكائن القيمة NextPDF\Core\Config (pageSize، margins، fontsDirectory).

تعيين أفعال واجهة برمجة التطبيقات

قسم بعنوان «تعيين أفعال واجهة برمجة التطبيقات»

أسماء واجهة برمجة التطبيقات العامة لـ ⁨Dompdf⁩ الواردة أدناه مؤكَّدة مقابل المستودع العام الأصلي (dompdf/dompdf، master)؛ راجع ملف مصدر التتبّع داخل المستودع _source-sidecar-upstream-api.md. لم يُعاد إنتاج أي نص من التوثيق الأصلي.

⁨Dompdf⁩⁨NextPDF⁩ملاحظات
new Dompdf($options)Document::createStandalone($config)يأخذ ⁨Dompdf⁩ كائن Options؛ بينما يأخذ ⁨NextPDF⁩ كائن NextPDF\Core\Config. استخدم DocumentFactory للعمال طويلي الأمد بدلاً من createStandalone().
$dompdf->loadHtml($html, $encoding)$doc->writeHtml($html)يعامل ⁨NextPDF⁩ المدخلات على أنها ⁨UTF-8.⁩ حوِّل ترميز المدخلات غير المُرمَّزة بـ ⁨UTF-8⁩ قبل الاستدعاء بدلاً من تمرير وسيطة ترميز.
$dompdf->loadHtmlFile($file)$doc->writeHtml(file_get_contents($file))لا يوفّر ⁨NextPDF⁩ صيغة لتحميل الملفات. اقرأ الملف بنفسك لتبقى سياسة الموارد ضمن شفرتك.
$dompdf->setPaper($size, $orientation)ConfigpageSize (كائن قيمة PageSize)راجع خريطة الخيارات.
$dompdf->render()(ضمني)يُخطِّط ⁨NextPDF⁩ أثناء writeHtml()؛ لا توجد مرحلة عرض منفصلة. أزِل استدعاء render().
$dompdf->output()$doc->getPdfData()يُرجِع بايتات ⁨PDF.⁩
$dompdf->stream($name, $opts)$doc->output($name, OutputDestination::Download)يختار ⁨NextPDF⁩ الوجهة باستخدام التعداد OutputDestination.
$dompdf->setBasePath($p) / setProtocol() / setBaseHost()(حلّ الموارد يختلف)يحلّ ⁨NextPDF⁩ الموارد النسبية مقابل مجموعة عمل المستند، لا مقابل ثلاثية ⁨path/protocol⁩ الأساسية؛ راجع الاختلافات السلوكية.
$dompdf->addInfo($label, $value)$doc->setTitle() / setAuthor() / واجهة برمجة تطبيقات البيانات الوصفيةتُعيَّن أزواج المعلومات حرّة الشكل في ⁨Dompdf⁩ إلى أدوات ضبط البيانات الوصفية المُصنَّفة (⁨ISO 32000-2⁩ معلومات المستند §14، iso32000_2_sec14#x1.x5.p5).
$dompdf->setHttpContext($ctx)(لا يوجد مكافئ)لا يجلب ⁨NextPDF⁩ الموارد البعيدة عبر سياق دفق؛ راجع غير مدعوم / لا يوجد مكافئ مباشر.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
// Dompdf:
// $dompdf = new Dompdf();
// $dompdf->loadHtml('<h1>Invoice</h1>');
// $dompdf->setPaper('A4', 'portrait');
// $dompdf->render();
// file_put_contents('out.pdf', $dompdf->output());
// NextPDF — the createStandalone() default page size 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/08-html-basic.php، وهو السند القابل للتشغيل لهذا الدليل، مع حجم ورق غير افتراضي صريح وهوامش. وهو يطابق استدعاء setPaper() في ⁨Dompdf⁩ إضافةً إلى ضبط هوامش Options.

<?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: $dompdf->setPaper('letter','portrait') + margin options.
// US Letter portrait = 612 x 792 pt.
// Margin constructor order is (top, right, bottom, left) — all 0.5in here.
$config = new Config(
pageSize: new PageSize(612.0, 792.0, 'Letter'),
margins: new Margin(36.0, 36.0, 36.0, 36.0), // top,right,bottom,left; 0.5in in points
);
$doc = Document::createStandalone($config);
$doc->setTitle('Quarterly Report');
$doc->setAuthor('Finance');
$doc->addPage();
$html = <<<'HTML'
<h1 style="color:#1E3A8A;">Quarterly Report</h1>
<p>This report renders through the NextPDF Html pipeline. The CSS subset that
is <strong>Verified</strong> for production is the support-matrix authority,
not this page.</p>
<table border="1">
<tr><th>Region</th><th>Total</th></tr>
<tr><td>EMEA</td><td>1,204</td></tr>
</table>
HTML;
$doc->writeHtml($html);
// Equivalent of $dompdf->stream('report.pdf'):
$doc->output('report.pdf', OutputDestination::Download);
  • لا عرض من مرحلتين. شفرة ⁨Dompdf⁩ التي تفحص الحالة بين render() وoutput()، مثل قراءة عدد الصفحات، لا تملك مكافئاً في ⁨NextPDF⁩ عند ذلك الحد بالضبط. استعلم عن المستند بعد writeHtml() بدلاً من ذلك.
  • الترميز. يحذف ⁨NextPDF⁩ وسيطة $encoding الخاصة بـ ⁨Dompdf.⁩ حوِّل المدخلات إلى ⁨UTF-8⁩ قبل writeHtml(). تمرير بايتات ⁨Latin-1⁩ يُنتج نصاً مشوَّهاً، لا خطأً.
  • render() مُترَك في مكانه. أي استدعاء متبقٍّ من نمط $dompdf->render() ليس له طريقة في ⁨NextPDF⁩ ويفشل بخطأ فادح “طريقة غير معرَّفة”. احذفه أثناء التحويل؛ لا تضع له بديلاً وهمياً.
  • ⁨PHP⁩ المُضمَّن. يقيّم enable_php في ⁨Dompdf⁩ العنصر <script type="text/php">. لا يوفّر ⁨NextPDF⁩ أي تنفيذ لـ ⁨PHP⁩ داخل المستند بحكم التصميم لأنه سطح حقن. انقل ذلك المنطق إلى شفرة ⁨PHP⁩ لديك قبل writeHtml().
  • حلّ الموارد النسبية. يحلّ ⁨Dompdf⁩ العنصر <img src> مقابل ثلاثية ⁨path/protocol/host⁩ الأساسية. ويحلّ ⁨NextPDF⁩ مقابل مجموعة عمل المستند. أثناء الانتقال، مرِّر مسارات مطلقة أو معرِّفات موارد منتظمة (⁨URI⁩) بصيغة بيانات محلولة مسبقاً لإزالة ذلك المتغيِّر.

يُخطِّط writeHtml() في تمريرة دفق واحدة، كما هو موصوف في سجل قرار البنية ⁨ADR-001.⁩ لا يوجد كائن شجرة إطارات وسيط مُحتفَظ به بعد التخطيط، لذلك تتبع ذروة الذاكرة حجم المستند بدلاً من عدد عُقد ⁨DOM.⁩ ميزانية الأداء لمثال هذا الدليل هي wall_ms: 2000, peak_mb: 128. للمستندات الكبيرة، قسِّم ⁨HTML⁩ عبر حدود addPage() بدلاً من بناء سلسلة واحدة بحجم عدة ميغابايت.

  • لا جلب بعيد عبر سياق دفق. لا يُنفِّذ ⁨NextPDF⁩ مسار الجلب البعيد setHttpContext() / enable_remote الخاص بـ ⁨Dompdf.⁩ حُلّ الموارد البعيدة وتحقَّق منها في تطبيقك، ثم مرِّر بايتات أو معرِّفات موارد بصيغة بيانات. هذا يزيل سطح تزوير الطلب من جانب الخادم (⁨SSRF⁩) الذي يحمله enable_remote.
  • لا تنفيذ شفرة داخل المستند. غياب مكافئ لـ enable_php هو تصليب أمني متعمَّد، لا ثغرة.
  • تُكتَب البيانات الوصفية للمستند التي تضبطها عبر أدوات الضبط المُصنَّفة في قاموس المعلومات §14 من ⁨ISO 32000-2⁩ / منصة البيانات الوصفية القابلة للتوسعة (⁨XMP⁩) (iso32000_2_sec14#x1.x5.p5). لا تضع أي أسرار هناك.
البيانالمواصفةالبند⁨reference_id⁩
محتوى الصفحة رسم لتدفق محتوى في النموذج ⁨opaque/transparent.⁩⁨ISO 32000-2⁩
§8
| |

| يُعيَّن حجم الورق إلى صندوق حدود الكائن للصفحة. | ⁨ISO 32000-2⁩ | §7 | | | تُكتَب خطوط ⁨HTML⁩ على هيئة برامج خطوط ⁨embedded/subset.⁩ | ⁨ISO 32000-2⁩ | §9 | | | معالجة المسافات البيضاء / فواصل الأسطر خاصة بالمحرك. | ⁨CSS Text 3⁩ | §6.5 | |

ينتج ⁨NextPDF⁩ محتوى ⁨ISO 32000-2.⁩ وهو لا يدّعي أن مستند ⁨Dompdf⁩ المنقول مطابق بصرياً. أعِد مراجعة الإخراج كلما غيَّرت المحرِّكات.

غير منطبق. يغطي ⁨Core⁩ مسار الانتقال هذا من ⁨HTML⁩ إلى ⁨PDF.⁩


تفاصيل الانتقال (أقسام ⁨R6⁩ المطلوبة)

قسم بعنوان «تفاصيل الانتقال (أقسام ⁨R6⁩ المطلوبة)»

استخدم هذا الدليل إذا كان فريقك يُشغِّل dompdf/dompdf لتحويل ⁨HTML⁩ إلى ⁨PDF⁩ من جانب الخادم ويريد الانتقال إلى محرك ⁨NextPDF.⁩ إذا كنت تستدعي فقط loadHtml / setPaper / render / output، فإن تعيين الأفعال يغطي سطحك بالكامل.

ضمن النطاق: أفعال واجهة Dompdf، ومفاتيح Options، وتوقعات تكافؤ ميزات ⁨CSS⁩، وحلّ الموارد، والبيانات الوصفية. خارج النطاق: كائنات ⁨Dompdf⁩ الداخلية FrameTree/Canvas/Stylesheet. لا يوفّر ⁨NextPDF⁩ مكافئات عامة لها، لذلك لا تنقل شفرة تصل إليها؛ استبدلها بواجهة برمجة التطبيقات العامة.

تعني التغطية توافقاً سلوكياً، لا بديلاً جاهزاً للإسقاط. لا يوفّر ⁨NextPDF⁩ بديلاً لفئة Dompdf (على عكس مسار ⁨TCPDF⁩؛ راجع /migration/tcpdf-compat/). أعِد كتابة كل موضع استدعاء باستخدام تعيين الأفعال. تضبط الصفوف المُتحقَّق منها في مصفوفة دعم ⁨CSS⁩ توقعات ميزات ⁨CSS⁩ بالكامل. لا يعيد هذا الدليل بيان حالة كل خاصية.

خيار ⁨Dompdf⁩ (المفتاح / أداة الضبط)⁨NextPDF⁩ملاحظات
default_paper_size / setDefaultPaperSize() ; setPaper($size,...)Config->pageSize (كائن قيمة PageSize)تصبح الأحجام المُسمّاة أبعاداً صريحة بالنقاط. new PageSize(595.276, 841.890, 'A4') هو افتراضي createStandalone().
default_paper_orientation / setDefaultPaperOrientation()بدِّل PageSize ⁨width/height⁩لا يملك ⁨NextPDF⁩ علم اتجاه. الصفحة الأفقية هي PageSize بعرض > ارتفاع.
dpi / setDpi()(ليس مفتاحاً عاماً)يعمل ⁨NextPDF⁩ بنقاط ⁨PDF⁩ (1/72 بوصة). يُحدَّد حجم الصور لكل صورة على حدة، لا بوصفه مُضاعِفاً عاماً للنقاط لكل بوصة (⁨DPI⁩) على مستوى المستند. أعِد حساب أحجام البكسل الثابتة إلى نقاط.
enable_remote / setIsRemoteEnabled()(لا يوجد مكافئ — بحكم التصميم)حُلّ الموارد البعيدة في شفرتك؛ راجع الملاحظات الأمنية.
enable_html5_parser / setIsHtml5ParserEnabled()(يُحلِّل ⁨HTML⁩ دائماً)لا يوجد مفتاح تبديل؛ المُحلِّل هو المسار.
enable_php / setIsPhpEnabled()(لا يوجد مكافئ — بحكم التصميم)⁨PHP⁩ داخل المستند غير مدعوم. انقل المنطق خارج القالب.
font_dir / setFontDir()Config->fontsDirectoryسلسلة دليل خطوط واحدة.
chroot(حُلّ في التطبيق)لا يقبل ⁨NextPDF⁩ خيار سجن نظام الملفات. تحقَّق من المسارات قبل تمرير البايتات.
default_font / setDefaultFont()⁨CSS⁩ font-family / خط مُسجَّلاضبط الافتراضي في ورقة الأنماط الأساسية لديك أو في تسجيل الخطوط، لا في خيار عام.
enable_font_subsetting / setIsFontSubsettingEnabled()(يُجزِّئ دائماً)يُجزِّئ ⁨NextPDF⁩ الخطوط المُضمَّنة دائماً (⁨ISO 32000-2⁩ §9، iso32000_2_sec9#x1.x45.p7). لا يوجد “إيقاف”؛ مسار ⁨Dompdf⁩ بعلم مُوقَف لا مكافئ له وغير مطلوب.
  • محرك التخطيط. يستخدم ⁨Dompdf⁩ و⁨NextPDF⁩ تطبيقي تخطيط ⁨CSS⁩ مستقلين. طيّ المسافات البيضاء وفواصل الأسطر محدَّدان في المواصفة، لكنهما يظلان حساسين للمحرك (⁨CSS Text 3⁩ §6.5، css_text_3#x1.x6.x5.p20). توقَّع اختلافات في التفاف الأسطر وترقيم الصفحات في النص الكثيف. أعِد ضبط خط الأساس لفروق المقارنة البصرية بعد الانتقال.
  • حدّ العرض. لا حدّ من مرحلتين render()/output() (راجع الحالات الحدّية).
  • حلّ الموارد. معالجة المسار/البروتوكول/المضيف الأساسية تختلف عن مجموعة عمل المستند.
  • نموذج ⁨DPI.⁩ نقاط ⁨PDF⁩ تختلف عن مُضاعِف ⁨DPI⁩ الخاص بـ ⁨Dompdf.⁩
  • البيانات الوصفية. أزواج addInfo() حرّة الشكل تختلف عن أدوات الضبط المُصنَّفة (⁨ISO 32000-2⁩ §14، iso32000_2_sec14#x1.x5.p5).

هذه اختلافات سلوكية موثَّقة، وليست عيوباً في أيٍّ من المحركين.

غير مدعوم / لا يوجد مكافئ مباشر

قسم بعنوان «غير مدعوم / لا يوجد مكافئ مباشر»
  • enable_php (⁨PHP⁩ داخل المستند) — غائب عن قصد.
  • setHttpContext() / enable_remote الجلب البعيد — غائب عن قصد.
  • الوصول العام إلى FrameTree / Canvas / Stylesheet — لا يوجد مكافئ عام.
  • dpi كمُضاعِف عام على مستوى المستند — غير مُنمذَج.

الشفرة التي تعتمد على هذه العناصر لا “تنتقل”. أزِلها أو أعِد التعبير عنها في شفرة التطبيق باستخدام الصفوف أعلاه.

  1. أضِف nextpdf/core جنباً إلى جنب مع dompdf/dompdf. لا تُزِل ⁨Dompdf⁩ بعد.
  2. اختر مستنداً واحداً منخفض المخاطر. أعِد كتابة موضع استدعائه باستخدام تعيين الأفعال، واحذف استدعاء render().
  3. أنشئ كلا ملفي ⁨PDF⁩ من نفس المدخلات وقارِنهما بصرياً. عامِل الاختلافات على أنها متوقَّعة لأن المحركين مستقلان، وقرِّر القبول لكل مستند.
  4. حوِّل استخدام الخيارات باستخدام خريطة الخيارات؛ أعِد حساب الأحجام المشتقة من ⁨DPI⁩ إلى نقاط.
  5. حُلّ مسبقاً الموارد البعيدة والنسبية إلى مسارات مطلقة أو معرِّفات موارد بصيغة بيانات لإزالة متغيِّر الحلّ.
  6. كرِّر لكل مستند، من الأقل مخاطرةً إلى الأعلى. أبقِ كلا المحركين مثبَّتين حتى يُحوَّل آخر موضع استدعاء.
  7. أزِل dompdf/dompdf من composer.json فقط بعد آخر تحويل.
  • التقط لقطة لإخراج ⁨Dompdf⁩ لمستندات تمثيلية قبل تغيير الشفرة. استخدم مدخلات ذهبية، لا بايتات ذهبية، لأن البايتات ستختلف.
  • لكل مستند منقول، مرِّر إخراج ⁨NextPDF⁩ عبر فحص القبول الخاص بك، مثل المقارنة البصرية أو تأكيدات استخراج النص. سلوك مسار ⁨HTML⁩ الخاص بـ ⁨NextPDF⁩ مغطّى بـ examples/08-html-basic.php ومجموعة ⁨Html⁩ الخاصة بـ tests/ في ⁨Core.⁩ قبول الانتقال خاص بكل مستند، وأنت مسؤول عن تأكيده.
  • أضِف اختبار انحدار لكل مستند منقول لرصد أي تحديث مستقبلي للمحرك.

كل بيان سلوكي عن ⁨NextPDF⁩ في هذه الصفحة مدعوم باختبار داخل المستودع، أو مثال، أو توقيع مصدر، أو سجل قرار بنية (⁨ADR⁩)، أو، لخصائص تنسيق ⁨PDF⁩، ببنود ⁨ISO 32000-2⁩ / ⁨CSS⁩ المثبَّتة عبر التوليد المعزَّز بالاسترجاع (⁨RAG⁩) في citations: في البيانات الأمامية وجدول المطابقة. سلوك ⁨Dompdf⁩ مؤكَّد فقط على أنه “محرك مستقل — توقَّع اختلافات موثَّقة”. لا تدّعي هذه الصفحة أي تكافؤ ما لم يُثبته أثر داخل المستودع.

بيان ⁨NextPDF⁩ السلوكيالأدلة داخل المستودع (المسار)
الصفحة الافتراضية لـ createStandalone() هي ⁨A4⁩ طولية (595.276 × 841.890 pt).src/Core/Config.php (الافتراضي PageSize(595.276, 841.890, 'A4')tests/Unit/Core/DocumentCreateStandaloneAndConfigWithersEdgeCaseTest.php (createStandaloneWithNullConfigBuildsDocumentWithA4Defaults).
يُخطِّط writeHtml() في تمريرة دفق واحدة؛ لا ⁨DOM⁩ مُحتفَظ به بعد التخطيط.docs/architecture/adr/ADR-001-stream-based-rendering-pipeline.md؛ src/Core/Concerns/HasTextOutput.php (writeHtml()).
writeHtml() يُنشئ تلقائياً أول صفحة عند عدم وجود صفحات.tests/Unit/Core/Concerns/DocumentTextOutputFontSubsettingAndBorderEdgeCaseTest.php (writeHtmlAutoCreatesFirstPageWhenNoPagesExist).
output() / save() / getPdfData() هي أفعال الإصدار (لا مرحلتين ⁨render/output⁩).src/Core/Concerns/HasOutput.php (output()، save()، getPdfData()tests/Unit/Core/Concerns/DocumentOutputDestinationDispatchTest.php.
وجهة الإخراج هي التعداد NextPDF\Contracts\OutputDestination (Inline/Download/File/String).src/Contracts/OutputDestination.php؛ tests/Unit/Core/Concerns/DocumentOutputDestinationDispatchTest.php.
تُكتَب خطوط ⁨HTML⁩ دائماً على هيئة برامج ⁨embedded/subset.⁩tests/Unit/Core/Concerns/DocumentTextOutputFontSubsettingAndBorderEdgeCaseTest.php (recordUsedCharactersAffectsFontSubsetting)؛ ⁨ISO 32000-2⁩ §9 (البيانات الأمامية citations:).
أدوات ضبط البيانات الوصفية المُصنَّفة (setTitle/setAuthor) تحلّ محلّ addInfo() حرّ الشكل.src/Core/Concerns/HasMetadata.php (setTitle()، setAuthor()tests/Unit/Core/Concerns/DocumentInfoMetadataSetterBaselineTest.php.
مسار ⁨HTML⁩ من النهاية إلى النهاية (السند القابل للتشغيل لهذا الدليل).examples/08-html-basic.php؛ مجموعة tests/Unit/Html/ في ⁨Core.⁩
المسافات البيضاء / فواصل الأسطر خاصة بالمحرك (فرق التخطيط).⁨CSS Text 3⁩ §6.5 (البيانات الأمامية citations: + المطابقة).

بما أن كلتا الحزمتين تبقيان مثبَّتتين حتى التحويل النهائي، فإن التراجع لموضع استدعاء غير مُحوَّل يعني إعادته إلى مسار ⁨Dompdf.⁩ بعد التحويل النهائي، يعني التراجع استعادة dompdf/dompdf وموضع الاستدعاء السابق من نظام التحكم في الإصدارات. لا يوجد نقل بيانات؛ فقط تغييرات في الشفرة.

راجع الأداء. يعني نموذج التمريرة الواحدة أن الانتقال لا يُدخِل تكلفة الاحتفاظ بشجرة إطارات. التغيير الرئيسي في تكلفة كل مستند هو الحلّ المُسبق للموارد من الخطوة 5، والذي يمكنك تخزينه مؤقتاً.

  • ترك render() في مكانه، مما يسبِّب خطأ طريقة غير معرَّفة فادحاً.
  • تمرير بايتات غير مُرمَّزة بـ ⁨UTF-8⁩ بعد إسقاط $encoding، مما يسبِّب نصاً مشوَّهاً صامتاً.
  • توقُّع إخراج مطابق على مستوى البايت أو البكسل من محركين مستقلين. لا يدّعي هذا الدليل أبداً بديلاً جاهزاً للإسقاط أو توافقاً بنسبة %100.
  • الاعتماد على قوالب enable_php، التي يجب إعادة هيكلتها وإزالتها.
  • معاملة مصفوفة دعم ⁨CSS⁩ على أنها استشارية. هي المرجع المعتمد للميزات المُتحقَّق منها بشأن ما يجب توقُّعه.