如何使用fpdf使用Bangla(Unicode)字体生成PDF?

时间:2015-05-05 06:46:39

标签: php pdf unicode fpdf

我正在研究基于PHP的系统,我需要生成PDF文件以用于报告目的。我正在使用fpdf库。

现在这些PDF文件中可能有Bangla字符。我尝试了很多方法,并尝试了Adding new fonts and encoding support fpdf,但没有一个适合我。

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

修改

我使用了Solaiman-Lipi字体。我生成了$wpdb->query( $wpdb->prepare( "Update " . $prefix . "postmeta Set meta_key = %s Where post_id = %d And meta_key Like '%product_price%'" , 'wpc_product_price',$supportMetaID ) ); &相应地solaiman-lipi.php文件,然后在代码下方使用以生成PDF:

solaiman-lipi.z

修改

我可以选择附加图片:

Unicode problem while generating PDF

修改

添加了PDF中的输出内容。这是Bangla Text。

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以使用mPDF而不是fpdf作为库,并使用nikosh作为bangla字体。首先,你必须在mpdf库的/ ttfonts文件夹中复制nikosh.ttf字体文件。  然后,更改config_fonts.php文件。添加

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

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

有关详细信息,您可以看到以下文章:

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

答案 1 :(得分:1)

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

在成功安装库之后,您需要执行以下步骤,以获取其他语言或bangla支持。

  1. 首先下载支持语言的字体(例如:bangla我已经下载了solaimanLipi.ttf)并将其保存到资源文件夹内的fonts文件夹中。如果没有字体文件夹就可以创建它。 2.在config / pdf.php文件中,在返回数组

    中添加这些代码

    'font_path'=> BASE_PATH( '资源/字体/'),     'font_data'=> [         'examplefont'=> [             'R'=> 'ExampleFont-Regular.ttf',//常规字体             'B'=> 'ExampleFont-Bold.ttf',//可选:粗体字体             '我'=> 'ExampleFont-Italic.ttf',//可选:斜体字体             'BI'=> 'ExampleFont-Bold-Italic.ttf'//可选:粗体斜体字体             'useOTL'=> 0xFF时,
                'useKashida'=> 75,         ]         // ...添加任意数量的内容。     ]

  2. 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

    N.B:这是我的第一篇文章。如果我以正确的格式写评论有任何错误,请考虑一下。 谢谢, Mahabubul Islam Mehedi

答案 2 :(得分:0)

它适用于孟加拉语。您可以通过此过程使用任何字体。 我将此包用于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 artisan vendor: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标签中指定此字体系列:

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

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