مقدمة: لماذا HTML+CSS إلى PDF هو صداع (وكيفية حله)
تخيل: أنت تطور موقعًا باستخدام PHP، ويطلب منك العميل: "اجعل زر 'تنزيل PDF' يقوم بتصدير فواتير جميلة أو تقارير أو شهادات". تعتقد: "سهل! سأخذ قالب HTML، وأضيف أنماط CSS، وأحوله إلى PDF". لكن الواقع يكون أكثر تعقيدًا: الخطوط تتشوه، الجداول تنهار، وخاصية CSS flexbox تعمل بشكل متقطع.
على Stack Overflow، سؤال "How can I add HTML and CSS into PDF" حصل على آلاف المشاهدات. هذا يعني أن المشكلة مألوفة لدى كل مطور PHP تقريبًا. في هذه المقالة، سنستعرض ثلاث مكتبات شائعة — Dompdf وTCPDF وmPDF — ونوضح كيفية تحويل HTML مع CSS إلى PDF بشكل صحيح باستخدام PHP.
ستتعلم:
- أي مكتبة تختار لمهام مختلفة
- كيفية تضمين أنماط CSS (خارجية، مضمنة، @import)
- كيفية حل المشكلات النموذجية: السيريلية، الجداول، الصور
- كيفية كتابة كود عملي لتوليد PDF من HTML
لماذا لا يمكنك ببساطة حفظ HTML كـ PDF؟
المتصفحات تقوم بعرض HTML+CSS بشكل ممتاز، لكن مولدات PDF ليست متصفحات. إنها تستخدم محركات عرض خاصة بها تدعم ليس كل خصائص CSS. على سبيل المثال:
flexboxوgrid— لا تعمل في كل مكانborder-radius— مدعوم جزئيًا@media print— قد يتم تجاهله- الخطوط (خاصة السيريلية) — تتطلب تضمينًا
الخبر السار: مكتبات PHP الحديثة تتحسن باستمرار، ومع النهج الصحيح يمكنك الحصول على PDF يبدو تقريبًا كما في المتصفح.
نظرة عامة على مكتبات تحويل HTML+CSS إلى PDF في PHP
دعنا نستعرض ثلاث أدوات شائعة. لكل منها نقاط قوتها.
1. Dompdf
الإيجابيات: خفيف، سهل التثبيت عبر Composer، يدعم CSS 2.1 جيدًا وجزئيًا CSS3. مثالي للمستندات البسيطة — الفواتير، الإيصالات.
السلبيات: دعم ضعيف للتخطيطات المعقدة (flexbox, grid)، مشاكل مع كميات كبيرة من HTML.
2. TCPDF
الإيجابيات: مستقر، قوي، يدعم Unicode (السيريلية)، يعمل بدون مكتبات خارجية. مثالي لملفات PDF المعقدة مع الرسوم البيانية، رموز QR، الجداول متعددة الصفحات.
السلبيات: بناء جملة معقد، أنماط CSS تحتاج إلى تضمين يدوي، الكود يصبح ضخمًا.
3. mPDF
الإيجابيات: أفضل دعم لـ CSS (بما في ذلك @media وfloat وposition)، عمل ممتاز مع السيريلية، دعم الأنماط من الملفات الخارجية. يعتبر "الوسط الذهبي".
السلبيات: أثقل من Dompdf، قد يكون بطيئًا في المستندات الكبيرة.
توصية: للبدء السريع، استخدم Dompdf. للمشاريع الجادة — mPDF. TCPDF — إذا كنت بحاجة إلى أقصى مرونة ومستعد لكتابة المزيد من الكود.
مثال عملي: توليد PDF من HTML باستخدام Dompdf
دعنا نكتب كودًا حقيقيًا. سنقوم بتثبيت Dompdf عبر Composer:
composer require dompdf/dompdfالآن سننشئ سكريبت PHP يحول قالب HTML إلى PDF:
<?phprequire_once 'vendor/autoload.php';
use Dompdf\\Dompdf;use Dompdf\\Options;
// الإعدادات$options = new Options();$options->set('defaultFont', 'DejaVu Sans'); // دعم السيريلية$options->set('isRemoteEnabled', true); // السماح بالصور الخارجية
$dompdf = new Dompdf($options);
// قالب HTML$html = '<!DOCTYPE html><html><head> <style> body { font-family: DejaVu Sans, sans-serif; } .invoice { width: 100%; max-width: 80