ساخت PDF فارسی با PHP

برای ساخت PDF فارسی چند تا کتابخونه خوب برای PHP وجود داره dompdf ,TCPDF و mPDF

من هر سه رو تست کردم و بی شک mPDF چه در پشتیانی زبان فارسی چه در سرعت و کارایی سرامد تر از بقیه هست.

ساخت PDF فارسی با mPDF

برای شروع یک پوشه ایجاد کنید بعد mPDF رو با Composer اضافه میکنیم

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

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مقدار زیر رو اضافه کنید

دو مقدار useOTL و useKashida تنظیمات مخصوص فونت های عربی و فارسی هستند میتونید برای توضیحات بیشتر اینجا رو بخونید.

یه نکته خیلی مهم اینکه فونتون باید جدول GDEF رو داشته باشه که این مورد من رو خیلی اذیت کرد چون از همین فونت یکان من هرچی نسخه استفاده میکردم خطا میداد که این جدول رو نداره

البته خوشبختانه به کمک دوست خوبم Erfan Sahafnejad نسخه درستش رو پیدا کردم  و در متن گذاشتم.

 

به روز رسانی 21-10-96

با تشکر از اطلاع رسانی آقای ihnd در نظرات -  میتونید نسخه اصلاح شده بیشتر فونت های معروف فارسی که با این کتابخونه سازگار هستند رو از Standardized Persian Fonts By SCICT یا اینجا دانلود کنید.

