راکت
حل شده

استفاده از mpdf

27 پاسخ

سلا به همگی
من دنبال یک پکیج خوب برای خروجی گرفتن از یکی از صفحات سایتم به صورت PDF هستم
اکثر پکیج هارو امتحان کردم
بهترینشون domPDF بود که متاسفانه زبان فارسی رو پشتیبانی نمیکرد
خیلیا گفته بودن mPDF زبان فارسی ر و پشتیبانی میکنه
موقع استفاده از mPDF وقتی میخام خروجی بگیرم
یک پی دی اف خالی برام میسازه
کسی میتونه راهنماییم کنه

 تصویر
اگر یک پکیج خوب برای لاراول 9 میشناسید ممنون میشم بهم معرفی کنید
چند روزه درگیر این موضوع هستم ولی به نتیجه ای نرسیدم :/

ثبت پرسش جدید

پاسخ‌ها

27
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

بهترین پاسخ

طبق گفته مدیر پروژه mdpf در لینک گیت هابی که ارسال کردم، متاسفانه این پکیج (mpdf ) هنوز از نسخه ۳ پکیج psr/log نمی‌تونه پشتیبانی کنه و تنها راهش downgrade کردن این پکیج به نسخه ۲ هست.

اول پکیج mpdf رو حذف کنیدو بعد پکیج psr/log رو به نسخه ۲ بیارید. بعد مجددا mpdf رو نصب کنید.

ضمنا اگر از لاراول استفاده می‌کنید پیشنهادم استفاده از پکیج زیر هست که پشت صحنه وابسته به همون mpdf هست ولی مقداری کار کردن باهاش لذت بخش‌تر و راحت‌تره:
https://github.com/niklasravnsborg/laravel-pdf

(البته در هر دو حالت نیازمند downgrade پکیج psr/log به نسخه ۲ هستید)

آرین حیدری
آرین حیدری
@arianhdr

تخصص: طراح رابط کاربری، برنامه‌نویس

سلام
بنظرم بهتر باشه بیشتر برامون توضیح بدین
مثلاً من نمی‌تونم بهتون بگم مشکلتون دقیقاً کجاست
چون هیچ منطقی از کاری که دارین انجام می دین ندارم
بخاطر اینکه نمی دونم چطور دارین این فایل رو می سازین
راجب کتاب خونه، کتاب خونه های متفاوتی هستش
برای مثال html2pdf tcpdfیا همون mpdf که شما ازش استفاده می کنین
اگه می خواین از مت‍ـ(ـو)ـن فارسی یا عربی در متنتون استفاده کنین یا هر زبان راستچینی باید ابتدا صفحه رو راستچین کنین
برای tcpdf اگه خواستین این لینک یه مثال هستش برای استفاده از زبان های راستچین
برای mpdf هم اگه قصد استفاده ازش رو دارین می تونین از این لینک استفاده کنین که یه مثالی هستش برای استفاده از زبان‌های راستچین
و html2pdf هم کلاً زبان های راستچین رو پشتیبانی نمی کنه من فقط به عنوان یکی از کتاب‌خونه ها بیانش کردم اما بهتره سمتش نرین
این لینک دهی ها هم بخاطر اینه که به این اشاره کرده باشم که برای اینه که از خودم نسخه ای نداده باشم
چون درکی از کاری که می کنین ندارم
ان‌شاءالله با همین چند تا نمونه مشکلتون حل بشه
التماس دعا دارم
و من الله توفیق

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@arianhdr
ممنون از جوابتون
من این کتابخونه هارو مشاهده کردم
کتابخونه ای که به به کار من بیاد و اوکی باشه این mpdf و dompdf هست
همه مراحل نصب mpdf رو طبق این لینک انجام دادم ولی وقتی روی دکمه دانلود کلیک میکنم پی دی اف خالی برام ساخته میشه و هیچ محتوایی داخل فایل نیست

شاید پاسخ شما همین‌جا باشد

آرین حیدری
آرین حیدری
@arianhdr

تخصص: طراح رابط کاربری، برنامه‌نویس

