سورس سافت | سورس پروژه | دانلود پروژه | سورس کد


م
ن
و
سورس سافت

ادامه مطلب

نحوه ایجاد یک فایل PDF در PHP



نحوه ایجاد یک فایل PDF در PHP

در این مقاله نحوه ایجاد فایل های PDF در PHP آموزش داده خواهد شد و از کتابخانه TCPDF برای ایجاد اسناد PDF به صورت برنامه نویسی استفاده خواهد شد. اگر روی وب سایتی کار می کنید که به کاربران امکان بارگیری یا چاپ اسناد مانند رسید سفارش، صورتحساب یا فاکتور را می دهد، چند گزینه دارید. شما می توانید سند را بصورت خطی در مرورگر نمایش دهید یا بارگیری را ارائه دهید. در مورد بارگیری اسناد، PDF یکی از بهترین فرمت ها است و در حفظ قالب بندی متن بسیار عالی است.

آموزش نحوه ایجاد یک فایل PDF در PHP

نحوه نصب کتابخانه TCPDF با Composer

با روشهای مختلفی می توانید کتابخانه TCPDF را بر روی سرور خود نصب کنید. کتابخانه TCPDF در Packagist و GitHub موجود است، بنابراین می توانید از Composer استفاده کنید یا آن را از GitHub کلون کنید. در این مقاله، نصب کتابخانه TCPDF با Composer آموزش داده می شود.

برای نصب کتابخانه TCPDF با Composer دستور زیر را اجرا کنید:

composer require tecnickcom/tcpdf$
Using version ^6.3 for tecnickcom/tcpdf
composer.json has been created/.
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
 Installing tecnickcom/tcpdf (6.3.5): Downloading (100%) - 
Writing lock file
Generating autoload files

پس از پایان نصب باید فایل autoload.php را در اسکریپت PHP خود اضافه کنید:

php?>
;”require “./vendor/autoload.php

<?

نحوه استفاده از کتابخانه TCPDF

در این مرحله، یک نمونه ایجاد می کنید که نحوه تولید فاکتور PDF را نشان می دهد. کتابخانه TCPDF بسیاری از قالب های آماده را ارائه می دهد که می توانید به عنوان مرجع برای تولید اسناد PDF استفاده کنید. بنابراین باید فاکتور را از ابتدا تولید کنید.

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

اکنون دو فایل ایجاد می کنید: customPdfGenerator.php و example.php. در فایل customPdfGenerator.php کلاس CustomPdfGenerator را ایجاد کنید، که کلاس اصلی TCPDF را گسترش می دهد و چند روش را لغو می کند. در فایل example.php نحوه استفاده از کلاس CustomPdfGenerator را خواهید دید.

کلاس CustomPdfGenerator

در مرحله اول باید فایل customPdfGenerator.php را با محتویات زیر ایجاد کنید.

php?>
class CustomPdfGenerator extends TCPDF 
}
()public function Header 
}
;'image_file = '/web/logo.png'$
;this->Image($image_file, 10, 3, 25, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false)$
;this->SetFont('helvetica', 'B', 20)$
;this->Cell(0, 15, '', 0, false, 'C', 0, '', 0, false, 'M', 'M')$
;this->Ln()$
;this->Cell(0, 15, 'Katie A Falk', 0, false, 'R', 0, '', 0, false, 'M', 'M')$
{

()public function Footer 
}
;this->SetY(-15)$
;this->SetFont('helvetica', 'I', 15)$
;this->Cell(0, 10, 'Thank you for your business!', 0, false, 'C', 0, '', 0, false, 'T', 'M')$
{

public function printTable($header, $data)
}
;this->SetFillColor(0, 0, 0)$
;this->SetTextColor(255)$
;this->SetDrawColor(128, 0, 0)$
;this->SetLineWidth(0.3)$
;this->SetFont('', 'B', 12)$

;w = array(110, 17, 25, 30)$
;num_headers = count($header)$
} for($i = 0; $i < $num_headers; ++$i) 
;this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1)$
{
;()this->Ln$

 Color and font restoration //
;this->SetFillColor(224, 235, 255)$
;this->SetTextColor(0)$
;this->SetFont('')$

table data //
;0 = fill$
;0 = total$

} foreach($data as $row)
;this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill)$
;this->Cell($w[1], 6, $row[1], 'LR', 0, 'R', $fill)$
;this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill)$
;(this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill$
;()this->Ln$
;fill=!$fill$
;total+=$row[3]$
{

;this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill)$
;this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill)$
;this->Cell($w[2], 6, '', 'LR', 0, 'L', $fill)$
;this->Cell($w[3], 6, '', 'LR', 0, 'R', $fill)$
;()this->Ln$

