我正面临使用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字体,但是这个字体是错误的/分散的。我正在附上我实际看到的图片。
以下是显示上述结果的代码:
<?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中的样子:(
编辑#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图像的:
当我尝试使用imagettftext函数在图像文件上打印文本时,它也打破了角色:(
因为我确定它不是字体问题,因为我刚刚使用60多种字体进行了测试,所有字体都被破坏了......而浏览器(HTML代码)则非常正确地显示它们。
所以,我认为这比我的大脑可以包含/处理的大得多;(
所以,像你这样的专家可能只会出路:)
再次感谢您的时间
答案 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>
*
然后呈现这样的输出,我认为这至少大部分是正确的:
这是因为Pango的整形引擎能够做到这一点。尽管这样做有很多警告。其中最重要的是让font-config从CGI或mod_php中正常运行,这是可行的,但在我的经验中却很棘手。
font-config
找到并使用了我安装的字体。