مهدی مهدوی
7 سال پیش توسط مهدی مهدوی مطرح شد
24 پاسخ

خروجی PDF فارسی با لاراول

سلام

دوستان من نیاز دارم از یکسری اطلاعات خروجی به صورت pdf بگیرم

ولی متاسفانه 4 5 تا پکیج نصب کردم که هیچکدام زبان فارسی پشتیبانی نکردن

اگه دوستان پکیجی سراغ دارن که امتحان کردن و با زبان فارسی مشکلی نداشته ممنون میشم معرفی کنن

باتشکر


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 7 سال پیش مطرح شد
5

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


مهدی مهدوی
تخصص : تازه وارد
@mehdi.mahdavi97 7 سال پیش آپدیت شد
0

ممنون جناب موسوی

بالاخره با این پکیج تونستم مشکل زبان فارسی رو حل کنم

و فونت فارسی هم تونستم اضافه کنم

خیلی ممنونم


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 5 سال پیش مطرح شد
0

این پکیج چرا با Laravel 5.8 مشکل داره؟
وقتی متد loadView رو اجرا میکنم صفحه در حال رفرش شدن میمونه و اصلا تموم نمیشه!
با laravel 5.6 قبلا استفاده کردم و مشکلی نداشت


علی فرمانی
تخصص : فرانت اند
@farmani 5 سال پیش مطرح شد
1

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


mahdi farhadpour
تخصص : برنامه نویس
@mahdi4187 5 سال پیش مطرح شد
Mostafa Nazar
تخصص : برنامه نویس وب و موبایل
@mostafa.8722 5 سال پیش مطرح شد
0

میتونید از لینک زیر استفاده کنید . من کدهاش رو شخصی سازی کردم
https://tcpdf.org/


علیرضا کلانتریان
تخصص : Full-Stack Web Developer,C#,Ja...
@ali.kalan 5 سال پیش مطرح شد
0

سلام این پکیچ خوبه من استفاده کردم اما یه مشکلی که داره اینه که به سختی میشه استایل بهش بدی. از استایل های که لینک میدیم هم پشتیبانی نمیکنه.مثل bootstrap.css


T.chegini
@t.chegini 5 سال پیش مطرح شد
0

@drcode.ir
منم دقیقا مشکل شما رو دارم. تونستید مشکل رو برطرف کنید؟


Nasser Zarre
تخصص : Laravel-Jquery-PHP-MYSQL
@nassi125zarri 5 سال پیش آپدیت شد
0

سلام دوستان عزیز.
میشه ینده رو یه راهنمایی کنید . گیر کردم تو یه پکیج تو لاراول

پکیج niklasravnsborg/laravel-pdf رو نصب کردم . و از دستور زیر هم دارم استفاده میکنم ازش

    $pdf = PDF::loadView('admin_backend_codes.showSearchPrintA4', $data);
    return $pdf->stream('document.pdf');

اما وقتی متد رو صدا میزنم صفحه همینجوری میمونه و انگار میخاد یه دیتای 100 هزار صفجه ایی رو تبدیل به pdf کنه و نشون بده در صورتیکه یه صفحه ساده اما با نوشته های فارسی هست. مشکل چیه. کسی میتونه منو راهنمایی کنه .


Nasser Zarre
تخصص : Laravel-Jquery-PHP-MYSQL
@nassi125zarri 5 سال پیش مطرح شد
0

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


Bahman Aliveisi
@roj 5 سال پیش آپدیت شد
1

در فایل config/pdf.php اینرو قرار بدهید


<?php
return [
'mode'                  => 'utf-8',
    'format'                => 'A4',
    //'format' => 'A4-L',
    //'orientation' => 'L',
    'default_font' => 'vazir',
    'author'                => '',
    'subject'               => '',
    'keywords'              => '',
    'creator'               => 'Laravel Pdf',
    'display_mode'          => 'fullpage',
    'tempDir'               => base_path('../temp/'),

    'font_path' => base_path('public/assets/fonts/pdf/ttf/'),
    'font_data' => [
        'vazir' => [
            'R'  => 'Vazir-FD.ttf',    // regular font
            //'B'  => '',       // optional: bold font
            //'I'  => '',     // optional: italic font
            //'BI' => '', // 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
        ]
    ]
];

مسیر و نام فونت ها رو باز نویسی کنید.


مهدی مهدوی
تخصص : تازه وارد
@mehdi.mahdavi97 5 سال پیش مطرح شد
2

سلام دوستان
@t.chegini
@nassi125zarri
استفاده از mpdf داخل پروژه لاراولی اصلا سخت نیست و لازمم نیست حتما از اون پکیج استفاده کنید، من خودم به عنوان یه Helper Class ازش استفاده میکنم و مشکل خاصی هم نداره
کافیه اول mpdf رو نصب کنید :

composer require mpdf/mpdf

بعدا یه کلاس بسازید که از این mpdf استفاده کنه ولی خب کارو راحت تر کنه اینطوری(در واقع من ازاون پکیج الهام گرفتم) :

<?php

namespace App\Helpers;

use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\View;
use Mpdf\Config\ConfigVariables;
use Mpdf\Config\FontVariables;
use Mpdf\Mpdf;
use Mpdf\MpdfException;
use Symfony\Component\HttpFoundation\Response;

class PDF
{
    protected $mpdf;
    protected $config = [];
    public function __construct($html = '', $config = [])
    {
        $this->config = $config;

        $defaultConfig = (new ConfigVariables())->getDefaults();
        $fontDirs = $defaultConfig['fontDir'];
        $tempDir = $defaultConfig['tempDir'];

        $defaultFontConfig = (new FontVariables())->getDefaults();
        $fontData = $defaultFontConfig['fontdata'];

        $this->mpdf = new Mpdf([
            'mode' => $this->getConfig('mode'),
            'format' => $this->getConfig('format'),
            'orientation' => $this->getConfig('orientation'),
            'default_font_size' => $this->getConfig('default_font_size'),
            'default_font' => $this->getConfig('default_font'),
            'margin_left' => $this->getConfig('margin_left'),
            'margin_right' => $this->getConfig('margin_right'),
            'margin_top' => $this->getConfig('margin_top'),
            'margin_bottom' => $this->getConfig('margin_bottom'),
            'margin_header' => $this->getConfig('margin_header'),
            'margin_footer' => $this->getConfig('margin_footer'),
            'fontDir' => array_merge($fontDirs, [
                $this->getConfig('custom_font_dir')
            ]),
            'fontdata' => ($this->getConfig('custom_font_data') ?: $fontData),
            'autoScriptToLang' => $this->getConfig('auto_language_detection'),
            'autoLangToFont' => $this->getConfig('auto_language_detection'),
            'tempDir' => ($this->getConfig('temp_dir')) ?: $tempDir,
        ]);

        $this->mpdf->SetTitle         ( $this->getConfig('title') );
        $this->mpdf->SetAuthor        ( $this->getConfig('author') );
        $this->mpdf->SetWatermarkText ( $this->getConfig('watermark') );
        $this->mpdf->SetDisplayMode   ( $this->getConfig('display_mode') );
        $this->mpdf->SetDirectionality   ( $this->getConfig('directionality') );

        $this->mpdf->showWatermarkText  = $this->getConfig('show_watermark');
        $this->mpdf->watermark_font     = $this->getConfig('watermark_font');
        $this->mpdf->watermarkTextAlpha = $this->getConfig('watermark_text_alpha');

        $this->mpdf->WriteHTML($html);
    }

    protected function getConfig($key) {
        if (isset($this->config[$key])) {
            return $this->config[$key];
        } else {
            return Config::get('pdf.' . $key);
        }
    }

    /**
     * Get instance mpdf
     * @return Mpdf
     */
    public function getMpdf()
    {
        return $this->mpdf;
    }

    /**
     * Output the PDF as a string.
     *
     * @return string The rendered PDF as string
     * @throws MpdfException
     */
    public function output()
    {
        return $this->mpdf->Output('', 'S');
    }

    /**
     * Save the PDF to a file
     *
     * @param $filename
     * @return static
     * @throws MpdfException
     */
    public function save($filename)
    {
        return $this->mpdf->Output($filename, 'F');
    }

    /**
     * Make the PDF downloadable by the user
     *
     * @param string $filename
     * @return Response
     * @throws MpdfException
     */
    public function download($filename = 'document.pdf')
    {
        return $this->mpdf->Output($filename, 'D');
    }

    /**
     * Return a response with the PDF to show in the browser
     *
     * @param string $filename
     * @return Response
     * @throws MpdfException
     */
    public function stream($filename = 'document.pdf')
    {
        return $this->mpdf->Output($filename, 'I');
    }

    /**
     * Load a HTML string
     *
     * @param string $html
     * @param array $config
     * @return Pdf
     */
    public static function loadHTML($html, $config = [])
    {
        return new self($html, $config);
    }

    /**
     * Load a HTML file
     *
     * @param string $file
     * @param array $config
     * @return Pdf
     */
    public static function loadFile($file, $config = [])
    {
        return new self(File::get($file), $config);
    }

    /**
     * Load a View and convert to HTML
     *
     * @param string $view
     * @param array $data
     * @param array $mergeData
     * @param array $config
     * @return Pdf
     */
    public static function loadView($view, $data = [], $mergeData = [], $config = [])
    {
        return new self(View::make($view, $data, $mergeData)->render(), $config);
    }
}

خب حالا نیاز به یه فایل config داره که داخل دایرکتوری config با اسم pdf.php بسازید و این کدها رو کپی کنید داخلش :

