تحويل HTML وCSS إلى PDF في PHP: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا قد تحتاج إلى تحويل HTML إلى PDF؟

\n

تخيل هذا الموقف: لقد أنشأت فاتورة جميلة على موقعك، صممتها باستخدام HTML وأضفت إليها التنسيقات (CSS)، وكل شيء يبدو مثالياً. ولكن العميل يطلب إرسال الملف بصيغة PDF. أو ربما تحتاج إلى إنشاء تقرير يحتوي على رسوم بيانية وجداول وتنسيق معقد. إن إنشاء PDF يدوياً هو أمر من الماضي. الأسهل بكثير هو كتابة HTML+CSS، ثم تحويله برمجياً إلى PDF.

\n

السؤال «How Can I add HTML And CSS Into PDF» على موقع Stack Overflow حصد آلاف المشاهدات - وهذا يعني أن هذه المشكلة مهمة للعديد من المطورين. في هذه المقالة، سنستعرض ثلاث طرق شائعة للقيام بذلك باستخدام PHP، وسنقدم أمثلة على الكود، ونساعدك في اختيار أفضل أداة لمهمتك.

\n\n

مقارنة المكتبات: Dompdf وTCPDF وmPDF

\n

قبل كتابة الكود، دعنا نفهم ما هو الخيار الأنسب. في عالم PHP، هناك ثلاث مكتبات رئيسية لتحويل HTML إلى PDF:

\n
    \n
  • Dompdf - مكتبة خفيفة، تفهم CSS 2.1 جيداً وجزءاً من CSS 3. مثالية للمستندات البسيطة.
  • \n
  • TCPDF - مكتبة قوية ومستقرة، ولكنها تتطلب كوداً أكثر للتنسيقات المعقدة. ليست صديقة جداً لـ CSS.
  • \n
  • mPDF - الخيار الأفضل إذا كنت بحاجة لدعم CSS المعقد (مثل Flexbox والتدرجات اللونية والشفافية). إنها المكتبة الأكثر "صداقة لـ CSS".
  • \n
\n

في هذه المقالة، سنركز على mPDF باعتبارها الخيار الأكثر ملاءمة، ولكننا سنعرض أيضاً أمثلة باستخدام Dompdf للمقارنة.

\n\n

تثبيت المكتبات عبر Composer

\n

للبدء، سننشئ مشروعاً ونثبت التبعيات. افتح الطرفية (Terminal) ونفّذ الأمر التالي:

\n
composer require mpdf/mpdf
\n

إذا كنت تريد تجربة Dompdf:

\n
composer require dompdf/dompdf
\n

الآن، سننشئ ملفاً باسم generate_pdf.php في جذر المشروع ونبدأ في كتابة الكود.

\n\n

مثال 1: تحويل HTML بسيط إلى PDF باستخدام mPDF

\n

لنبدأ بأبسط مثال. لنفترض أن لدينا قالب فاتورة HTML:

\n
<!DOCTYPE html>\n<html>\n<head>\n    <style>\n        body { font-family: Arial, sans-serif; }\n        .invoice { max-width: 800px; margin: 0 auto; }\n        .header { background: #4CAF50; color: white; padding: 20px; }\n        .total { font-size: 24px; font-weight: bold; }\n    </style>\n</head>\n<body>\n    <div class="invoice">\n        <div class="header">فاتورة رقم 123 بتاريخ 01/03/2025</div>\n        <p>العميل: أحمد محمد</p>\n        <table border="1" width="100%">\n            <tr><th>الخدمة</th><th>السعر</th></tr>\n            <tr><td>تطوير موقع</td><td>50,000 ريال</td></tr>\n            <tr><td>تحسين محركات البحث (SEO)</td><td>15,000 ريال</td></tr>\n        </table>\n        <div class="total">المجموع: 65,000 ريال</div>\n    </div>\n</body>\n</html>
\n

الآن كود PHP لإنشاء PDF:

\n
<?php\nrequire_once __DIR__ . '/vendor/autoload.php';\n\n$html = file_get_contents('invoice.html'); // أو مجرد نص HTML\n\n$mpdf = new \\Mpdf\\Mpdf();\n$mpdf->WriteHTML($html);\n$mpdf->Output('invoice.pdf', 'I'); // 'I' لعرضه في المتصفح، 'D' للتحميل\n?>
\n

قم بتشغيل السكربت - وسيكون ملف PDF جاهزاً! لاحظ أن mPDF يلتقط تلقائياً CSS من داخل وسم <style>. هذا هو الجواب على سؤال "How Can I add HTML And CSS Into PDF" - فقط قم بتمرير HTML مع CSS إلى الدالة WriteHTML().

\n\n

مثال 2: العمل مع ملفات CSS خارجية

\n

غالباً ما يتم تخزين التنسيقات في ملفات منفصلة. يدعم mPDF ربط ملفات CSS الخارجية عبر الوسم <link>:

\n
<?php\n$html = '\n<!DOCTYPE html>\n<html>\n<head>\n    <link rel="stylesheet" type="text/css" href="style.css">\n</head>\n<body>\n    <h1>تقرير لشهر                

المدونات

توصيات الكتب