;this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill)$
;this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill)$
;this->Cell($w[2], 6, 'TOTAL:', 'LR', 0, 'L', $fill)$
;this->Cell($w[3], 6, $total, 'LR', 0, 'R', $fill)$
;()this->Ln$

;this->Cell(array_sum($w), 0, '', 'T')$
}
}

بیاد داشته باشید که کلاس CustomPdfGenerator کلاس TCPDF را گسترش می دهد، بنابراین می توانید از همه روشهای مفید ارائه شده توسط کلاس TCPDF برای قالب بندی و تولید اسناد PDF استفاده کنید.

هدف از ایجاد کلاس خود به جای استفاده مستقیم از کلاس TCPDF عدم استفاده از اجزای داخلی هدر و پاورقی است.

روش هدر

بهتر است در هدر لوگوی شرکت را به همراه نام مالک نمایش دهید. ابتدا روش هدر را بررسی کنید تا نحوه عملکرد آن را درک کنید.

()public function Header
}
;'image_file = '/web/logo.png$
;this->Image($image_file, 10, 3, 25, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false)$
;this->SetFont('helvetica', 'B', 20)$
;this->Cell(0, 15, '', 0, false, 'C', 0, '', 0, false, 'M', 'M')$
;()this->Ln$
;this->Cell(0, 15, 'Katie A Falk', 0, false, 'R', 0, '', 0, false, 'M', 'M')$
{

در مرحله اول از روش Image برای ترسیم لوگوی شرکت در سمت چپ استفاده کنید. شما باید یک مسیر مطلق از تصویر لوگو را به روش Image منتقل کنید. در مرحله بعد از روش SetFont برای تنظیم font-family و font-size متن استفاده کنید. در نهایت از روش Cell برای پرینت نام مالک در سمت راست استفاده کنید.

هدر پس از اتمام تنظیمات بالا به شکل زیر دیده می شود:

 

header-method

 

روش Footer

دراین روش برخی از متن های ثابت نمایش داده می شود، بنابراین روش Footer بسیار ساده است.

()public function Footer
}
;this->SetY(-15)$
;this->SetFont(‘helvetica’, ‘I’, 15)$
;this->Cell(0, 10, ‘Thank you for your business!’, 0, false, ‘C’, 0, ”, 0, false, ‘T’, ‘M’)$
{

قسمت Footer به این شکل دیده خواهد بود:

 

footer-section

 

در نهایت روش printTable وجود دارد که مربوط به کلاس TCPDF نیست. در عوض، این روش ابزار سفارشی است که از آن برای ترسیم جدول برای نمایش اطلاعات مورد استفاده می کنید.

بنابراین این کلاس CustomPdfGenerator است. در بخش بعدی نحوه استفاده از آن را در کنار چند روش دیگر برای ایجاد یک فاکتور PDF کامل خواهید دید.

فایل example.php

در قسمت قبل کلاس بسته بندی CustomPdfGenerator را ایجاد کردید، که می توانید از آن برای ایجاد فایل های PDF با هدر و footer سفارشی استفاده کنید. در این بخش نحوه استفاده از آن نشان داده خواهد شد.

اکنون باید فایل example.php را با محتویات زیر ایجاد کنید.

php?>
;"require "./vendor/autoload.php
;"require "./customPdfGenerator.php

;pdf = new CustomPdfGenerator(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false)$
;pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED)$
;pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT)$
;pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM)$
;pdf->setImageScale(PDF_IMAGE_SCALE_RATIO)$
;pdf->setFontSubsetting(true)$
;pdf->SetFont('dejavusans', '', 12, '', true)$

 start a new page //
;()pdf->AddPage$

date and invoice no //
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$
;pdf->writeHTML("<b>DATE:</b> 01/01/2021")$
;pdf->writeHTML("<b>INVOICE#</b>12")$
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$

address //
;pdf->writeHTML("84 Norton Street,")$
;pdf->writeHTML("NORMANHURST,")$
;pdf->writeHTML("New South Wales, 2076")$
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$

 bill to //
;pdf->writeHTML("<b>BILL TO:</b>", true, false, false, false, 'R')$
;pdf->writeHTML("22 South Molle Boulevard,", true, false, false, false, 'R')$
;pdf->writeHTML("KOOROOMOOL,", true, false, false, false, 'R')$
;pdf->writeHTML("Queensland, 4854", true, false, false, false, 'R')$
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$

 invoice table starts here //
