Alisha Lamichhane
Alisha Lamichhane

Reputation: 514

Dompdf problem with displaying Nepali character

I am using Dompdf to create a pdf for my Nepali content. I have written following code in my controller:

public function generatePDF(Request $request){
  $data = $this->news->where('slug', $request->slug)->first();
  $html = "<!DOCTYPE html>
  <html>
  <head>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
    <meta charset='UTF-8'>
      <title>". $data->title ."</title>
      <style>
      @font-face {
        font-family: preeti;
        font-style: normal;
        font-weight: 400;
        src: url('{{ asset('/frontend/fonts/preeti.ttf') }}') format('truetype');
      }
      </style>
  </head>
  <body style='font-family: preeti;'>
      <img src='".$data->image ."' style='width: 100%; height: auto'>
      ". $data->description ."
  </body>
  </html>";
  $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
  $pdf = PDF::setOptions(['dpi' => 150, 'defaultFont' => 'preeti']);
  $pdf = PDF::loadHTML($html);      
  return $pdf->download('sample.pdf');
}

But this gives ???? as an output of the Nepali content inside the canvas. However, <title>". $data->title ."</title> displays right character. What can I do to fix this?

As you can see I have kept UTF-8 in my meta also have included CSS for the font but it does not seem to work. I have also included mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); but it made no change. Does anyone has fixed this kind of issue?

The output of $data->description is

<p>अहिले कार्यान्वयनको चरणमा रहेको नेपालको संघीय प्रणालीमा एकभन्दा बढी संसद् र 

