آفلاین
user-avatar

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

2 ماه پیش
توسط Bahman Aliveisi آپدیت شد
آفلاین
user-avatar
مهدی مهدوی ( 27148 تجربه )
3 سال پیش
تخصص : توسعه دهنده- JS - PHP - لاراول - وردپرس

سلام

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

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

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

باتشکر

بهترین پاسخ انتخاب شده توسط مهدی مهدوی
آفلاین
user-avatar
حسام موسوی
3 سال پیش

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

آفلاین
user-avatar
حسام موسوی ( 406046 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

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

آفلاین
user-avatar
مهدی مهدوی ( 27148 تجربه )
3 سال پیش
تخصص : توسعه دهنده- JS - PHP - لاراول - وردپرس

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

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

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

خیلی ممنونم

آفلاین
user-avatar
محمد صادقیان ( 30884 تجربه )
2 سال پیش
تخصص : برنامه نویس وب - فریم ورک Laravel

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

آفلاین
user-avatar
علی فرمانی ( 52495 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

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

آفلاین
user-avatar
mahdi farhadpour ( 470 تجربه )
2 سال پیش
تخصص : برنامه نویس
آفلاین
user-avatar
Mostafa Nazar ( 106741 تجربه )
1 سال پیش
تخصص : برنامه نویس وب و موبایل

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

آفلاین
user-avatar
علی کلان ( 15730 تجربه )
11 ماه پیش
تخصص : Full-Stack Web Developer,C#,Java,pilot

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

آفلاین
user-avatar
T.chegini ( 1820 تجربه )
10 ماه پیش

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

آفلاین
user-avatar
Nasser Zarre ( 6148 تجربه )
9 ماه پیش

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

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

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

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

آفلاین
user-avatar
Nasser Zarre ( 6148 تجربه )
9 ماه پیش

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

آفلاین
user-avatar
Bahman Aliveisi ( 18187 تجربه )
9 ماه پیش

در فایل 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
        ]
    ]
];

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

آفلاین
user-avatar
مهدی مهدوی ( 27148 تجربه )
9 ماه پیش
تخصص : توسعه دهنده- JS - PHP - لاراول - وردپرس

سلام دوستان
@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 سازگار نیستن ، مثلا ایران سنس یه ورژن یادمه جواب نمیداد
فونت هایی نظیر وزیر و شبنم(خیلی فونت خوبیه ) من تست کردم اوکیه

آفلاین
user-avatar
Nasser Zarre ( 6148 تجربه )
9 ماه پیش

@roj
@m.mahdavi97

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

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

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

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

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

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

آفلاین
user-avatar
Bahman Aliveisi ( 18187 تجربه )
9 ماه پیش

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

@nassi125zarri

آفلاین
user-avatar
Nasser Zarre ( 6148 تجربه )
9 ماه پیش

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

آفلاین
user-avatar
میلاد هدایت پور ( 24231 تجربه )
8 ماه پیش
تخصص : در حال پیشرفت

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

آفلاین
user-avatar
محمد صادقیان ( 30884 تجربه )
5 ماه پیش
تخصص : برنامه نویس وب - فریم ورک Laravel

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

آفلاین
user-avatar
Rezvani ( 3161 تجربه )
2 ماه پیش
تخصص : برنامه نویس PHP/Laravel

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

آفلاین
user-avatar
Rezvani ( 3161 تجربه )
2 ماه پیش
تخصص : برنامه نویس PHP/Laravel

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

آفلاین
user-avatar
Bahman Aliveisi ( 18187 تجربه )
2 ماه پیش

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

برای ارسال پاسخ باید وارد سایت شوید