@omid.sandi79
اگه می شه بهتره توضیح بدین راجب اینکه چی کار کردین و چطور ازش استفاده کردین؟ از چه توابعی از کتاب‌خونه برای ساخت فایل pdf استفاده کردین؟
یا اینکه کدتون رو بفرستین
آیا محتوایی برای فایل به کتاب‌خوبه دادید؟ عکسی چیزی بوده که دچار مشکل بشه و صفحه سفید برگردونه؟
اینطوری من می فهمم که چی به چیه و مشکلتون دقیقاً کجاست
الان من نمی دونم چی کارا کردین و مشکلتون دقیقاً چیه
یه دکتر هم اول علائم رو می بینه بعد نسخه می نویسه
و شاید سوالـ(ـاتـ)ـی پیرامون موضوع بپرسه
من الان نمی دونم چی کار کردین که بخوام براتون نسخه بنویسم
بخاطر همینم یکی از این دو رو ازتون درخواست می کنم و سوالاتی ازتون می پرسم
و اینکه این لینک نمونه ای بهتری باشه بنظرم اگه قصد استفاده از کتاب‌خونه mpdf رو دارین

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

پکیج Mpdf قابلیت پشتیبانی از زبان فارسی رو داره و چندین سال هست که به شخصه دارم ازش استفاده می‌کنم.

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

ضمنا توجه کنید که در فایل تنظیماتش در پوشه config هم طبق آموزش های موجود باید یکسری کدهایی به بخش method اضافه کنید. مطمئن هم بشید که کش کانفیگ لاراولتون بعد از تغییرات پاک بشه.

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@mhyeganeh
سلام دوست عزیز
من وقتی از mpdf میخام استفاده کنم با ارور زیر برخورد میکنم
ارور بخاطر چی هست ؟
و میشه یه مقدار راهنمایی کنید منو برای استفاده از این پکیج؟
 تصویر

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

@omid.sandi79

ای کاش خودتون همین متن ارور رو یکبار در گوگل سرچ می‌کردید. مطمئنا خیلی زودتر به نتیجه می‌رسیدید و کارتون راه می افتاد...

طبق issue ثبت شده در اینجا، احتمالا مشکلش عدم همخونی ورژن پکیج‌های composer تون هست

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@mhyeganeh
من متنو بار ها و بارها سرچ کردم
ورژن php نسخه ۸ هستش و لارول هم نسخه ۹

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

@omid.sandi79

نسخه دقیق پکیج های mpdf و psr/log تون رو از فایل composer.lock بگید لطفا.

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@mhyeganeh
شما خودتون از همین پکیجی که فرستادید استفاده میکنید؟
فترسی رو پشتیبانی میکنه؟

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

بله استفاده می‌کنم و پشتیبانی می‌کنه.

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@mhyeganeh
ممنون از کمکتون
امتحان میکنم نتیجه رو اعلام میکنم 🙏🏻

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@mhyeganeh
کار هایی که گفتید رو انجام دادم
طبق گیت هاب پکیج رو نصب کردم
psr/log رو هم به ورژن 2 تغییر دادم
وقتی میخام از فایل خروجی بگیرم اصلا دانلود شروع نمیشه و سایت هنگ میکنه
use \PDF کردم و

$filename = 'برنامه هفتگی شماره ' . $schedule->schedule_number . ' ' . $student->name;
            $pdf = PDF::loadView('Dashboard.schedule.PDFSchedule', compact('schedule_rows', 'student', 'lessonsArray', 'schedule'));
            return $pdf->save($filename);
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

اینکه ارور قبلی رو دیگه دریافت نمی‌کنید نشونه خوبیه و یعنی مشکلی برطرف شده. اما قبلا هم عرض کردم سعی کنید از ساده شروع کنید و مرحله به مرحله تکمیلش کنید تا به نتیجه مطلوب برسید.

در گام اول سعی کنید از مثال‌های خود پکیج استفاده کنید یا مثلا یک کلمه ساده و تنها رو خروجی بگیرید. بعد متن کامل. بعد همراه با استایل. بعد همراه با متغیر. بعد همراه با فونت. بعد...

اینجوری وقتی به ارور می خورید راحت تر و سریع تر می‌تونید علتش رو پیدا کنید. درمقایسه با الان که پارامترهای خیلی زیادی درگیر هستند و میتونه هر کدومشون منشا مشکل باشند.

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@mhyeganeh
سلام
ممنون ازتون
مشکلات قبلیم اوکی شد کامل
فقط میخاستم بدونم شما از چه فونتی استفاده میکنید؟
من هر custom فونتی اضافه میکنم به پکیج به صورت به هم ریخته به من نشونش میده
 تصویر

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

