Dompdf 包在 laravel 中支持其他语言

Posted

技术标签:

【中文标题】Dompdf 包在 laravel 中支持其他语言【英文标题】:Dompdf package other languages support in laravel 【发布时间】:2018-01-24 15:43:07 【问题描述】:

我在 laravel 项目中使用 dompdf 包创建了我的 pdf。但是当我想渲染其他语言(孟加拉语)而不是英语时

???????????????????????????? 

显示。

<body style="font-family: 'AdorshoLipi', Arial, sans-serif !important;">

    <div style="border-style: solid; border-width: 2px; margin: 50px;  padding: 10px;">
        <div align="center">
            <h2>
                 Anti-corruption commission hotline-106
            </h2>
        </div>
        <div>
            <p> Reference No :  $complain->call_ref_id </p>
            -- <br> --
            <p> Date :  $complain->created_at </p>
            <p> Name :  $complain->name </p>
            <p> Address :  $complain->address </p>
            <p> Phone Number :  $complain->phone_number </p>
            <p> Against :  $complain->against </p>
            <p> Sector :  $complain->department </p>
            <p style="font-family: 'AdorshoLipi', Arial, sans-serif !important;"> Type :  $complain->type </p>
            <p> Complain Description :  $complain->complain_description </p>
            <p> Amount :  $complain->amount </p>
            <p> Status :  $complain->status </p>


        </div>

        <div style=" margin-left: 450px; width: 100px; ">
            <hr>
            <label>Signature</label>
        </div>

        <div class="panel-primary">

        </div>

    </div>


</body>

【问题讨论】:

你在用laravel Dompdf包吗? 是的,我正在使用 laravel Dompdf。 希望你包含你的字体文件和设置@font-face? 我将上面的代码添加到我的 pdf 文件中,但是没有用。 检查我的答案并按照给定的步骤,希望你找到解决方案。 【参考方案1】:

您可以将 TrueType 字体支持添加到 laravel Dompdf package。只需按照以下步骤从命令行将 TrueType 字体加载到 dompdf 中。

在这个包中使用 TrueType 字体系列有两种基本的方法:1) 使用 load_font.php 脚本 2) 使用@font-face css 规则在运行时加载字体

1) 使用 load_font.php 脚本load_font.php 是使用命令行运行的脚本,因此您需要从命令行运行命令。您可以从Dompdf utils 轻松获取此脚本

添加此实用程序后,在命令行界面中运行以下命令以从 dompdf 安装目录安装字体。

php load_font.php font_family /pathto/fontfile.ttf

注意: dompdf 目前仅支持 TrueType 字体。因此,在寻找字体时,请确保它采用 TrueType 格式。

2) 使用@font-face css 规则在运行时加载字体 您只需在页面中添加以下样式脚本即可使用 TrueType 字体。

@font-face 
  font-family: 'font_family';
  font-style: normal;
  font-weight: normal;
  src: url(http://example.com/fonts/fontfile.ttf) format('truetype');

加载上述字体系列后,您可以像这样使用它:&lt;div style="font-family: font_family, sans-serif;"&gt;yourtextinotherlanguage&lt;/div&gt;

确保您的文档指定使用 UTF-8,例如 &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;

更多信息也可以在here找到

【讨论】:

@Md.SukelAli:希望你能从我的回答中得到什么? 感谢您的回答 AddWeb Solution Pvt Ltd。运行 php 命令后,我的结果与通常的结果不同。通常结果:无法找到粗体文件。找不到斜体字面文件。找不到bold_italic 人脸文件。将 /home/fonts/firefly.ttf 复制到 /home/dompdf/lib/fonts/firefly.ttf... 为 /home/dompdf/fonts/firefly.ttf... 生成 .afm ?完成 - 创建字体文件。我的结果:将 SolaimanLipi_29-05-06.ttf 复制到 storage/fonts/SolaimanLipi_29-05-06.ttf... 为 storage/fonts/SolaimanLipi_29-05-06 生成 Adob​​e Font Metrics 路径不同。【参考方案2】:

您需要在视图文件的样式标签内添加以下代码

  @font-face 
            font-family: 'iskpota';
            src: url('public_path()/fonts/your-font.ttf') format('truetype') 
        
        body
            font-family: 'your-font', sans-serif; 
        

然后您需要将字体文件包含在存储目录中。为此,在存储文件夹中创建一个名为“fonts”的文件夹,并在字体文件夹中包含“your-font.ttf”文件。

附言。您在存储位置添加的这些字体也应该在 public/fonts 文件夹中可用。

【讨论】:

已使用字体规则。举个例子:文本应该是 আমি 出来就像 আ ম ি【参考方案3】:

为了更好地使用像孟加拉语这样的不同语言,您可以尝试使用 mpf。这个对 utf8 有好处。

【讨论】:

感谢您的回复。我真的不想使用另一个包,我对你建议的包不是很熟悉。【参考方案4】:

尝试使用 utf8 解码您的输出:

utf8_decode($var)

【讨论】:

感谢您的回复。但我无法理解答案。请您详细说明您的答案。 我遇到了一些字符无法显示的问题。一个例子:如果我没记错的话,ä 被显示为一颗星。我使用 UTF-8 来解决这个问题。 (en.wikipedia.org/wiki/UTF-8)。所以这就是为什么我建议使用“utf8_decode”(php.net/manual/en/function.utf8-decode.php)。 确保正确的编码很重要,但你真的不应该使用utf8_decode。它将您的文本重新编码为 iso-8859-1,该编码不支持的任何字符都将转换为问号。

以上是关于Dompdf 包在 laravel 中支持其他语言的主要内容,如果未能解决你的问题,请参考以下文章

laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy

DOMPDF:图像不可读或为空。 (使用 barryvdh/laravel-dompdf)

Dompdf-Laravel Unicode 字符无法正确呈现

Laravel 5.4 pdf generate:下载pdf后,在dompdf中找不到图像或输入未知图像

如何使用 barryvdh/laravel-dompdf 将 PDF 附加到 Laravel 的电子邮件中

dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF