Bangla(Unicode)字体在tcpdf中无法正确呈现

时间:2015-09-06 08:28:05

标签: php pdf unicode fonts tcpdf

我正面临使用TCPDF库在php中生成pdf的问题。我需要正确显示bangla字体。我试图添加一些bangla字体(即SolaimanLipi.ttf,SutonnyOMJ.ttf,Siyamrupali.ttf,Nikosh.ttf等)。我可以在pdf上看到bangla字体,但字体显示不正确。它错位了这个词。

通过添加此字体,我看到/ fonts /目录上已成功创建了3个文件“solaimanlipi.ctg.z”,“solaimanlipi.php”和“solaimanlipi.z”。我可以在pdf上看到bangla字体,但是这个字体是错误的/分散的。我正在附上我实际看到的图片。

它应该是这样的(从浏览器截图): enter image description here

以下是显示上述结果的代码:

<?php
$strData = file_get_contents('./data3.txt');
?>
<html lang="en" dir="ltr">
<head>
    <meta charset="utf-8" />
    <style>
    @font-face
    {
        font-family: myUniFont;
        src: url(./SolaimanLipi_22-02-2012.ttf);
    }
    </style>
</head>
<body>
    <span style="font-family: myUniFont;"><?php echo $strData; ?></span>
</body>
</html>

我使用下面的代码在我的pdf中使用相同的字体:

$strBNFont = TCPDF_FONTS::addTTFfont('./SolaimanLipi_22-02-2012.ttf', 'TrueTypeUnicode', '', 32);
$pdf->SetFont($strBNFont, '', 8, '', 'false');

它在PDF中的样子:(

enter image description here 请指教我如何才能正确显示bangla字体。

编辑#1

哇! ;(OMG!

亲爱的先生,问题不在pdf / tcPDF库上,甚至在自己的字体文件中也没有。

请检查以下php代码:

<?php
header('Content-type: image/png');

$text = 'তোমাদের  জন্য মুক্তিযুদ্ধের গল্প';

$font = './Fonts/SolaimanLipi_22-02-2012.ttf';

$im = imagecreatetruecolor(600, 300);

$bg_color = imagecolorallocate($im, 255, 255, 255);

$font_color = imagecolorallocate($im, 0, 0, 0);

imagefilledrectangle($im, 0, 0, 599, 299, $bg_color);

imagettftext($im, 20, 0, 10, 50, $font_color, $font, $font);

imagettftext($im, 20, 0, 10, 120, $font_color, $font, $text);

imagepng($im);

imagedestroy($im);

?>

这是如何在浏览器上导出/渲染png图像的:

enter image description here

当我尝试使用imagettftext函数在图像文件上打印文本时,它也打破了角色:(

因为我确定它不是字体问题,因为我刚刚使用60多种字体进行了测试,所有字体都被破坏了......而浏览器(HTML代码)则非常正确地显示它们。

所以,我认为这比我的大脑可以包含/处理的大得多;(

所以,像你这样的专家可能只会出路:)

再次感谢您的时间

1 个答案:

答案 0 :(得分:1)

TCPDF本身can't handle Brahmic scripts

我发布了类似的其他语言:How can I create Malayalam PDF using TCPDF in PHP?

我相信mPDF基于此示例文件支持您的文字:http://mpdf1.com/examples/example_utf8.pdf

如果您没有在TCPDF上设置死机,我建议您尝试mPDF。如果你可以让它工作比我即将概述的方法更容易。

另一种选择,在我看来,更复杂是使用ImageMagick与Pango将文本渲染为图像,然后将其包含在PDF中。这与ImageMagick的普通字体渲染不同,正如您所看到的那样,您可以使用它。我将这更多地包括在学术兴趣中,除非你找到令人信服的理由,否则我不一定会建议这样做。

在使用Pango支持安装ImageMagick后,我基本上必须从shell执行此操作:

#Install font for my user.
cp /host/SolaimanLipi_22-02-2012.ttf .fonts

#update the font-config cache
fc-cache

#Render the text with pango
convert -background white -size 400x pango:@/host/bangali.txt  /host/out.gif

/host/bangali.txt包含<span font='18.5'>তোমাদের জন্য মুক্তিযুদ্ধের গল্প</span> *

的地方

然后呈现这样的输出,我认为这至少大部分是正确的:

Bangla rendered correctly, I think

这是因为Pango的整形引擎能够做到这一点。尽管这样做有很多警告。其中最重要的是让font-config从CGI或mod_php中正常运行,这是可行的,但在我的经验中却很棘手。

  • 我没有指定字体名称,因为我只有一个Bangala字体,所以font-config找到并使用了我安装的字体。