<?php
return [
    'mode' => 'utf-8',
    'format' => 'A4',
    'default_font_size' => '12',
    'default_font' => 'iransans',
    'margin_left' => 10,
    'margin_right' => 10,
    'margin_top' => 10,
    'margin_bottom' => 10,
    'margin_header' => 0,
    'margin_footer' => 0,
    'orientation' => 'P',
    'title' => 'Laravel mPDF',
    'author' => '',
    'watermark' => '',
    'show_watermark' => false,
    'watermark_font' => 'iransans',
    'display_mode' => 'fullpage',
    'watermark_text_alpha' => 0.1,
    'directionality' => 'rtl',
    'custom_font_dir' => public_path('/fonts/ttf/'),
    'custom_font_data' => [
        'iransans' => [
            'R' => 'IRANSansWeb(FaNum).ttf',    // regular font
            'B' => 'IRANSansWeb(FaNum)_Bold.ttf',       // optional: bold font
            'useOTL' => 0xFF,    // required for complicated langs like Persian, Arabic and Chinese
            'useKashida' => 75,  // required for complicated langs like Persian, Arabic and Chinese
        ],
    ],
    'auto_language_detection' => false,
    'temp_dir' => base_path('../temp/')
];

فونت ها رو هم داخل public/fonts آپلود کنید
فقط توجه کنید که بعضی از فونت های فارسی با mpdf سازگار نیستن ، مثلا ایران سنس یه ورژن یادمه جواب نمیداد
فونت هایی نظیر وزیر و شبنم(خیلی فونت خوبیه ) من تست کردم اوکیه


Nasser Zarre
تخصص : Laravel-Jquery-PHP-MYSQL
@nassi125zarri 5 سال پیش مطرح شد
1

@roj
@m.mahdavi97

تشکر میکنم از هر دوی شما عزیزان.

روش اقا بهنام رو من انجام دادم و قبلا در داخل خود متد این کانفیگ رو نوشته بودم که جواب نمیداد نمیدونم چرا ولی وقتی رفتم به مسیر تنظیمات این فایل در داخل فولدر کانفیگ و اونو تغییر دادم مشکل فارسی حل شد. تشکر میکنم از شما

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

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

آقا مهدی در باره اون پکیج چون نصب نکردم سراغ روش شما نرفتم . با توجه به تنظیماتی که این پگیج ارايه داده احتمالا اون هم با فارسی مشکل نداره و تعریف فونت براش تعریف شده.

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


Bahman Aliveisi
@roj 5 سال پیش مطرح شد
1

این پکیج از همان mPDF استفاده میکنه.
پکیج به تگ ها خیلی حساس هست. چک کنید تگ اضافه باز یا بسته نداشته باشید.فایل view رو چک کنید ببینید در حلقه ها اگر برای بستن تگ ها شرط گذاشتید ممکنه تگ اضافی داشته باشید.
خروجی HTML فایل view رو با این سایت بررسی کنید
https://validator.w3.org/#validate_by_input

@nassi125zarri


Nasser Zarre
تخصص : Laravel-Jquery-PHP-MYSQL
@nassi125zarri 5 سال پیش مطرح شد
1

@roj
بازم ممنونم از شما.
خیلی لطف کردی اقا بهمن


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
0

سلام من از 2 تا پکیج زیر استفاده کردم ولی بازم کارکتر های فارسی رو نمیشناسه
چی باید بکنم؟
https://github.com/niklasravnsborg/laravel-pdf
https://github.com/barryvdh/laravel-dompdf
فایلی که توش اطلاعات رو میخام نشون بدمو خروجی pdf بگیرم، blade هست!


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 4 سال پیش مطرح شد
0

@t.chegini
سلام. ببخشید من مدت زیادی بود راکت نمیومدم.
بله مشکل حل شد و فهمیدم از چی هست.


Rezvani
تخصص : برنامه نویس PHP/Laravel
@javadrezvani360 4 سال پیش مطرح شد
0

@hesammousavi استاد من وقتی از این پکیج استفاده میکنم به من یه خروجی سفید بر میگردونه نمیدونم مشکل چیه وقتی از پکیج دیگه ای استفاده کردم این جوری نبود اما مشکل اون این بود فارسی کار نمیکرد باید چیکار کنم؟؟


Rezvani
تخصص : برنامه نویس PHP/Laravel
@javadrezvani360 4 سال پیش مطرح شد
1

ممنون از آقا بهنام @roj مشکل با راهنمایی ایشون حل شد فقط استایل ها بهم ریختس باید توی ویو چی قرار بدم استایل درست بشه؟؟


Bahman Aliveisi
@roj 4 سال پیش مطرح شد
1

@javadrezvani360
mpdf از بعضی استایل ها بطور کامل پشتیبانی نمیکنه مثلا float:
https://mpdf.github.io/what-else-can-i-do/floating-blocks.html


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

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