;header = array('DESCRIPTION', 'UNITS', 'RATE $', 'AMOUNT')$
)data = array$
,array('Item #1','1','100','100')
array('Item #2','2','200','400')
;(
;pdf->printTable($header, $data)$
;pdf->Ln()$

comments //
;pdf->SetFont('', '', 12)$
;pdf->writeHTML("<b>OTHER COMMENTS:</b>")$
;pdf->writeHTML("Method of payment: <i>PAYPAL</i>")$
;pdf->writeHTML("PayPal ID: <i>[email protected]")$
;pdf->Write(0, "\n\n\n", '', 0, 'C', true, 0, false, false, 0)$
;pdf->writeHTML("If you have any questions about this invoice, please contact:", true, false, false, false, 'C')$
;pdf->writeHTML("Katie A Falk, (07) 4050 2235, [email protected]", true, false, false, false, 'C')$

 save pdf file //
;pdf->Output(__DIR__ . '/invoice#12.pdf', 'F')$

در مرحله اول فایل autoload.php را برای اطمینان از بارگیری خودکار کلاس TCPDF قرار دهید. در مرحله بعد فایل customPdfGenerator.php را برای بارگیری کلاس سفارشی خود قرار دهید. همچنین چند روش برای انجام تنظیمات پیش فرض قبل از شروع نوشتن در فایل PDF فراخوان می شود.

;pdf = new CustomPdfGenerator(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false)$
;pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED)$
;pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT)$
;pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM)$
;pdf->setImageScale(PDF_IMAGE_SCALE_RATIO)$
;pdf->setFontSubsetting(true)$
;pdf->SetFont('dejavusans', '', 12, '', true)$

ثابت های استفاده شده در قطعه بالا قبلاً در فایل tcpdf_autoconfig.php تعریف شده اند. برای لغو یکی از این ثابت ها فقط باید آن را در اسکریپت خود تعریف کنید و کتابخانه TCPDF از مقادیر شما استفاده می کند. به عنوان مثال مقدار پیش فرض ثابت PDF_PAGE_ORIENTATION عمودی است و اگر می خواهید آن را به افقی تغییر دهید، فقط باید تعریف ;(‘PDF_PAGE_ORIENTATION’, ‘L’) را در اسکریپت خود وارد کنید.

در مرحله بعد، یک قطعه مهم وجود دارد که روش AddPage را فرا می خواند که در واقع یک صفحه جدیدی در سند PDF اضافه می کند.

start a new page //
;()pdf->AddPage$

اکنون صفحه ای را اضافه کنید و سپس می توانید نوشتن را در این صفحه شروع کنید.

در مرحله بعد از روشهای Write و writeHTML برای چاپ تاریخ و شماره فاکتور در سمت چپ استفاده کنید.

date and invoice no //
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$
;pdf->writeHTML("<b>DATE:</b> 01/01/2021")$
;pdf->writeHTML("<b>INVOICE#</b>12")$
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$

روش Write متن را از موقعیت فعلی پرینت می کند و می توانید از آن برای چاپ متن ساده استفاده کنید. از سوی دیگر روش writeHTML به شما امکان می دهد قالب بندی HTML را در متن حفظ کنید. اگرچه روش writeHTML پشتیبانی از قالب بندی محدود HTML را فراهم می دهد اما تمام برچسب های HTML را که اغلب در توسعه روزمره مورد استفاده قرار می گیرند، پوشش می دهد.

باید آدرس و صورت حساب را با استفاده از روش writeHTML چاپ کنید.

 address //
;pdf->writeHTML("84 Norton Street,")$
;pdf->writeHTML("NORMANHURST,")$
;pdf->writeHTML("New South Wales, 2076")$
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$

bill to //
;pdf->writeHTML("<b>BILL TO:</b>", true, false, false, false, 'R')$
;pdf->writeHTML("22 South Molle Boulevard,", true, false, false, false, 'R')$
;pdf->writeHTML("KOOROOMOOL,", true, false, false, false, 'R')$
;pdf->writeHTML("Queensland, 4854", true, false, false, false, 'R')$
;pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0)$

به طور پیش فرض، روش writeHTML متن را در سمت چپ چاپ می کند. اگر می خواهید متن right-aligned را چاپ کنید، می توانید R را به عنوان آخرین آرگومان روش writeHTML ارسال کنید. در این مقاله آدرس صورتحساب را تراز راست نمایش داده می شود.

در صفحه زیر مواردی که تاکنون ساختید را مشاهده می کنید.

 

the.example.php-file

 

در مرحله بعد قطعه ای وجود دارد که وظیفه سنگین چاپ جدول اطلاعات لیست را بر عهده دارد.

 invoice table starts here //
;header = array('DESCRIPTION', 'UNITS', 'RATE $', 'AMOUNT')$
)data = array$
,array('Item #1','1','100','100')
array('Item #2','2','200','400')
;(
;pdf->printTable($header, $data)$
;()pdf->Ln$

اکنون باید کد متد printTable را وارد کنید.

public function printTable($header, $data)
{
;this->SetFillColor(0, 0, 0)$
;this->SetTextColor(255)$
;this->SetDrawColor(128, 0, 0)$
;this->SetLineWidth(0.3)$
;this->SetFont('', 'B', 12)$

;w = array(110, 17, 25, 30)$
;num_headers = count($header)$
} for($i = 0; $i < $num_headers; ++$i)
;this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1)$
{
;()this->Ln$

Color and font restoration //
;this->SetFillColor(224, 235, 255)$
;this->SetTextColor(0)$
;this->SetFont('')$

table data //
;0 = fill$
;0 = total$

} foreach($data as $row)
;this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill)$
;this->Cell($w[1], 6, $row[1], 'LR', 0, 'R', $fill)$
;this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill)$
;this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill)$
;this->Ln()$
;fill=!$fill$
;total+=$row[3]$
{

;this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill)$
;this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill)$
;this->Cell($w[2], 6, '', 'LR', 0, 'L', $fill)$
;this->Cell($w[3], 6, '', 'LR', 0, 'R', $fill)$
;this->Ln()$

;this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill)$
;this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill)$
;this->Cell($w[2], 6, 'TOTAL:', 'LR', 0, 'L', $fill)$
;this->Cell($w[3], 6, $total, 'LR', 0, 'R', $fill)$
;this->Ln()$

;this->Cell(array_sum($w), 0, '', 'T')$
{

قبل از اینکه چاپ سطر هدر جدول فاکتور را شروع کنید، ابتدا چند متد را برای تنظیم اندازه فونت، رنگ پر کردن، عرض خط و رنگ متن فراخوانی کنید. سپس، آرایه header$ را حلقه کرده و عنوان های جدول را با استفاده از روش Cell چاپ می کنید.

روش Cell به شما امکان می دهد یک سلول (ناحیه مستطیل شکل) با حاشیه های اختیاری، رنگ پس زمینه و ردیف کاراکتر پرینت کنید. همچنین می توانید تراز بودن متن چاپ شده در سلول را مشخص کنید. بنابراین، روشCell کاندید مناسبی برای ساختن میز است.

پس از چاپ عناوین عنوان جدول، آرایه data$ را حلقه کرده و آن را چاپ می کنید تا کل جدول کامل شود. در نهایت چندین بار روش Cell را فراخوانی کنید تا مقدار کل را چاپ کنید.

یک پیش نمایش سریع از جدول باید به این شکل باشد:

 

pdf-file-in-php-table

 

در پایان فاکتور چند نظر و اطلاعات تماس را مانند قطعه زیر پرینت کنید.

 comments //
;pdf->SetFont('', '', 12)$
;pdf->writeHTML("<b>OTHER COMMENTS:</b>")$
;pdf->writeHTML("Method of payment: <i>PAYPAL</i>")$
;pdf->writeHTML("PayPal ID: <i>[email protected]")$
;pdf->Write(0, "\n\n\n", '', 0, 'C', true, 0, false, false, 0)$
;pdf->writeHTML("If you have any questions about this invoice, please contact:", true, false, false, false, 'C')$
;pdf->writeHTML("Katie A Falk, (07) 4050 2235, [email protected]", true, false, false, false, 'C')$

در نهایت از روش Output برای ذخیره فایل PDF بر روی دیسک استفاده کنید. اگر نمی خواهید فایل PDF را روی دیسک ذخیره کنید و می خواهید فقط آن را به مرورگر ارسال کنید، باید از I در آرگومان دوم روش Output استفاده کنید.

فایل example.php را اجرا کنید. دقت کنید که باید فایل PDF را همانطور که در تصویر زیر نشان داده شده است، تولید کند.

 

generate-pdf-file-in-php-full-preview

 

نتیجه گیری

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


لینک کوتاه مطلب :
https://sourcesoft.ir/?p=3294

برچسب‌ها :
, ,

درباره نویسنده

Ayda Zabihi 11 نوشته در سورس سافت دارد . مشاهده تمام نوشته های

دیدگاه ها


دیدگاهتان را بنویسید

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

logo-samandehi