26 فروردین 1401
برای تولید فایل پیدیاف در زبان php کتابخانههای زیادی را آزمودهام که در این میان TCPDF را مناسبتر میدانم به دلایل زیر:
پشتیبانی از زبان فارسی و امکان راست به چپ
استفاده از css و فونتهای دلخواه
افزودن تصاویر با فرمتهای رایج
نمایش بارکدهای یک بعدی و دو بعدی
مدیریت هدر، پاورقی و شماره صفحه
خروجی مناسب جهت گزارشگیری و چاپ
و البته سایر امکانات بسیار آن!
برای شروع کار نیاز دارید بسته TCPDF را از گیتهاب یا «دانلود» همین مقاله دریافت کرده و مسیر زیر را به پروژه خود اضافه کنید.
<?php require_once('tcpdf.php'); ?>
1) مثال «Hello World»
2) افزودن فونت
3) نمایش Html و افزودن Style
4) تنظیمات Header و Footer
5) نمایش بارکد و qrcode
6) نمایش تصویر
1) مثال «Hello World»: در خطوط زیر سادهترین شکل استفاده از این کتابخانه - یعنی ایجاد فایل PDF با متن «Hello World» - را نشان داده و پس از آن به بررسی قابلیتهای پیشرفتهتر خواهیم پرداخت. برای دیدن نتیجه و خروجی مثالها به بخش «دمو»ی این مقاله مراجعه کنید.
<?php require_once('tcpdf.php'); $pdf = new TCPDF(); $pdf->AddPage(); $res = "Hello World"; $pdf->writeHTML($res); $pdf->Output('output.pdf', 'I'); ?>
2) افزودن فونت: برای تغییر فونت هر قسمت از فایل پیدیاف و یا نمایش زبان فارسی، ابتدا لازم است مسیر فونت دلخواه را به برنامه معرفی و توسط SetFont آن را در پروژه خود تنظیم کنیم:
<?php require_once('tcpdf.php'); $pdf = new TCPDF(); $pdf->AddPage(); $font_path = 'fonts/titr.ttf'; //مسیر فونت $font_size = 16; //اندازه فونت $fontname = TCPDF_FONTS::addTTFfont($font_path, 'TrueTypeUnicode'); $pdf->SetFont($fontname, '', $font_size, '', false); $res = "سلام دنیا"; $pdf->writeHTML($res); $pdf->Output('output.pdf', 'I'); ?>
3) نمایش Html و افزودن Style: مثال زیر را بررسی میکنیم و به عبارت ساده Hello World استایل میدهیم. همانطور که در خطوط زیر خواهید دید در متغیر $res کلاس myClass را تعریف کرده و سپس عبارت خود را به نمایش در میآوریم:
<?php require_once('tcpdf.php'); $pdf = new TCPDF(); $pdf->AddPage(); $font_path = 'fonts/titr.ttf'; $font_size = 16; $fontname = TCPDF_FONTS::addTTFfont($font_path, 'TrueTypeUnicode'); $pdf->SetFont($fontname, '', $font_size, '', false); $res = " <style> .myClass { color: #FF0000; font-family: 'titr'; font-size: 35pt; text-align:right; direction:rtl; } img {width:100px;} </style> <div class="myClass"> <img src=\"https://abdollahkaviani.ir/img/ak.png\" /> <br/>سلام دنیا Hello World <div>"; $pdf->writeHTML($res); $pdf->Output('output.pdf', 'I'); ?>
4) تنظیمات Header و Footer: به کمک دستورات $pdf->SetPrintHeader(false); و $pdf->SetPrintFooter(false); میتوان هدر و فوتر - که به طور پیشفرض نمایش داده میشود - را مخفی کرد اما برای اینکه بتوانیم هدر، فوتر و شماره صفحه مورد نظر خود را داشته باشیم دستورات زیر را پیاده میکنیم:
<?php require_once('tcpdf.php'); class MYPDF extends TCPDF { public function Header() { $fontname = TCPDF_FONTS::addTTFfont('fonts/titr.ttf', 'TrueTypeUnicode'); $this->SetFont($fontname, '', 16, '', false); $header = " <style> .classHeader {border-bottom:1px solid #999;font-family: 'titr';color:#ff0000} </style> <table class=\"classHeader\"> <tr> <td>ساخت خروجی PDF به کمک PHP</td> </tr> </table>"; $this->setRTL(true); $this->writeHTMLCell(0, 10, 10, 10, $header); } public function Footer() { $footer = " <style> .classFooter {border-top:1px solid #999;text-align:left} </style> <table class=\"classFooter\"> <tr> <td>".$this->getAliasNumPage()."/".$this->getAliasNbPages()."</td> </tr> </table>"; $this->writeHTMLCell(0, 10, 10, 285, $footer); } } $pdf = new MYPDF(); $fontname = TCPDF_FONTS::addTTFfont('fonts/vazir.ttf', 'TrueTypeUnicode'); $pdf->SetFont($fontname, '', 11, '', false); $res = " <style> .table {color: #003300;font-family: 'vazir';font-size: 12pt;} th {background-color:#4682B4;color:#fff} td {border:1px solid #888;} </style> <table class=\"table\"> <thead> <tr> <th>ردیف</th> <th>شرح</th> <th>مبلغ</th> <th>تعداد</th> </tr> </thead> <tbody>"; for($i=1;$i<=50;$i++) $res .= " <tr> <td>".$i."</td> <td>شرح</td> <td>2000</td> <td>1</td> </tr>"; $res .= " </tbody> </table>"; $pdf->SetMargins(10, 34, 10); $pdf->SetAutoPageBreak(TRUE, 30); $pdf->AddPage('P', 'A4'); $pdf->setRTL(true); $pdf->WriteHTML($res); $pdf->Output('output.pdf', 'I'); ?>
در بالا همانطور که ملاحظه میفرمایید یک کلاس به نام MYPDF نوشتهایم. این کلاس شامل دو تابع Header و Footer است و همانند مثالهای قبلی میتوان در آنها فونت و استایل تعریف کرد و سپس توسط دستور WriteHTML یا writeHTMLCell به نمایش درآورد.
دو تابع getAliasNumPage و getAliasNbPages به ترتیب شماره صفحه جاری و تعداد کل صفحات را بر میگردانند.
گام بعدی ما این است که به جای تولید آبجکت از TCPDF یک آبجکت از کلاسMYPDF بسازیم.
دستور SetMargins: حاشیه صفحه را تعیین میکند؛ به ترتیب چپ، بالا و راست.
دستور SetAutoPageBreak: مشخص میکنیم باقیمانده متن در چه فاصلهای از انتهای صفحه به صفحه بعد منتقل شود.
دستور AddPage: در این قسمت میتوانیم مشخص کرد که صفحه خروجی ما چه اندازهای داشته باشد؛ مثلا A4 یا A5 باشد و همینطور به صورت عمودی P یا افقی L ساخته شود.
دستور setRTL: این فرمان هم تعیین میکند که صفحه آیا راست به چپ باشد یا خیر.
5) نمایش بارکد و qrcode: نمایش بارکد خطی و دو بعدی نیز بسیار آسان و مطابق خطوط زیر است. همانطور که ملاحظه میکنید استایل، ابعاد، موقعیت و استاندارد بارکد و qrcode توسط توابع write1DBarcode (جهت ساخت بارکد یک بعدی) و write2DBarcode (جهت ساخت بارکد دو بعدی) قابل تعیین است:
<?php require_once('tcpdf.php'); $pdf = new TCPDF(); $pdf->AddPage('L', 'A5'); //1D barcode $style = array( 'position' => '', 'align' => 'C', 'stretch' => false, 'fitwidth' => true, 'cellfitalign' => '', 'border' => true, 'hpadding' => 'auto', 'vpadding' => 'auto', 'fgcolor' => array(0,0,0), 'bgcolor' => false, 'text' => true, 'font' => 'helvetica', 'fontsize' => 8, 'stretchtext' => 4 ); $pdf->write1DBarcode('1D Barcode', 'C39', '', 30, '', 35, 0.4, $style); //2D barcode $style = array( 'border' => 1, 'vpadding' => 'auto', 'hpadding' => 'auto', 'fgcolor' => array(0,0,0), 'bgcolor' => false ); $pdf->write2DBarcode('https://abdollahkaviani.ir', 'QRCODE,L', 115, 30, 35, 35, $style); $pdf->Output('output.pdf', 'I'); ?>
6) نمایش تصویر: چنانچه تمایل نداشته باشید تصاویر را مانند مثال شماره 3 و تگ <img> به اسناد خود اضافه کنید، به کمک تابع Image میتوان تصویر را مستقیما با ابعاد و موقعیت مورد نظر درون صفحه بارگذاری کرد:
<?php require_once('tcpdf.php'); $pdf = new TCPDF(); $pdf->AddPage(); $pdf->Image('images/15.jpg', 15, 15, 180, 160, 'JPG', 'https://abdollahkaviani.ir'); $pdf->Output('output.pdf', 'I'); ?>
در پایان باید گفت در این مقاله تنها به معرفی توابع ضروری کتابخانه و کلیت کار با آن بسنده کردهام و فایل زیپ شدهای که در قسمت دانلود قرار دادهام شامل کتابخانه TCPDF و تمامی مثالهای فوق است. کافی است آن را از حالت فشرده خارج کرده و فایل index.php را در مرورگر خود باز کنید.