首页 > 解决方案 > Dompdf-Laravel Unicode 字符无法正确呈现

问题描述

我正在使用barryvdh/laravel-dompdf在我的 laravel 应用程序中加载 PDF。我需要将自定义unicode 字体(僧伽罗语)加载到 pdf 中。为此,我下载了外部字体并复制了字体文件夹,然后通过load_font.phpstorage/fonts将其加载到目录。我在刀片文件中使用了 css,如下所示:

@font-face {
    font-family: Noto-2;
    font-display: block;
    src: url({{ asset('fonts/NotoSansSinhala-Light.ttf') }}) format("truetype");
}
body {
    font-family: Noto-2 !important;
    font-style: normal;
    font-weight: 500;
    font-size: 14px!important;
}

我还设置了元标记 UTF-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

HTML部分:

<td class="td_cus" rowspan="5">
   <span class="title">මික් ආහාර සේවය&lt;/span>
   <p class="company_address">
      2 වැනි මහළ,<br>
      <span style="font-family: helvetica !important;">M I C </span>සුපර් සෙන්ටර්,<br>
      මොරටුව,<br>
      ශ්‍රී ලංකාව.
   </p>
</td>

Laravel 控制器:

 $path = Storage::disk('local')->path("letters(".$letterCount."-letters).pdf");
 $pdf = PDF::loadview('templates.letterSinhala', ['details' => $details])
        ->setPaper('a4', 'portrait')
        ->save($path);

当我正常加载我的 html 页面时,字体工作得很好。但是,当我尝试在 PDF 中加载字体时,字体无法正确显示。有人可以指导我如何正确加载字体。

在普通页面(HTML 视图)上,它显示如下:

HTML 视图 - 正确的文本

当我生成 PDF 时,它显示如下:

PDF 视图 - 不正确的文本

注意:请看上面两张图,可以很容易理解问题;

问题是僧伽罗文本在 PDF 上显示不正确,但是当我将其复制并粘贴到某处时,文本会正确显示。

关于如何解决这个问题的任何想法?请帮忙..

标签: phphtmllaravelutf-8dompdf

解决方案


我们使用Mpdf找到了解决方案,我们将库更改为Mpdf。Mpdf很多Unicode 字体,还包括 僧伽罗 Unicode 字体- ( Kaputaunicode )。

在僧伽罗语的情况下,您只能使用Kaputaunicode字体,因为其他僧伽罗语 unicode 字体不支持Mpdf,其他僧伽罗语 unicode 字体呈现与Dompdf相同。

但是字体渲染不完美,一些复杂的组合渲染不正确。

  1. 文字差异。图片
  2. 段落文本
  • 你可以从这张图片中得到想法

无论如何,在我的情况下, Mpdf文本渲染比Dompdf好。

CSS样式与比较Dompdf不同。
并且 Mpdf 的渲染时间比 Dompdf 少

在控制器中:

use Mpdf\Mpdf;

$path = Storage::disk('local')->path("_letters(".$letterCount."-letters).pdf");
$view = View::make('templates.letterSinhala', ['details' => $details]);
$html = $view->render();
$mpdf = new Mpdf(['mode' => 'UTF-8', 'format' => 'A4-P', 'autoScriptToLang' => true, 'autoLangToFont' => true]);
$mpdf->WriteHTML($html);
$mpdf->Output($path);

推荐阅读