【问题标题】:Dompdf-Laravel not working with Unicode characterDompdf-Laravel 不适用于 Unicode 字符
【发布时间】:2018-02-08 03:14:49
【问题描述】:

我将 Laravel 5.5 与 DOMPDF 一起使用,它在英语中工作正常,但不适用于 Unicode,它总是向我输出 ???? 符号

控制器

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PDF;

class PdfController extends Controller
{
    public function export(){
        $data['title']="Print Report";
        $pdf = PDF::loadView('pdf.invoice', $data);
        return $pdf->download('invoice.pdf');
    }
}

刀片

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <style>
        @font-face {
            font-family: khmer;
            font-style: normal;
            font-weight: 400;
            src: url({{asset('fonts/khmer.ttf')}}) format('true-type');
        }
    </style>

</head>
<body>
    កម្ពុជាក្រោម
</body>
</html>

结果?????????

【问题讨论】:

  • 改用UTF-16。你计算有高棉语言支持吗?
  • 是的,我的电脑有高棉语
  • 我试了 UTF-16 还是不行
  • 改进格式

标签: php laravel


【解决方案1】:

您只需在正文中添加 font-family: DejaVu Sans; ,或者您也可以将字体系列设置为您要在其中显示 Unicode 字符的任何特定 div。 p>

对于身体: body{font-family: DejaVu Sans;}

对于特定的 div: &lt;div style="font-family: DejaVu Sans;"&gt; --- &lt;/div&gt;

希望这会有所帮助。

【讨论】:

  • 为什么要专门使用那种字体?
  • @Psychemaster 实际上还有另外两种字体(** {Arial Unicode MS,Lucida Sans Unicode}**),但它们不像这个那样友好。 DejaVu Sans 是一种开源字体,捆绑在许多 Linux 中(例如,Ubuntu、OpenSUSE、Mandriva)。其他显示 Unicode 的字体不是开源的。您可以从此给定链接 xahlee.info/js/unicode_font_comparison.html 获取有关此的完整信息
【解决方案2】:

@Plan-B

我使用这个包,它与 Dompdf-Laravel 库的工作方式相同(Dompdf-Laravel 库适用于其他语言,但不适用于高棉字体)。

  • composer require niklasravnsborg/laravel-pdf
  • 它有一个关于字体安装的好文档:https://mpdf.github.io/
  • 安装软件包后,转到其 repo https://github.com/niklasravnsborg/laravel-pdf 阅读说明。
  • 运行php artisan vendor:publish 从命令提示符中选择库。您将在config 目录中获得pdf.php
  • 现在您需要从文档https://mpdf.github.io/fonts-languages/available-fonts-v6.html 中选择合适的高棉字体
  • 在文档中,它从两个高棉字体网站推荐。您必须从网站下载字体,否则字体将无法正确显示。
  • 下载字体并存储在项目中的某个位置 - 默认情况下,config/pdf.php 选择 resources/fonts 目录 这是我在pdf.php 中的设置
// some code here...
'font_path' => base_path('resources/fonts/'),
  'font_data' => [
    "khmerosmoul" => [/* Khmer */
      'R' => "KhmerOSmuol.ttf",
      'useOTL' => 0xFF,
    ],
    "khmerosmoullight" => [/* Khmer */
      'R' => "KhmerOSmuollight.ttf",
      'useOTL' => 0xFF,
    ],
    "khmerosbokor" => [/* Khmer */
      'R' => "KhmerOSBokor.ttf",
      'useOTL' => 0xFF,
    ],
    "khmerosmoulpali" => [/* Khmer */
      'R' => "KhmerOSmuolpali.ttf",
      'useOTL' => 0xFF,
      'useKashida' => 75
    ]
    // ...add as many as you want.
  ]

注意:您可能会遇到 pdf html 结构的问题。从 repo 中复制其模板示例并根据需要重新设计它。 https://github.com/niklasravnsborg/laravel-pdf/blob/master/tests/views/exposify-expose.html

【讨论】:

    【解决方案3】:

    我试图在我的应用程序中解决类似的问题,我所做的是使用 mb_convert_encoding 函数转换了视图。

    在你的情况下,我会这样:

        $data['title']="Print Report";
        $pdf = mb_convert_encoding(\View::make('pdf.invoice', $data), 'HTML-ENTITIES', 'UTF-8'));
        return PDF::loadHtml($pdf)->download('invoice.pdf');
    

    还要注意字体设置。您需要支持 UTF-8 字符集。

    【讨论】:

      【解决方案4】:

      这是因为您的服务器不支持您的字体,您需要为您的服务器安装支持您的Unicode字体的字体。

      要生成 PDF,包使用系统字体。

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 2019-12-23
        • 2013-08-03
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 2016-12-12
        相关资源
        最近更新 更多