میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

کتابخانه‌ی mPDF در PHP

یکی از چیزهایی که برای هر برنامه‌نویس تحت وب لازم است، دانستن نحوه‌ی گرفتن خروجی PDF از داده‌های یک صفحه HTML است. یکی از بهترین کتابخانه های گرفتن خروجی PDF کتابخانه mPdf است

برای گرفتن خروجی PDF، کتابخانه‌های زیادی وجود دارد اما هر کدام مشکلاتی دارند. مثلاً یکی UTF-8 را پشتیبانی نمی‌کند، یکی رایگان نیست، یکی HTML را پشتیبانی نمی‌کند و باید یاد بگیرید خودتان با کدهای خاص آن کتابخانه خروجی‌ای بگیرید که شبیه به HTML باشد (که طبیعتاً کار طاقت‌فرسایی است!)، یکی خروجی می‌گیرد اما حروف را جدا می‌نویسد، یکی تعریف فونت در آن غیرممکن یا سخت است و خلاصه هر کدام مشکلی دارند.

اما  کتابخانه mPDF که به خصوص در نسخه آخرش بسیار عالی عمل می‌کند و تمام مشکلات بالا را رفع کرده است.

کتابخانه‌ی mPDF در PHP به روش‌های متنوعی می‌تواند pdf بسازد و دست شما برای هر کاری باز است.


نصب

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

composer require mpdf/mpdf

پس از نصب، باید کتابخانه را در پرو‌ژه‌ی خود لود کنید که اگر از فریمورک استفاده می‌کنید با معرفی کتابخانه در autoload فریمورک خود و اگر از کد ساده‌ی php استفاده می‌کنید با include کردن فایل mpdf.php در پروژه‌ی خود این کار انجام می‌شود.

 

نصب

آخرین نسخه‌ی ;کتابخانه mpdf ‌را دانلود و در یک پوشه از پروژه خود Extract کنید. (مثلاً در پوشه include/pdf)

 


 

کار با آن بسیار ساده است:

توجه: در صفحه‌ای که می‌خواهید خروجی PDF بگیرید، هیچ چیزی نباید echo شده باشد.

محتوایی که قرار است در PDF دیده شود را در یک متغیر مثلاً به نام html$ بریزید. (مثلاً ما در مثال زیر یک خط کد HTML را در این متغیر ریخته‌ایم)

از قطعه کد زیر برای تولید PDF استفاده کنید! همین!

$html='<p align="center">به نام خدا</p>';
include('include/pdf/mpdf.php');
$mpdf=new mPDF('utf-8');
$html=iconv("utf-8","UTF-8//IGNORE",$html);
$mpdf=new mPDF('ar','A4','','',5,5,5,5,16,13);
$mpdf->SetDirectionality('rtl');
$mpdf->WriteHTML($html);
$mpdf->Output();
?>

– نکته‌ای که لازم است بدانید این است که اعداد ۵، فاصله دور صفحه را مشخص می‌کند. (margin)

– فراموش نکنید که این کتابخانه و همه کتابخانه‌های مشابه تگ‌های محدودی را پشتیبانی می‌کنند. تگ‌هایی که mPDF پشتیبانی می‌کند اما مجموعاً نگرانی خاصی وجود ندارد.

برای مشاهده‌ی تمام پارامتر‌ها این صفحه از داکیومنت را ببینید.


تغییر فونت در mpdf

برای تغییر فونت پیش‌فرض به فونت دلخواهتان، روالی که در این مطلب آمده را طی کنید. یعنی:

۱- فونت دلخواهتان را (مثلاً irsans.ttf) به پوشه ttfonts مربوط به mpdf آپلود کنید.

۲- فایل config_fonts.php را باز کنید و دنبال ‎$this->fontdata بگردید و آخرین فونت موجود در آرایه را تکثیر کنید و نام فونت را به iransans و نام فایل آن ‌را به irsans.ttf تغییر دهید. یعنی خواهید داشت:

    “iransans” => array(
‘R’ => “irsans.ttf”,
‘useOTL’ => 0xFF,
),

۳- در کدهای html خود با CSS از فونتی که نام برده‌اید استفاده کنید. مثلاً اگر می‌خواهید یک div فونت iransans به خود بگیرد، در style آن بنویسید:

<div style=”font-family:iransans”>…

اگر می‌خواهید کل صفحه تغییر کند، اگر از تگ body استفاده کرده‌اید، می‌توانید در بین تگ head بنویسید:

