فایل PDF

تولید PDF در PHP

برای انجام بخش از پروژه ای تصمیم به پیاده سازی چاپ فاکتور با ساخت PDF در PHP گرفتم. با یک جستجوی ساده با تعداد بسیار زیادی از کتابخانه های تولید PDF در PHP مواجه خواهیم شد. اما این همه ماجرا نیست. متاسفانه بسیاری از این کتابخانه در پشتیبانی از Font های unicode و همچنین در پشتیبانی از زبان های RTL مشکل دارند.

اولین کتابخانه ای که برای ساخت PDF مورد استفاده قرار دادم FPDF بود که متاسفانه همان مشکلات مذکور را داشت. یعنی زمانی که کاراکتر های فارسی (unicode) وارد متن می شوند مشکلات شروع می شود. TCPDF هم مانند نمونه قبلی بود.
تا اینکه پس از بررسی فراوان به کتابخانه mPDF رسیدم.

با وجود اینکه mPDF در مقایسه با سایر کتابخانه حجم بسیار بیشتری را به خود اختصاص داده است، اما پشتیبانی عالی از زبان فارسی و فونت ها را بهمراه دارد. در ادامه سعی میکنم خیلی سریع استفاده از اون رو اینجا بیارم تا در صورت لزوم برای ساخت PDF مورد استفاده قرار بگیرد.

استفاده از mPDF :

برای نصب اون براحتی میتونید از composer استفاده کنید:

composer require mpdf/mpdf

سپس باید کدهای مربوط رو در فایلتون بار گذاری کنید :

 

require_once __DIR__ . '/vendor/autoload.php';

 

برای ساخت یک نمونه خیلی ساده از ساخت PDF کد زیر این کار رو انجام خواهد داد. به ob_clean دقت کنید. این خط جلوی خطای احتمالی رو خواهد گرفت.

$mpdf = new \Mpdf\Mpdf(); $mpdf->WriteHTML('<h1>Hello world!</h1>');
ob_clean();
$mpdf->Output("myPDF.pdf", \Mpdf\Output\Destination::DOWNLOAD);

 

در صورت نیاز به استفاده از یک فونت خاص باید قبل از هر کاری فونت رو در فولدر زیر کپی کنید. فونت باید فومت TTF داشته باشد.

 

/mpdf/mpdf/ttfonts 

سپس باید به فایل زیر رفته و استفاده از این کد رو در داخل اون فایل تعریف کتید. دقت داشته باشید این موضوع باید در بلاک fontdata باشد.

"IRANSans" => [
      'R' => "IRANSans.ttf",
      'B' => "IRANSans_Bold.ttf",
      'useOTL' => 0xFF,
      'useKashida' => 75,
],

بهتر هست که در صورتی که میخواید کل از فونت خاص استفاده کنید، در زمان ساخت object به شکل زیر عمل کنید.

$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'orientation' => 'P','default_font' => 'IRANSans']);

امیدوارم این مطلب براتون مفید بوده بوده و از هدر رفت وقتتون برای ساخت PDF در PHP جلوگیری بکند.

دیدگاه‌ها

۸ آذر ۱۴۰۰ - ۰۸:۴۶
محمد

سلام. ممنون از مطلبتون. حجم mpdf واقعا زیاده من با tcpdf همین مشکل رو داشتم و فونت bahij nazanin که میزدم فقط پرانتز نشون میداد و دیگه هیچی نشون نمی‌داد ولی مقدار اینکود رو false کردم درست شد:
$pdf->setFont($font,”,14,”,false);
پارامتر آخر رو باید false بدیم. شاید برای همه فونت ها درست نشه ولی برای این فونت کاملا درست شد.

۱۵ آذر ۱۴۰۰ - ۰۰:۳۶
مهدی حسینی

سلام
ممنونم از توضیح خوبتون. شاید به درد کسی بخوره

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.