【问题标题】:How to generate PDF with Bangla (Unicode) font using fpdf?如何使用 fpdf 生成带有 Bangla (Unicode) 字体的 PDF?
【发布时间】:2015-07-14 18:34:40
【问题描述】:

我正在开发一个基于 PHP 的系统,我需要在其中生成 PDF 文件以用于报告目的。我正在为此使用 fpdf 库。

现在这些 PDF 文件中可以包含孟加拉语字符。我尝试了很多方法,也尝试了Adding new fonts and encoding support fpdf,但没有一个对我有用。

过去 1 天尝试解决此问题,但未成功。如果有人有任何解决方案或至少知道如何做到这一点。

编辑:

我为此使用了 Solaiman-Lipi 字体。我相应地生成了solaiman-lipi.php & solaiman-lipi.z 文件,然后使用下面的代码生成PDF:

require('fpdf.php');

$pdf = new FPDF();
$pdf->AddFont('SolaimanLipi','','solaiman-lipi.php');
$pdf->AddPage();
$pdf->SetFont('SolaimanLipi','',35);
$str = iconv('UTF-8', 'windows-1252', '??? ??? ????');
$pdf->Write(10,$str);
$pdf->Output();

编辑:

我可以附加一张图片:

编辑:

添加了输出在 PDF 中的外观。这是孟加拉语文本。

【问题讨论】:

  • 你能发布你的字体代码吗?通常当字体无法识别时,FPDF 会抛出错误。您也可以发布该错误消息吗?
  • 你好@MariM,我实际上没有收到任何错误。我的文字显示为?????在pdf中。
  • 您可以编辑您的帖子以包含您处理过的特定于字体的代码吗?这将有助于解决问题。
  • @MariM 请检查我的更新。
  • 您的代码显示字符串'??? ??? ????',您想知道为什么它只打印问号?你用什么编码保存你的 PHP 文件?

标签: php pdf unicode fpdf


【解决方案1】:

您可以使用 mPDF 代替 fpdf 作为库,并使用 nikosh 作为孟加拉字体。首先,您必须将 nikosh.ttf 字体文件复制到 mpdf 库的 /ttfonts 文件夹中。 然后,更改 config_fonts.php 文件。添加

"nikosh" => array(
    'R' => "Nikosh.ttf",
    'useOTL' => 0xFF,       
    ), 

在 fontdata 数组中。 由于孟加拉语与印度语有相似之处,所以我在印度语字体后添加了孟加拉语字体(Nikosh)信息。

详情可以看以下文章:

http://jobnstudy.blogspot.com/2016/10/how-to-write-bengali-bangla-unicode-pdf.html

【讨论】:

【解决方案2】:

我想我找到了这个问题的解决方案。我尝试了一些支持 PHP 的库(dompdf、TCPDF、FPDF、mPDF),但并非所有库都能正常工作。我没有找到 dompdf 的任何 unicode 支持, tcpdf 工作,但字体坏了。所以我尝试了 mPDF,它给了我预期的输出。 我正在将此库用于我的 laravel 项目。要在 laravel 项目中使用 mPDF,您需要遵循 laravel-mpdf 的文档。 链接:https://github.com/niklasravnsborg/laravel-pdf

成功安装库后,您必须执行以下步骤以支持其他语言或孟加拉语。

  1. 首先下载您支持的语言的字体(即:对于孟加拉语,我已经下载了 solaimanLipi.ttf)并将其保存在资源文件夹内的字体文件夹中。如果没有字体文件夹,只需创建它。 2.在 config/pdf.php 文件中将这些代码添加到返回数组中

    'font_path' => base_path('resources/fonts/'), 'font_data' => [ 'examplefont' => [ 'R' => 'ExampleFont-Regular.ttf', // 常规字体 'B' => 'ExampleFont-Bold.ttf', // 可选:粗体 'I' => 'ExampleFont-Italic.ttf', // 可选:斜体 'BI' => 'ExampleFont-Bold-Italic.ttf' // 可选:粗斜体字体 'useOTL' => 0xFF,
    'useKashida' => 75, ] // ...根据需要添加任意数量。 ]

examplefont 是您想要使用的属性名称。但在此属性中粘贴您的字体名称。

例子:

'bangla' => [
            'R'  => 'SolaimanLipi.ttf',    // regular font
            'B'  => 'SolaimanLipi.ttf',       // optional: bold font
            'I'  => 'SolaimanLipi.ttf',     // optional: italic font
            'BI' => 'SolaimanLipi.ttf' // optional: bold-italic font
            'useOTL' => 0xFF,   
            'useKashida' => 75, 
        ]

现在在您的视图文件中使用这个 CSS 脚本:

<style>
body {
    font-family: 'examplefont', sans-serif;
}
</style>

在您的控制器中:

function generate_pdf() {
    $data = [
        'foo' => 'bar'
    ];
    $pdf = PDF::loadView('pdf.document', $data);
    return $pdf->stream('document.pdf');
}

提示:pdf.document 是您的视图文件名。 在命名空间的顶部使用 PDF

如果您正确执行此步骤,它将 100% 工作。 这是我的输出 Output

注:这是我的第一篇文章。如果我在以正确的格式撰写评论时犯了任何错误,请考虑轻描淡写。 谢谢, Mahabubul Islam Mehedi

【讨论】:

    【解决方案3】:

    它适用于孟加拉语。您可以通过此过程使用任何字体。 我将此包用于我的 laravel 项目barryvdh/laravel-dompdf 通过引用这个包,解决方案如下:

    1. 默认情况下,它使用您的 storage>fonts 文件夹来存储字体。对于孟加拉语,我将使用 SolaimanLipi.ttf 字体。从此 URL solaimanlipi 下载字体并将它们保存到您的 storage>fonts 文件夹中。
    2. 解压文件,字体名称如下"SolaimanLipi_29-05-06.ttf" ..etc。将其重命名为“SolaimanLipi.ttf”
    3. 转到名为 storage/fonts/dompdf_font_family_cache.php 的文件 如果您没有此文件,请确保您已运行此命令 php 工匠供应商:publish --provider="Barryvdh\DomPDF\ServiceProvider"
    4. 现在在文件 storage/fonts/dompdf_font_family_cache.php 中添加以下行:

    例子:

    'bangla' => array(
        'R' => $fontDir . '/SolaimanLipi',    // regular font
        'B' => $fontDir . '/SolaimanLipi',       // optional: bold font
        'I' => $fontDir . '/SolaimanLipi',     // optional: italic font
        'BI' => $fontDir . '/SolaimanLipi', // optional: bold-italic font
        'useOTL' => 0xFF,
        'useKashida' => 75,
    )
    

    您必须像这样在 HTML 或正文标签中指定此字体系列:

    body {
        font-family: Arial, sans-serif, 'bangla';
    }
    

    您也可以通过这种方式使用 'kalpurush' 和其他孟加拉字体。通过在 font-family 组中指定更多系列,您可以将多种语言打印到您的 pdf 中。

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 2018-03-29
      • 1970-01-01
      • 2020-12-05
      • 2018-05-01
      相关资源
      最近更新 更多