【问题标题】:Bangla (Unicode) font not rendering correctly in tcpdfBangla (Unicode) 字体在 tcpdf 中未正确呈现
【发布时间】:2015-09-06 08:28:05
【问题描述】:

我在使用 TCPDF 库在 php 中生成 pdf 时遇到问题。我需要正确显示孟加拉字体。我尝试添加一些孟加拉字体(即 SolaimanLipi.ttf、SutonnyOMJ.ttf、Siyamrupali.ttf、Nikosh.ttf 等)。我可以在 pdf 上看到孟加拉字体,但字体显示不正确。这个词放错地方了。

通过添加此字体,我看到 /fonts/ 目录中成功创建了 3 个文件“solaimanlipi.ctg.z”、“solaimanlipi.php”和“solaimanlipi.z”。以及我可以在 pdf 上看到孟加拉字体,但这种字体错位/分散。我附上一张我实际看到的图片。

它应该是这样的(来自浏览器截图):

这是显示上述结果的代码:

<?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

哇! ;(天哪!

亲爱的先生,问题不在于 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 代码)非常正确地显示它们。

所以,我觉得这比我的大脑可以容纳/处理的要大得多;(

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

再次感谢您的光临

【问题讨论】:

  • 没有人熟悉 tcPDF unicode 问题?
  • 我被困得很厉害,在这里真的需要一些帮助......
  • 这不是 Unicode 的问题,而是 TCPDF 无法处理 Brahmic 脚本的呈现。如果你真的打算使用 TCPDF……你有安装了支持 Pango 的 ImageMagick 吗?

标签: php pdf unicode fonts tcpdf


【解决方案1】:

TCPPDF 本身 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。如果你能让它发挥作用,那肯定比我将要概述的方法更容易。


在我看来,另一种选择要复杂得多 是使用带有 Pango 的 ImageMagick 将您的文本呈现为图像,然后将其包含在 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 包含&lt;span font='18.5'&gt;তোমাদের জন্য মুক্তিযুদ্ধের গল্প&lt;/span&gt; *

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

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

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

【讨论】:

  • 亲爱的先生,非常感谢您抽出宝贵的时间和发帖/回答.. 1. 先生,我的项目已经完成(主要是 PDF 部分)使用 tcPDF 和一些复杂的部分,例如每页上的重复列标题,自动分页符等?您认为将这些代码转换为 mPDF 不需要很长时间吗? 2. 是的,我也认为在图像上写文字然后添加 pdf 不是最好的方法.. 再次感谢您的回复
  • 我是如何开始使用 mPDF 的。但不能很好地调整文本大小以适应表格单元格。 tcPDF有空格功能吗mPDF?
  • 先生,mPDF 也比 tcPDF 慢(很多),同样的报告 mPDF 花了 564.4080 秒,而 tcPDF 只用了 57.5938 秒 :( 有什么想法吗?
  • 关于文本大小,我在这台机器上没有可用的 mPDF 副本进行测试,但根据第二个帖子:mpdf1.com/forum/discussion/1476/… 您可以通过添加固定位置块来完成带有overflow:auto 和一个受限制的大小。至于速度,您是否使用诸如 eAccelerator、XCache 或 APC 之类的操作码缓存?如果不行,看看能不能安装一个。
  • 哦,这里还有一些速度提示:mpdf1.com/manual/index.php?tid=266
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
相关资源
最近更新 更多