PHP Developer
لاراول Pdf ، کاراکتر فارسی دغدغه نیست !
چند وقت پیش طی یک پروژه میخواستم از لاراول خروجی pdf تهیه کنم که یه سری ویژگی ها داشته باشه :
- حتما کاراکتر های فارسی رو ساپورت کنه .
- امکاناتی مثل شماره صفحه page number ، بریدن صفحه و رفتن به صفحه بعد page break و ... .
- پیاده سازی ظاهر اون سخت نباشه . راحت با Html , CSS بشه اوکیش کرد .
- ابعاد صفحه ی pdf و orientation اون قابل تنظیم باشه ( مثلا برای بارکد های محصولات و قطعات )
- و بتونم توش از blade استفاده کنم و بهش دیتا پاس بدم و ... .
اولین پکیجی که بهش رسیدم barryvdh/laravel-dompdf بود که خب نویسنده ی بنام و قوی ای داره اما بعد از استفاده از اون به مشکل کاراکتر های فارسی و ... خوردم که در کل بهتون پیشنهاد نمیکنم .

پیشنهاد من :
بنظر من بهترین پکیج میتونه niklasravnsborg/laravel-pdf باشه که به فکر کاراکترهای پیچیده فارسی و عربی و ... هم بوده و امکاناتی که بالا گفتم رو هم داره .
این پکیج با کمک mpdf ساخته شده . بعضی از attribute ها و دستورات css رو ممکنه نتونه بفهمه و توی خروجیتون به مشکل بخورید پس راهنمای اون رو هم یه مطالعه داشته باشید بد نیست . ولی بطور خلاصه بخوام بگم بهتره از فریمورک هایی مثل bootstrap و ... استفاده نکنید .
پکیج رو که نصب کنید طبق راهنما باید توی فایل کانفیگش آدرس فونت های فارسیتون رو بدید و به اون ها اسم بدید . یعنی کاری به css و فونت های اون نداره و باید توی کانفیگ هم اسم و هم آدرس فونت هاتون رو بدید . به عنوان مثال :
return [
'mode' => 'utf-8',
'format' => 'A4',
'author' => 'Farid',
'subject' => '',
'keywords' => '',
'creator' => 'Farid',
'display_mode' => 'fullpage',
'tempDir' => base_path('../temp/'),
'font_path' => base_path('public/fonts/'),
'font_data' => [
'fa' => [
'R' => 'fonts/ttf/IRANSansWeb(FaNum).ttf',
'B' => 'fonts/ttf/IRANSansWeb(FaNum)_Bold.ttf',
'useOTL' => 0xFF,
'useKashida' => 75,
],
'en' => [
'R' => 'Gothic/Century Gothic.ttf',
'B' => 'Gothic/GOTHICB.ttf',
]
]
];طبق کانفیگ بالا توی فایل های view blade که برای خروجی گرفتن میسازید باید توی cssتون اسم فونت رو 'fa' یا 'en' بزارید تا مشکلی پیش نیاد .
خیلی راحت میتونید برای همه ی صفحات داخل pdf هدر و فوتر تنظیم کنید . برای اینکار تگ های خاصی درست شده که زیر بهش اشاره کردم :
<style>
@page {
header: page-header;
footer: page-footer;
}
</style>
// for header :
<htmlpageheader name="page-header">
This is Header
</htmlpageheader>برخی امکانات :
برای نمایش شماره ی صفحه ای که داخلش هستید میتونید از {PAGENO} استفاده کنید و تعداد کل صفحاتتون {nb} هست . برای کات کردن صفحه و رفتن به صفحه ی بعد میتونید از تگ <pagebreak></pagebreak> استفاده کنید . نحوه ی فراخوانی توی controller یا job ها هم خیلی سادست یه مثالی میزنم که اکثر نیاز ها رو شامل بشه :
use niklasravnsborg\LaravelPdf\PdfWrapper;$pdf = new PdfWrapper();
$pdf->loadView('YOUR_BLADE_FILE',compact('YOUR_DATA'),[],[
'mode' => 'utf-8', 'format' => [WIDTH,HEIGHT]
])->save('ADDRESS/FILE_NAME.pdf');اگر توی job خواستید خروجی pdf بگیرید و به مشکل خوردید پست قبلی من رو بخونید :
امیدوارم دیگه دغدغه ی کاراکتر های فارسی توی خروجی هاتون نداشته باشید :)
مطلبی دیگر از این انتشارات
تعریف helper function های اختصاصی در لاراول
مطلبی دیگر از این انتشارات
۱۰ ویژگی مخفی لاراول که تا به امروز نمی دانستید
مطلبی دیگر از این انتشارات
لاراول، از صفر تا شصت