कार्यपालिकाहरू छन् । तर, पनि संघीय प्रणालीबारे हामीकहाँ एक प्रकारको नका ▶
<p>स्थानीय संरचना भनेको तपाईं, हामी सबैले आ&ndash;आफ्नै घरदैलोमा भेट्ने सरकार हो । स्थानीय तह पुनर्संंरचना गर्दा संख्या घटाउनुलाई नै बहादुरी ठानियो । ७५३ वटा स् ▶
<p>स्थानीय तहलाई अहिले जति अधिकार दिइएको छ, त्यो पनि धान्न सक्ने ल्याकत तिनमा देखिंदैन । संविधानले दिएका धेरै अधिकार स्थानीय तहमा कार्यान्वयन भइरहेका छैनन् । ति ▶
<p>संविधानमा पनि केही त्रुटिहरू छन् । संविधान बनाउँदा स्थानीय तहलाई व्यवस्था गरिएका अधिकारहरूबारे आवश्यक गृहकार्य भएन, सोचिएन । क्षमता विनाको भारी बोकाउन खोज्दा ▶
<p><strong>संघीयताः कतिपय अमिल्दा पक्ष</strong><br />संविधानको कार्यान्वयन हुँदै जाँदा प्रदेशहरू निरन्तर असान्दर्भिक र भूमिकाहीन देखिंदै गएका छन् । अहिले संविधा ▶
<p>जत्रो आकारमा ७५३ वटा स्थानीय तह रचना गरिएको छ र त्यसले जुन प्रकारको राजनीतिक र प्रशासनिक संरचनाको माग गर्छ; त्यो कतै प्रदेशकै विकल्प सोचेर गरिएको त होइन भन्न ▶
<p>हुन पनि, काठमाडौंमा बस्ने धेरैजसोलाई संघीयता मन परेको छैन । कार्यकारी जिम्मेवारी लिएको हुनाले यसको ठूलो अपजस चाहिं सत्तारूढ दललाई नै जान्छ । प्रधानमन्त्रीलाई ▶
<p>तर प्रदेशलाई कमजोर पार्दा अन्ततः संविधानको कार्यान्वयन कमजोर हुन्छ । किनभने, संघीय संरचनाको एउटा अङ्ग कमजोर भएपछि त्यसको असर अरू अङ्गमा स्वतः पर्छ र संविधान  ▶
<p>प्रदेशको कुरा गर्दा म अहिले तीनवटा मह&OElig;वपूर्ण पक्ष देख्छु । पहिलो, प्रदेशहरूले आफ्नो विशिष्ट उपस्थिति देखाउन सकिरहेका छैनन् । प्रदेश सभा छ, त्यसका सदस्य ▶
<p>संविधानको अनुसूचीको व्यवस्था अनुसार संघ, प्रदेश र स्थानीय तहको अधिकार छुट्याउन मुख्यसचिवको कार्यदलले लामो कार्यसूची तयार पारेको थियो । पछि त्यसैको आधारमा &ls ▶
<p><strong>परिणामतः</strong> सबै कुरामा प्रदेशहरूले सिंहदरबारकै सिको गर्न थाले । सिंहदरबारको योजना आयोगको साटो प्रदेशमा नीति आयोगहरू बने । सिंहदरबारकै जस्ता अरू ▶
<p>केन्द्र या काठमाडौंलाई नक्कल गरेका नमूना ठाउँठाउँमा भेट्न सकिन्छ । जस्तो, गण्डकी प्रदेशमा &lsquo;मुख्यमन्त्री नमूना कृषि कार्यक्रम&rsquo; छ । लुम्ले, जहाँ हि ▶
<p><strong>केन्द्रको प्रतिछायाँका रूपमा प्रदेश</strong><br />संघ र ६ वटा प्रदेश सभामा नेकपाको बहुमत छ । त्यसैले त्यहाँको राजनीति र नीति निर्माणमा ऊ हावी हुने कु ▶
<p>संघीयता कार्यान्वयनको सन्दर्भमा प्रदेश&ndash;२ को भिन्न र सार्थक भूमिका किन पनि अपेक्षित थियो भने त्यो प्रदेश सिंहदरबारमा बस्नेहरू भन्दा फरक दलको नेतृत्वमा छ ▶
<p>प्रदेशहरूले कसरी अगाडि जान सकिन्छ भन्ने चिन्तन गरेकै देखिएन । संविधान कार्यान्वयन भएको चार वर्ष बितिसक्दा पनि प्रदेशहरूले आफ्नो अस्तित्व नागरिकसामु पु&yen;या ▶
<p><strong>प्रदेशका लागि &lsquo;फूटनोट&rsquo;</strong><br />हाम्रा यावत् समस्या र विसङ्गतिका निम्ति संविधानलाई दोष दिएर मात्र पुग्दैन । सबैभन्दा ठूलो खाँचो सकार ▶
<p>अहिले प्रदेशहरू बढी नै केन्द्रीय सत्तामुखी देखिएका छन् । सात वटै प्रदेशबाट एकैचोटि भिन्न व्यवहारको अपेक्षा गर्न नसकिएला तर, एक&divide;दुई वटाले यसप्रकारको भू ▶
<p>अहिले सबै प्रदेशले कर्मचारीको कुरा उठाउँछन् । संविधानले प्रदेशहरूलाई लोकसेवा आयोग बनाउन अधिकार दिएको छ । त्यसअनुरूप सबै प्रदेशले लोकसेवा आयोग बनाएका पनि छन्  ▶
<p>प्रदेशले बनाएका कानून भोलि संघीय कानूनसित बाझे भने त्यो त्यसैबेला छिनोफानो हुने कुरा हो । तर, अहिले संघीय कानून नै नबनेका बेला त्यससँग बाझिने भन्ने कुरा कहाँ ▶
<p>त्यस्तै; विकासको क्षेत्रमा पनि प्रदेशले एउटा, दुइटा नमूना कार्यक्रम सञ्चालन गर्न सक्थे । जस्तो&mdash; प्रदेश&ndash;२ मा &lsquo;बेटी पढाओ, बेटी बचाओ&rsquo; मु ▶
<p>संविधानले प्रदेशहरूलाई प्रदेश तहका योजना बनाएर कार्यान्वयन गर्न छूट दिएको छ । प्रदेश तहको योजना भनेको के हो ? त्यसको पहिचान गर्न सकिन्थ्यो । मानौं, प्रदेश तह ▶
<p>जलविद्युत्मा सम्भाव्यता भएका प्रदेशका नेतृत्व बसेर सहमतिका आधारमा कतै १०० मेगावाट, कतै २०० मेगावाट त कतै ९०० मेगावाटसम्मका जलविद्युत् आयोजना सञ्चालन गर्ने भन ▶
<p><strong>संविधान बुझ्ने सूत्र</strong><br />अहिले मिडिया, अझ &lsquo;सोसल मिडिया&rsquo; मा संघीयता &lsquo;चल्दैन&rsquo; भन्ने कुरा बारम्बार आइरहन्छ । जबकि, संव ▶
<p>यस्तो ऐतिहासिक पृष्ठभूमिमा आमनागरिकमा अस्थिर सोचाइ आउनु त्यति अव्यावहारिक र अस्वाभाविक होइन । हाम्रोमा सधैं अस्थिरताको जुन किसिमको पृष्ठभूमि रह्यो त्यसले पनि ▶
<p>हामीमा संविधानप्रतिको चेतना, संविधानप्रतिको बुझाइको अभाव छ । यो असाध्य मह&OElig;वपूर्ण पक्ष हो । संविधान कार्यान्वयनको शुरूआती चरणमा यस्तो चेतना सत्तारूढ दल  ▶
<p>संविधान कार्यान्वयनले अहिले एउटा बाटो लिंदैछ । घोषणा गर्दा जति चुनौती थिए तिनलाई पार गरेर संविधान अगाडि बढेको छ । सत्ता सञ्चालन गर्ने दलको कार्यशैलीले भन्दा  ▶
<p><em><strong>राजनीतिशास्त्री खनालसँगको वार्तामा आधारित</strong></em></p>