<style>
body {font-family: iransans;}
</style>


header, footer دلخواه

اگر فوتر و هدر را بخواهید جداگانه تعریف کنید می‌توانید از این دستورات استفاده کنید:

$mpdf->SetHTMLHeader($header);
$mpdf->SetHTMLFooter($footer);

البته ساختن هدر و فوتر خیلی جزئیات و توانایی‌های بیشتری دارد که برای اطلاع بیشتر می‌توانید این لینک از داکیومنت را مشاهده کنید.

اگر از فایل css استفاده می‌کنید باید جداگانه آن را لود کنید. برای نمونه ما از دو فایل css استفاده کردیم:

$stylesheet1 = file_get_contents( 'style1.css');
$stylesheet2 = file_get_contents('style2.css');
$mpdf->WriteHTML($stylesheet1, 1);    // The parameter 1 tells that this is css/style only and no body/html/text
$mpdf->WriteHTML($stylesheet2, 1);

که شکل نهایی کد شما چیزی شبیه این خواهد شد:

'$mpdf = new Mpdf([
    'mode' => 'utf-8', 
        'orientation' => 'P',
        ]);
        $mpdf->WriteHTML('<h1>Hello world!</h1>');
        $mpdf->SetHTMLHeader('<h1>Header</h1>');    
        $mpdf->SetHTMLFooter('<h1>Footer</h1>');
        $mpdf->Output('name.pdf');        // نام دلخواه شما را به فایل می‌دهد و آن را دانلود می‌کند

اگر خطا گرفتید این را قبل از output بگذارید:

ob_clean();
$mpdf->Output();

 

استفاده در فریمورک (برای نمونه لاراول)

در کنترلر مورد نظر این کدها را قرار می‌دهیم: (از پارامترهای اختیاری فاکتور گرفتم که زیاد اینجا شلوغ نشود و اصل مطلب گم نشود)

$mpdf = new Mpdf();
$mpdf->WriteHTML('some text or htm code');
$mpdf->Output('fileName.pdf'); 

می‌توانیم یک متغیر که حاوی کدهای صفحه‌ی ما هست را برای فانکشن WriteHTML ارسال کنیم:

$mpdf = new Mpdf();
 $html = '<p>$foo</p>
                <p>$bar</p>';
 $mpdf->WriteHTML($html);
 $mpdf->Output('fileNamee.pdf'); 

می‌توانیم حتا یک view برای آن ارسال کنیم:

$mpdf = new Mpdf();
 $html = view('page')->with('foo', $foo);
 $mpdf->WriteHTML($html);
 $mpdf->Output('fileNamee.pdf'); 

فونت فارسی

و اما یکی از مهم‌ترین مرحله‌های کار با کتابخانه mpdf، یعنی تنظیم فونت فارسی.

همه‌ی فونت‌ها را تست کرده‌ام بهترین نتیجه را با فونت میترا و البته با همین دو فونتی که آپلود می‌کنم گرفته‌ام: (ممکن است شما هم در کامپیوتر خود میترا داشته باشید ولی باید استاندارد و سالم باشد پس اگر خروجی شما خراب است این نسخه از فونت‌ها را حتما تست کنید)

بعد از دانلود در این فولدر کپی کنید:

.../mpdf/mpdf/ttfonts

و در فایل زیر تغییرات زیر را اعمال کنید:

...\mpdf\mpdf\src\Config\FontVariables.php
-----------------------------------------------------------------------------------------
'fontdata' => [
"dejavusanscondensed" => [
   'R' => "DejaVuSansCondensed.ttf",
   'B' => "DejaVuSansCondensed-Bold.ttf",
   'I' => "DejaVuSansCondensed-Oblique.ttf",
   'BI' => "DejaVuSansCondensed-BoldOblique.ttf",
   'useOTL' => 0xFF,
   'useKashida' => 75,
],

//////////////////////////////////
.... // many lines until last array
/////////////////////////////////

// yo add this section
"mitra" => [
    'R' => "IRMitra.ttf", //regular
    'B' => "IRMitraBold.ttf", //bold
    'useOTL' => 0xFF,
    'useKashida' => 75,
],
// until here

حالا برای استفاده از فونت خود باید هنگام استایل دادن به صفحه‌ی pdf فونت را به نام mitra به متن خود اعمال کنید.

 


امیدواریم آموزش کتابخانه‌ی mPDF در PHP نیز برای شما مفید واقع شده باشد .برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