۴۰ comments

  1. سلام
    ممنون از مطلب بسیار خوبتون
    من یه راهنمایی نیاز دارم.داخل اون html که قراره pdf بشه کد php دارم و این کلاس نمیتونه کد php رو parse بکنه و به همین خاطر اون فاکتوری که میخوام بسازم به مشکل میخوره.میشه لطفا یه راهنمایی بهم بدین که چطور این مشکل رو حل کنم؟
    ممنون

    1. تو خود رشته ای که قرار هست به pdf تبدیل بشه کد php نمیتونه قرار بگیره شما باید مقدار اون فاکتوری که مد نظرتون هست رو بچسبونید به رشته مثل اینجا https://pastebin.com/hYY271Ae

  2. ممنون از آموزش خوبتون.
    من یک نسخه فونت xbzar دارم که نمیدونم قبلن از کجا گرفتم و با این کتابخونه کار میکنه. ولی الان نیاز به فونت میترا دارم که با این کتابخونه ازش استفاده کنم و نمیتونم نسخه سازگارش رو پیدا کنم.
    روشی برای تبدیل فونت bmitra به نسخه سازگار با این کتابخونه هست؟ همین خطای otl را بهم میده روی فونت bmitra
    بازم از آموزش خوبتون ممنونم.

      1. ممنون از اینکه سریع پاسخ دادید. این را تست کردم و خطای otl گرفتم.
        بدون آپشن otl هم فونتها به هم نمی چسبند.

        باید یک راهی برای تبدیل فونت باشد. این otl چی هست اصلن؟

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

  4. سلام ضمن تشکر بابت مطلب خوبتون مشکلی که برخورد کردم هر فونتی که می گذارم فونتش تغییر نمی کنه

  5. سلام مشکلی که دارم به این صورته که اگه خط otl را حذف کنم کلمه ها رو قطعه قطعه نشون میده ولی اگه حذف نکنم هیچ خروجی بهم نمیده
    نمیدونم مشکل از کجاست کلافه شدم اینقدر اینترنت رو گشتم

        1. دوست خوبم کدتون رو بزارید ببینم، من طبق آموزش پیش رفتم همه چی درست بود

          1. به جای اضافه کردن فایل mdf.php فایل vendor/utoload.php رو اضافه کنید
            من چند تا تغییر تو آموزش دادم طبق همون یه بار دیگه پیش برید ببینید جواب میده یا نه
            اگه نشد من کد کامل رو براتون آپلود میکنم

  6. سلام، خیلی خیلی ممنون
    من کلی واسه نمایش فارسی داخل mpdf سرچ کردم ولی درست نمیشد. با کد شما سریععععععععععع درست شد
    ممنونننننننن

      1. سلام، ممنون. یه سوال دیگه داشتم. موقع ساختن پی دی اف متن body روی header نوشته میشه از margin-header و margin-bottom و هر چیز دیگه ای استفاده کردم ولی مشکلم حل نشد

  7. عرض ادب
    لامصب هرچی با نسخه 7 تست میکنم نمیشه… اصن فونت رو اعمال نمیکنه… فونت های انگلیسی رو تست کردم جواب داد ولی اینو نه خطا میده نه چیزی ولی هیچ تاثیری نمیزاره
    خطای otl هم نمیده
    دقیقا طبق مثال پیش رفتم

  8. سلام. ممنون از آموزش های خوبتون.
    من هرچی جستجو می کنم به جواب درستی برای نصب mpdf بدون کامپوزر نمی رسم. روی سرور ما کامپوزر رو غیر فعال کردن و سیستم اجازه نصب پکیج های مبتنی بر کامپوزر رو نمیده. حالا می خوام اگه ممکنه نسخه ی بدون نیاز به کامپوزر رو برای دانلود بزارین و روش نصب و فراخوانی کتابخانه های مورد نیازش رو بگید.
    ممنون میشم اگه به این درخواست من هم جواب بدین.

    1. سلام دوست خوبم
      تو اینجور مواقع معمولا رو لوکال کتابخونه ها رو با کامپوزر نصب میکنن و بعد پوشه vendor و فایلهای composer رو با rsync منتقل میکنن به سرور
      بعدا هم میتونید کتابخونه های جدیدی به سیستمتون اضافه کنید

  9. با سلام و خسته نباشید
    خیلی خیلی تشکر از آموزش هاتون
    فقط مورد اعداد فارسی را میتونید راهنمایی بفرمایید باید چطوری عمل کنیم چون من با خیلی از فنت ها تست کردم ولی جواب نداد

    1. انتهای پست یک لینک هست برای فونت های اصلاح شده، اونها رو امتحان کنید ببینید چطوریه

  10. با سلام و خسته نباشید
    tcpdf را من روی لوکال نصب کردم جواب میده فایل پی دی اف هم تولید میکنه ولی روی سروری که انتقال میدم
    کار نمیکنه این خطا را نشون میده
    TCPDF ERROR: Some data has already been output to browser, can’t send PDF file
    چندین راهنمایی گرفتم ولی مشکل حل نشد با بروزرهای دیگه هم چک کردم به نتیجه نرسیدم
    حالا mpdf را روی لوکال نصب کردم جواب داد باز روی سرور که انتقال دادم کارنمیکنه خطایی هم نشون نمیده یعنی یه صفحه سفبد بازمیشه

    دوستان می تونید راهنمایی بفرمایید باید چه کار کنم با تشکر

    1. دوست خوبم فکر میکنم قبل از اینکه فایل پی دی اف به خروجی فرستاده بشه، یه جای دیگه شما به خروچی چیزی میفرستید
      اگه میتونید کد کاملتون رو بفرستید تو https://pastebin.com/ لینکشو بزارید اینجا

      1. سلام جناب آقای موسوی
        این سایت که اعلام فرمودید چه کار می کنه و چکار باید کرد
        من کدکامل را فرستادم این هم لینکش https://pastebin.com/UVxS0v4D
        آیا لازم هست دیتا براش بزارم یا همون کدها کافیه
        خیلی ممنون از لطف جنابعالی

          1. دوست خوبم این کد اچ تی ام ال که نوشتید معتبر نیست. اگه فقط کد html رو چاپ کنید و با مرورگر باز کنید و view source رو بزنید میبینید که یک سری تگ قرمز نشون میده یعنی اینکه یا یه سری ت رو خوب نبستید یا اشتباه گذاتید، حالا اگه شما هم بتونید کامل و درست table بسازید باز خیلی احتمالش هست که mpdf نتونه درست آنالیزش کنه و درست نشون بده. به نظرم اگه میتونید از div و span استفاده کنید.

          2. با سلام و خسته نباشید
            جناب آقای موسوی
            html اولیه همه چیز ها که شما مد نظرتون بود داشت هم با tcpdf مشکل داشت و هم با mpdf به قول معروف هر بار یه چیزهاییش را حذف کردم ببینم مشل حل میشه یا نه که نتیجه نداشت
            حتی همین کد ابتدایی که فقط یه تگ p داره که برای آموزش هست را هم که جایگزین کردم بازهم همین مشکل را داره
            بنظرتون مشکل ربطی به سرور داره یا تنظیم خاصی باید انجام بشه

پاسخ دادن به محمد لغو پاسخ

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