Upvotes: 1

Views: 1649

Answers (4)

Suraj Dott
Suraj Dott

Reputation: 109

There are some limitations in dompdf. So Nepali fonts could not be rendered properly. Don't waste your time trying different fonts in dompdf. Please use MPDF, and it's better than dompdf. You can render the Nepali font as you expected.

GitHub Link: https://github.com/mccarlosen/laravel-mpdf

Controller Code:

public function download(string $id)
{   
     $pdf = PDF::loadView('admin.applications.pdf');

     return $pdf->download('pdf.pdf');
}

Blade File:

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head>
        <style>
            body {
                font-family: "freesans", sans-serif;
            }
        </style>
    </head>

    <body>
        <p>
            १४ चैत, फिक्कल । पछिल्लो समय इलाममा अदुवाखेती विस्तार हुँदै गएको छ । अदुवाखेतीले यहाँका किसानको जीवनस्तरमा परिवर्तन ल्याउन थालेपछि खेती विस्तार भएको हो । किसानले व्यावसायिकरुपमा अदुवाखेती गरी मनग्य आम्दानी गर्न सफल भएका छन् ।
            परम्परागत शैलीको अदुवाखेतीबाट आधुनिकीकरण हुन थालेपछि उत्पादन र आम्दानीमा वृद्धि भएको किसानको भनाइ छ ।
        </p>
    </body>
</html>

PDF rendered from MPDF: enter image description here

Upvotes: 0

samir maharjan
samir maharjan

Reputation: 1

I am using laravel to export a table which has nepali contents tried using dompdf but nepali character were not supported later found this solution in stack and worked for me..

public function generatePDF()
{
    $monitors = Monitor::all();
    $test = View('pages.printables.monitor.print', compact('monitors'))->render();
    $html = mb_convert_encoding($test, 'HTML-ENTITIES', 'UTF-8');
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    $pdf::setFontSubSetting(true);
    $pdf::setFont('freeserif', '', 12);
    // $pdf->SetFont('dejavusans', '', 14, '', true);
    $pdf::AddPage();
    $pdf::writeHTML($html, true, 0, true, true);
    $output = $pdf::Output('001.pdf', 'I');

    return $output;
}

Upvotes: 0

Sudeep Bashistha
Sudeep Bashistha

Reputation: 1618

I'm way too late for this, but for someone who will need this in future, This solution worked for me. This uses the Dompdf\Dompdf.

    $pdfOptions = new Options();
    $pdfOptions->setChroot(storage_path('fonts/'));
    $pdfOptions->set('fontDir', storage_path('fonts/'));
    $pdfOptions->set('fontCache', storage_path('fonts/'));
    $pdfOptions->set('defaultFont', 'Preeti');

    $pdf = new Dompdf($pdfOptions);

    $pdf->getFontMetrics()->registerFont(
        ['family' => 'Preeti', 'style' => 'normal', 'weight' => 'normal'],
        storage_path('fonts/') . 'Preeti.ttf'
    ); 

    $pdf->loadHtml(\View::make('pdf.template', compact('data'))->render());

    $pdf->render();

    $pdf->stream();

Upvotes: -1

bhucho
bhucho

Reputation: 3420

As Mentioned in the comments, dompdf/domPDF after following the steps as mentioned above does not give the desired results, see this,

I suggest the use of TCPDF. elibyy / tcpdf-laravel provides a way to add tcpdf in laravel.
Install it using
composer require elibyy/tcpdf-laravel.

Add this to your provider in config/app.php

Elibyy\TCPDF\ServiceProvider::class,

Then In your controller add the lines

use Elibyy\TCPDF\Facades\TCPDF;

public function generatePDF(){
        $data = new \stdClass(); //can be your model, I have just used empty object
        $public_path = public_path();
        $data->title = "<p>प्रणालीबारे हामीकहाँ एक</p>";
        $data->description =  "<p>अहिले कार्यान्वयनको चरणमा रहेको नेपालको संघीय प्रणालीमा एकभन्दा बढी संसद् र 

        कार्यपालिकाहरू छन् । तर, पनि संघीय प्रणालीबारे हामीकहाँ एक प्रकारको नका ▶
        <p>स्थानीय संरचना भनेको तपाईं, हामी सबैले आ&ndash;आफ्नै घरदैलोमा भेट्ने सरकार हो । स्थानीय तह पुनर्संंरचना गर्दा संख्या घटाउनुलाई नै बहादुरी ठानियो । ७५३ वटा स् ▶
        <p>स्थानीय तहलाई अहिले जति अधिकार दिइएको छ, त्यो पनि धान्न सक्ने ल्याकत तिनमा देखिंदैन । संविधानले दिएका धेरै अधिकार स्थानीय तहमा कार्यान्वयन भइरहेका छैनन् । ति ▶
        <p>संविधानमा पनि केही त्रुटिहरू छन् । संविधान बनाउँदा स्थानीय तहलाई व्यवस्था गरिएका अधिकारहरूबारे आवश्यक गृहकार्य भएन, सोचिएन । क्षमता विनाको भारी बोकाउन खोज्दा ▶
        <p><strong>संघीयताः कतिपय अमिल्दा पक्ष</strong><br />संविधानको कार्यान्वयन हुँदै जाँदा प्रदेशहरू निरन्तर असान्दर्भिक र भूमिकाहीन देखिंदै गएका छन् । अहिले संविधा ▶
        <p>जत्रो आकारमा ७५३ वटा स्थानीय तह रचना गरिएको छ र त्यसले जुन प्रकारको राजनीतिक र प्रशासनिक संरचनाको माग गर्छ; त्यो कतै प्रदेशकै विकल्प सोचेर गरिएको त होइन भन्न ▶
        <p>हुन पनि, काठमाडौंमा बस्ने धेरैजसोलाई संघीयता मन परेको छैन । कार्यकारी जिम्मेवारी लिएको हुनाले यसको ठूलो अपजस चाहिं सत्तारूढ दललाई नै जान्छ । प्रधानमन्त्रीलाई ▶
        <p>तर प्रदेशलाई कमजोर पार्दा अन्ततः संविधानको कार्यान्वयन कमजोर हुन्छ । किनभने, संघीय संरचनाको एउटा अङ्ग कमजोर भएपछि त्यसको असर अरू अङ्गमा स्वतः पर्छ र संविधान  ▶
        <p>प्रदेशको कुरा गर्दा म अहिले तीनवटा मह&OElig;वपूर्ण पक्ष देख्छु । पहिलो, प्रदेशहरूले आफ्नो विशिष्ट उपस्थिति देखाउन सकिरहेका छैनन् । प्रदेश सभा छ, त्यसका सदस्य ▶
        <p>संविधानको अनुसूचीको व्यवस्था अनुसार संघ, प्रदेश र स्थानीय तहको अधिकार छुट्याउन मुख्यसचिवको कार्यदलले लामो कार्यसूची तयार पारेको थियो । पछि त्यसैको आधारमा &ls ▶
        <p><strong>परिणामतः</strong> सबै कुरामा प्रदेशहरूले सिंहदरबारकै सिको गर्न थाले । सिंहदरबारको योजना आयोगको साटो प्रदेशमा नीति आयोगहरू बने । सिंहदरबारकै जस्ता अरू ▶
        <p>केन्द्र या काठमाडौंलाई नक्कल गरेका नमूना ठाउँठाउँमा भेट्न सकिन्छ । जस्तो, गण्डकी प्रदेशमा &lsquo;मुख्यमन्त्री नमूना कृषि कार्यक्रम&rsquo; छ । लुम्ले, जहाँ हि ▶
        <p><strong>केन्द्रको प्रतिछायाँका रूपमा प्रदेश</strong><br />संघ र ६ वटा प्रदेश सभामा नेकपाको बहुमत छ । त्यसैले त्यहाँको राजनीति र नीति निर्माणमा ऊ हावी हुने कु ▶
        <p>संघीयता कार्यान्वयनको सन्दर्भमा प्रदेश&ndash;२ को भिन्न र सार्थक भूमिका किन पनि अपेक्षित थियो भने त्यो प्रदेश सिंहदरबारमा बस्नेहरू भन्दा फरक दलको नेतृत्वमा छ ▶
        <p>प्रदेशहरूले कसरी अगाडि जान सकिन्छ भन्ने चिन्तन गरेकै देखिएन । संविधान कार्यान्वयन भएको चार वर्ष बितिसक्दा पनि प्रदेशहरूले आफ्नो अस्तित्व नागरिकसामु पु&yen;या ▶
        <p><strong>प्रदेशका लागि &lsquo;फूटनोट&rsquo;</strong><br />हाम्रा यावत् समस्या र विसङ्गतिका निम्ति संविधानलाई दोष दिएर मात्र पुग्दैन । सबैभन्दा ठूलो खाँचो सकार ▶
        <p>अहिले प्रदेशहरू बढी नै केन्द्रीय सत्तामुखी देखिएका छन् । सात वटै प्रदेशबाट एकैचोटि भिन्न व्यवहारको अपेक्षा गर्न नसकिएला तर, एक&divide;दुई वटाले यसप्रकारको भू ▶
        <p>अहिले सबै प्रदेशले कर्मचारीको कुरा उठाउँछन् । संविधानले प्रदेशहरूलाई लोकसेवा आयोग बनाउन अधिकार दिएको छ । त्यसअनुरूप सबै प्रदेशले लोकसेवा आयोग बनाएका पनि छन्  ▶
        <p>प्रदेशले बनाएका कानून भोलि संघीय कानूनसित बाझे भने त्यो त्यसैबेला छिनोफानो हुने कुरा हो । तर, अहिले संघीय कानून नै नबनेका बेला त्यससँग बाझिने भन्ने कुरा कहाँ ▶
        <p>त्यस्तै; विकासको क्षेत्रमा पनि प्रदेशले एउटा, दुइटा नमूना कार्यक्रम सञ्चालन गर्न सक्थे । जस्तो&mdash; प्रदेश&ndash;२ मा &lsquo;बेटी पढाओ, बेटी बचाओ&rsquo; मु ▶
        <p>संविधानले प्रदेशहरूलाई प्रदेश तहका योजना बनाएर कार्यान्वयन गर्न छूट दिएको छ । प्रदेश तहको योजना भनेको के हो ? त्यसको पहिचान गर्न सकिन्थ्यो । मानौं, प्रदेश तह ▶
        <p>जलविद्युत्मा सम्भाव्यता भएका प्रदेशका नेतृत्व बसेर सहमतिका आधारमा कतै १०० मेगावाट, कतै २०० मेगावाट त कतै ९०० मेगावाटसम्मका जलविद्युत् आयोजना सञ्चालन गर्ने भन ▶
        <p><strong>संविधान बुझ्ने सूत्र</strong><br />अहिले मिडिया, अझ &lsquo;सोसल मिडिया&rsquo; मा संघीयता &lsquo;चल्दैन&rsquo; भन्ने कुरा बारम्बार आइरहन्छ । जबकि, संव ▶
        <p>यस्तो ऐतिहासिक पृष्ठभूमिमा आमनागरिकमा अस्थिर सोचाइ आउनु त्यति अव्यावहारिक र अस्वाभाविक होइन । हाम्रोमा सधैं अस्थिरताको जुन किसिमको पृष्ठभूमि रह्यो त्यसले पनि ▶
        <p>हामीमा संविधानप्रतिको चेतना, संविधानप्रतिको बुझाइको अभाव छ । यो असाध्य मह&OElig;वपूर्ण पक्ष हो । संविधान कार्यान्वयनको शुरूआती चरणमा यस्तो चेतना सत्तारूढ दल  ▶
        <p>संविधान कार्यान्वयनले अहिले एउटा बाटो लिंदैछ । घोषणा गर्दा जति चुनौती थिए तिनलाई पार गरेर संविधान अगाडि बढेको छ । सत्ता सञ्चालन गर्ने दलको कार्यशैलीले भन्दा  ▶
        <p><em><strong>राजनीतिशास्त्री खनालसँगको वार्तामा आधारित</strong></em></p> "; 
        $html = "<!DOCTYPE html>
        <html>
        <head>
          <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
          <meta charset='UTF-8'>
            <title>". $data->title ."</title>
            <style>
            @font-face {
              font-family: 'preeti';
              font-style: normal;
              font-weight: 400;
              src:url('".$public_path."/public/PREETI.TTF' format('woff');
            }
            </style>
        </head>
        <body style='font-family: preeti;'>
            ". $data->description ."
        </body>
        </html>";
        $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
        
        
        $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
        $pdf::setFontSubSetting(true);
        $pdf::setFont('freeserif','',12);
        // $pdf->SetFont('dejavusans', '', 14, '', true);
        $pdf::AddPage();
        $pdf::writeHTML($html, true, 0, true, true);
        $output = $pdf::Output('001.pdf', 'I');

        return $output;    
      }

Should get output like this.

enter image description here

Upvotes: 1

Related Questions