من از فونت «وزیرمتن» استفاده می‌کردم ولی فکر نمی کنم ارتباطی با خود فونت داشته باشه و احتمالا مربوط به کانفیگش باشه.

این تنظیمات فایل config/pdf.php من هست:

return [
    'mode'                  => 'utf-8',
    'format'                => 'A4',
    'author'                => '****',
    'subject'               => '',
    'keywords'              => '',
    'creator'               => '****',
    'display_mode'          => 'fullpage',
    'tempDir'               => storage_path('app/public/temp/'),
    'font_path'             => public_path('vendor/fonts/'),
    'font_data'             => [
        'vazirmatn'                 => [
            'R'  => 'vazirmatn/Vazirmatn-Regular.ttf',
            'B'  => 'vazirmatn/Vazirmatn-Bold.ttf',
            'useOTL' => 0xFF,
            'useKashida' => 75,
        ],
        'fontawesome' => [
            'R' => 'fa-solid-900.ttf'
        ],
    ]
];
سعید محمدی
سعید محمدی
@saeiidm

@mhyeganeh

سلام اقا این مشکل خروجی pdf و چجوری حل کردی منم وقتی میخام خروجی بگیر م کلا صفحه down میشه و سایت هنگ میکنه
ورژن php ام 8.1 هست و لاراول ام 9.2

ممنون میشم توضیح بدی

omid.sandi
omid.sandi
@omid.sandi79

تخصص: برنامه نویس و طراح سایت

@saeiidm
مشکل من این بود که داخل تگ css از url استفاده کرده بودم و اشتباه آدرس دهی کرده بودم
باید ببینی کجای فایلت مشکل داره

سعید محمدی
سعید محمدی
@saeiidm

@mhyeganeh
@omid.sandi79

من طبق این لینک
لینک

این موارد رو رفتم و مشکل دانلود درست شد تو ورژن 8 php و لاراول 9.2

ERROR :

Declaration of Mpdf\Mpdf::setLogger(Psr\Log\LoggerInterface $logger) must be compatible with Psr\Log\LoggerAwareInterface::setLogger(Psr\Log\LoggerInterface $logger): void

SOLUTION:

composer remove niklasravnsborg/laravel-pdf
composer remove mpdf/mpdf
composer remove psr/log
composer require psr/log=v2.*
composer require mpdf/mpdf v8.0.17
composer require niklasravnsborg/laravel-pdf

و حتی فایل کانفیگ هم درست رفتم

<?php

return [
    'mode'                  => 'utf-8',
    'format'                => 'A4', /* 'A5-L' */
    'author'                => 'example.com',
    'subject'               => '',
    'keywords'              => '',
    'creator'               => 'Laravel Pdf',
    'display_mode'          => 'fullpage',
    'tempDir'               => storage_path('app/public/temp/'),
    'font_path'             => storage_path('app/public/fonts/'),
    'font_data'             => [
        'myfont' => [
            'R'  => 'IRANSans-web.ttf',    // regular font
            'B'  => 'IRANSans-web.ttf',    // regular font
            //'B'  => 'IRANSans-Bold-web.ttf',       // optional: bold font
            // 'I' => 'ExampleFont-Italic.ttf',     // optional: italic font
            //'BI' => 'ExampleFont-Bold-Italic.ttf' // optional: bold-italic font
            'useOTL' => 0xFF,    // required for complicated langs like Persian, Arabic and Chinese
            'useKashida' => 75,  // required for complicated langs like Persian, Arabic and Chinese
        ]
    ]
];

اینم کنترلم

    public function pdf()
    {
        $pdf = PDF::loadView('pdf.print');
        return $pdf->stream('document.pdf');
    }

به همراه فونت فارسی و تو خود صفحه بلید هم فقط یه کلمه سلام

<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<div>سلام</div>
</body>
</html>

ولی بعد دانلود pdf وقتی بازش میکنم میبینم همه نوشته های فارسی بصورت مربع هست!!!!!

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

@saeiidm

کاش یک تاپیک مجزا ایجاد می‌کردید...

فونت ها رو از storage به public منتقل کنید و آدرس دهیش رو هم مثل نمونه ای که بالاتر ارسال کردم در فایل config/pdf.php از پوشه public انجام بدید ببینید فرقی می‌کنه.

صفحه 1 از 2

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام