برای ساخت PDF فارسی چند تا کتابخونه خوب برای PHP وجود داره dompdf ,TCPDF و mPDF
من هر سه رو تست کردم و بی شک mPDF چه در پشتیانی زبان فارسی چه در سرعت و کارایی سرامد تر از بقیه هست.
ساخت PDF فارسی با mPDF
برای شروع یک پوشه ایجاد کنید بعد mPDF رو با Composer اضافه میکنیم
1 |
composer require mpdf/mpdf:6.1 |
فایل index.php با محتویات زیر رو درست میکنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php require_once __DIR__ . '/vendor/autoload.php'; $mpdf = new \mPDF(); $html = <<<EOT <!DOCTYPE> <html> <head> <style> body { direction: rtl; font-family:byekan,arial; } </style> </head> <body> <p>سلام ایران</p> </body> </html> EOT; $mpdf->AddPage(); // force pagebreak $mpdf->WriteHTML($html); $mpdf->Output(); ?> |
mPDF بیشتر تگ های HTML رو پشتیبانی میکنه میتونید لیستش رو ببینید.
در رابطه با دستورات CSS هم بهتره از دستوراتی که چند مقدار باهم میگیرن مثل font رو استفاده نکنید چون کار نمیکنه به جاش از دستورات صریح استفاده کنید مثل font-family, font-size, border-color,... البته تو نسخه ۶٫۱ که اینجوری هست تا الان شاید تو نسخه های بعدی پشتیبانی بهتر بشه.
بعد اینکه ممکنه صفحتون تو مرورگر درست نشون داده بشه ولی تو خروجی mPDF نه، که طبیعی هست چون ممکنه بعضی دستورات هنوز تو mPDF پشتیبانی نشده باشه تو این موارد پیشنهاد میکنم از inline-style تو خود تگ HTML استفاده کنید.
برای اینکه فونت دلخواهتون رو استفاده کنید باید فونت رو در پوشه vendor/mpdf/mpdf/ttfontsقرار بدید برای مثال فونت BYekan رو از اینجا دانلود کنید بعد فایلهای BYekan.ttf و BYekan_bold.ttf رو در پوشه بالا قرار بدید هست.
حالا فایل config_fonts.php در مسیر vendor/mpdf/mpdfرو باز کنید و به آرایه fontdataمقدار زیر رو اضافه کنید
1 2 3 4 5 6 7 8 |
"byekan" => array( 'R' => "BYekan.ttf", //regular 'B' => "BYekan_Bold.ttf", //bold, optional //'I' => "BYekan_Italic.ttf" //italic, optional, uncomment if you have this version //'BI' => BYekan_Bold_Italic.ttf"// bold and italic, optional, uncomment if you have this version 'useOTL' => 0xFF, 'useKashida' => 75, ) |
دو مقدار useOTL و useKashida تنظیمات مخصوص فونت های عربی و فارسی هستند میتونید برای توضیحات بیشتر اینجا رو بخونید.
یه نکته خیلی مهم اینکه فونتون باید جدول GDEF رو داشته باشه که این مورد من رو خیلی اذیت کرد چون از همین فونت یکان من هرچی نسخه استفاده میکردم خطا میداد که این جدول رو نداره
1 2 |
Fatal error: Uncaught MpdfException: Warning - You cannot set this font (byekan.ttf) to use OTL, as it does not include OTL tables (or at least, not a GDEF table) |
البته خوشبختانه به کمک دوست خوبم Erfan Sahafnejad نسخه درستش رو پیدا کردم و در متن گذاشتم.
به روز رسانی 21-10-96
با تشکر از اطلاع رسانی آقای ihnd در نظرات - میتونید نسخه اصلاح شده بیشتر فونت های معروف فارسی که با این کتابخونه سازگار هستند رو از Standardized Persian Fonts By SCICT یا اینجا دانلود کنید.
سلام
ممنون از مطلب بسیار خوبتون
من یه راهنمایی نیاز دارم.داخل اون html که قراره pdf بشه کد php دارم و این کلاس نمیتونه کد php رو parse بکنه و به همین خاطر اون فاکتوری که میخوام بسازم به مشکل میخوره.میشه لطفا یه راهنمایی بهم بدین که چطور این مشکل رو حل کنم؟
ممنون
تو خود رشته ای که قرار هست به pdf تبدیل بشه کد php نمیتونه قرار بگیره شما باید مقدار اون فاکتوری که مد نظرتون هست رو بچسبونید به رشته مثل اینجا https://pastebin.com/hYY271Ae
ممنون از آموزش خوبتون.
من یک نسخه فونت xbzar دارم که نمیدونم قبلن از کجا گرفتم و با این کتابخونه کار میکنه. ولی الان نیاز به فونت میترا دارم که با این کتابخونه ازش استفاده کنم و نمیتونم نسخه سازگارش رو پیدا کنم.
روشی برای تبدیل فونت bmitra به نسخه سازگار با این کتابخونه هست؟ همین خطای otl را بهم میده روی فونت bmitra
بازم از آموزش خوبتون ممنونم.
دوست خوبم لینک زیر رو امتحان کردید
https://irfont.ir/fonts/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-5-%D9%81%D9%88%D9%86%D8%AA-%D8%AC%D8%AF%DB%8C%D8%AF-%D9%85%DB%8C%D8%AA%D8%B1%D8%A7
ممنون از اینکه سریع پاسخ دادید. این را تست کردم و خطای otl گرفتم.
بدون آپشن otl هم فونتها به هم نمی چسبند.
باید یک راهی برای تبدیل فونت باشد. این otl چی هست اصلن؟
راه حل را پیدا کردم.
از دوست خوبم shahabsiavash.com کمک گرفتم و با بسته فونت زیر مشکل کاملن برطرف شد.
فونت باید استاندارد باشه.
http://p30download.com/fa/entry/49790/
مرسی مرد
سلام دوستان
من از این کتابخانه استفاده کردم و یه مشکل دارم اونم اعداد هستش که میخوام فارسی باشه ولی به لاتین خروجی میده
با یه فونت فارسی دیگه امتجان کردید؟
سلام ضمن تشکر بابت مطلب خوبتون مشکلی که برخورد کردم هر فونتی که می گذارم فونتش تغییر نمی کنه
از همین فونتهایی که لینک دادم استفاده کردید؟
سلام مشکلی که دارم به این صورته که اگه خط otl را حذف کنم کلمه ها رو قطعه قطعه نشون میده ولی اگه حذف نکنم هیچ خروجی بهم نمیده
نمیدونم مشکل از کجاست کلافه شدم اینقدر اینترنت رو گشتم
با هر فونتی اینجوری میشه؟
بله بابیشترشون امتحان کردم به همین صورته فونتهایی رو هم از http://p30download.com/fa/entry/49790 دانلود کردم ولی بازم مشکل داره ممنون میشم راهنماییم کنید
دوست خوبم کدتون رو بزارید ببینم، من طبق آموزش پیش رفتم همه چی درست بود
نمونه کدش به اینصورت هست
http://s9.picofile.com/file/8333396300/test.JPG
به نظرم اشکال از mpdf باید باشه شما میتونید نسخه خودتون رو اپلود کنید و اینجا ادرسش رو بزارید
خیلی تشکر میکنم بابت پاسخگویتون
به جای اضافه کردن فایل mdf.php فایل vendor/utoload.php رو اضافه کنید
من چند تا تغییر تو آموزش دادم طبق همون یه بار دیگه پیش برید ببینید جواب میده یا نه
اگه نشد من کد کامل رو براتون آپلود میکنم
متاسفانه رفع نشد دستور vendor هم مجدد نوشتم اما همون مشکل قبلی رو داره
https://expirebox.com/download/d70c8d03b2c16d296aa3d024f7b8b864.html
سلام
چطوری با php میشه ورد فارسی را به php تبدیل کرد؟
تشکر
تو برنامه ام هست که آموزش کاملی رو در همین زمینه درست کنم
سلام، خیلی خیلی ممنون
من کلی واسه نمایش فارسی داخل mpdf سرچ کردم ولی درست نمیشد. با کد شما سریععععععععععع درست شد
ممنونننننننن
داخل mpdf من فایل config_fonts.php رو ندارم
فکر میکنم نسخه ۷ رو نصب کردید باید طبق این راهنما https://mpdf.github.io/fonts-languages/fonts-in-mpdf-7-x.html تنظیمات رو انجام بدید
یا اینکه با نسخه ۶ کار کنید که پست هم طبق همین نسخه هست
دستور composer require mpdf/mpdf:6.1 رو بزنید
سلام، ممنون. یه سوال دیگه داشتم. موقع ساختن پی دی اف متن body روی header نوشته میشه از margin-header و margin-bottom و هر چیز دیگه ای استفاده کردم ولی مشکلم حل نشد
به المنت مورد نظر id بدید و در CSS تنظیمش کنید
عرض ادب
لامصب هرچی با نسخه 7 تست میکنم نمیشه… اصن فونت رو اعمال نمیکنه… فونت های انگلیسی رو تست کردم جواب داد ولی اینو نه خطا میده نه چیزی ولی هیچ تاثیری نمیزاره
خطای otl هم نمیده
دقیقا طبق مثال پیش رفتم
دقت داشته باشید در نسخه 7 مقدار autoLangToFont = FALSE باشد
سلام. ممنون از آموزش های خوبتون.
من هرچی جستجو می کنم به جواب درستی برای نصب mpdf بدون کامپوزر نمی رسم. روی سرور ما کامپوزر رو غیر فعال کردن و سیستم اجازه نصب پکیج های مبتنی بر کامپوزر رو نمیده. حالا می خوام اگه ممکنه نسخه ی بدون نیاز به کامپوزر رو برای دانلود بزارین و روش نصب و فراخوانی کتابخانه های مورد نیازش رو بگید.
ممنون میشم اگه به این درخواست من هم جواب بدین.
سلام دوست خوبم
تو اینجور مواقع معمولا رو لوکال کتابخونه ها رو با کامپوزر نصب میکنن و بعد پوشه vendor و فایلهای composer رو با rsync منتقل میکنن به سرور
بعدا هم میتونید کتابخونه های جدیدی به سیستمتون اضافه کنید
با سلام و خسته نباشید
خیلی خیلی تشکر از آموزش هاتون
فقط مورد اعداد فارسی را میتونید راهنمایی بفرمایید باید چطوری عمل کنیم چون من با خیلی از فنت ها تست کردم ولی جواب نداد
انتهای پست یک لینک هست برای فونت های اصلاح شده، اونها رو امتحان کنید ببینید چطوریه
با سلام و خسته نباشید
tcpdf را من روی لوکال نصب کردم جواب میده فایل پی دی اف هم تولید میکنه ولی روی سروری که انتقال میدم
کار نمیکنه این خطا را نشون میده
TCPDF ERROR: Some data has already been output to browser, can’t send PDF file
چندین راهنمایی گرفتم ولی مشکل حل نشد با بروزرهای دیگه هم چک کردم به نتیجه نرسیدم
حالا mpdf را روی لوکال نصب کردم جواب داد باز روی سرور که انتقال دادم کارنمیکنه خطایی هم نشون نمیده یعنی یه صفحه سفبد بازمیشه
دوستان می تونید راهنمایی بفرمایید باید چه کار کنم با تشکر
دوست خوبم فکر میکنم قبل از اینکه فایل پی دی اف به خروجی فرستاده بشه، یه جای دیگه شما به خروچی چیزی میفرستید
اگه میتونید کد کاملتون رو بفرستید تو https://pastebin.com/ لینکشو بزارید اینجا
سلام جناب آقای موسوی
این سایت که اعلام فرمودید چه کار می کنه و چکار باید کرد
من کدکامل را فرستادم این هم لینکش https://pastebin.com/UVxS0v4D
آیا لازم هست دیتا براش بزارم یا همون کدها کافیه
خیلی ممنون از لطف جنابعالی
pastebin رو میگید؟
بله دیتا هم بفرستید
با سلام خدمت شما عزیز
دیتا اضافه شد ممنون بابت زحماتتون
https://pastebin.com/i0MuH4L1
دوست خوبم این کد اچ تی ام ال که نوشتید معتبر نیست. اگه فقط کد html رو چاپ کنید و با مرورگر باز کنید و view source رو بزنید میبینید که یک سری تگ قرمز نشون میده یعنی اینکه یا یه سری ت رو خوب نبستید یا اشتباه گذاتید، حالا اگه شما هم بتونید کامل و درست table بسازید باز خیلی احتمالش هست که mpdf نتونه درست آنالیزش کنه و درست نشون بده. به نظرم اگه میتونید از div و span استفاده کنید.
با سلام و خسته نباشید
جناب آقای موسوی
html اولیه همه چیز ها که شما مد نظرتون بود داشت هم با tcpdf مشکل داشت و هم با mpdf به قول معروف هر بار یه چیزهاییش را حذف کردم ببینم مشل حل میشه یا نه که نتیجه نداشت
حتی همین کد ابتدایی که فقط یه تگ p داره که برای آموزش هست را هم که جایگزین کردم بازهم همین مشکل را داره
بنظرتون مشکل ربطی به سرور داره یا تنظیم خاصی باید انجام بشه
من این مشکل برام پیش نیومده تا حالا
اینجا یه نگاه بندازید