أثناء برمجة النظام المالي لمكتب المهند للترجمة، واجهنا تحدياً كلاسيكياً يواجهه كل مبرمج عربي: توليد فواتير بصيغة PDF تحتوي على نصوص عربية وإنكليزية مختلطة. المكتبات القياسية غالباً ما تفشل في عرض الخط العربي بشكل متصل، أو تظهره كرموز استفهام ????. الحل الذي اعتمدناه في Giturn كان بناء “Micro-service” مخصص لتوليد التقارير باستخدام مكتبة mPDF المعدلة، لضمان ظهور الفاتورة بشكل احترافي ودقيق.

في هذا الشرح، نستعرض الكود الخلفي (Backend) المسؤول عن هذه العملية.


الجزء الأول: إعداد المحرك والخطوط (Configuring mPDF)

(اكتب هذا الشرح قبل الكود) السر ليس في المكتبة فقط، بل في إعدادات الخطوط (Font Config). يجب توجيه المكتبة لاستخدام خطوط تدعم الـ Unicode العربي (مثل Cairo أو Lateef).

(انسخ هذا الكود وضعه في Code Block واختر اللغة PHP):

PHP

use Mpdf\Mpdf;

public function generateInvoice($invoiceData) {
    
    // 1. إعدادات الخطوط العربية لضمان الظهور الصحيح
    $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
    $fontDirs = $defaultConfig['fontDir'];

    $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
    $fontData = $defaultFontConfig['fontdata'];

    // 2. تهيئة المكتبة
    $mpdf = new Mpdf([
        'mode' => 'utf-8',
        'format' => 'A4',
        'fontDir' => array_merge($fontDirs, [
            public_path('fonts'), // مسار الخطوط الخاصة بك
        ]),
        'fontdata' => $fontData + [
            'cairo' => [
                'R' => 'Cairo-Regular.ttf',
                'B' => 'Cairo-Bold.ttf',
                'useOTL' => 0xFF, // تفعيل خصائص OpenType
                'useKashida' => 75, // للكشيدة العربية
            ]
        ],
        'default_font' => 'cairo' // جعل الخط العربي هو الافتراضي
    ]);
    
    // ... يتبع
}

الجزء الثاني: حقن البيانات وتوليد الملف (Data Injection)

(اكتب هذا الشرح قبل الكود الثاني) بدلاً من رسم الفاتورة برمجياً (مما يجعل التعديل صعباً)، قمنا بتصميم الفاتورة كملف HTML (View)، ثم نقوم بـ “حقن” بيانات العميل والدفع داخلها، وأخيراً تحويلها إلى PDF.

(انسخ هذا الكود وضعه في Code Block – PHP):

PHP

    // تابع للدالة السابقة...

    // 3. تجهيز البيانات القادمة من قاعدة البيانات
    $data = [
        'invoice_id' => $invoiceData->id,
        'client_name' => $invoiceData->client->name, // اسم العميل (عربي)
        'date' => date('Y-m-d'),
        'items' => $invoiceData->items, // مصفوفة الخدمات
        'total' => $invoiceData->total_amount
    ];

    // 4. تحويل ملف HTML (Blade View) إلى سترينج
    $html = view('invoices.template_v1', $data)->render();

    // 5. الكتابة داخل الـ PDF
    $mpdf->WriteHTML($html);

    // 6. تصدير الملف (إما تحميل مباشر أو حفظ في السرفر)
    // 'D' تعني Download
    return $mpdf->Output("Invoice_{$invoiceData->id}.pdf", 'D');
}

(خاتمة المقال)

النتيجة هي فاتورة رقمية بدقة عالية، تدعم العربية 100%، ويمكن أرشفتها أو إرسالها للعميل عبر واتساب بضغطة زر. في Giturn، نحن نهتم بهذه التفاصيل الدقيقة لأننا نعلم أن الفاتورة هي جزء من هوية العميل التجارية.

هل تحتاج لنظام محاسبي أو إداري مخصص لشركتك؟
[تواصل معنا لبناء نظامك الخاص]


اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *