在Windows和Ubuntu上使用印地语Unicode打印问题

时间:2013-09-01 16:30:17

标签: php unicode pdf-generation cakephp-2.0 tcpdf

我正在使用pdf上的印地文文本。虽然印地语文本正在产生,但它显示为错位的matras。假设我有像'ज़िन्दगी'这样的词,但显示为

enter image description here

如果我复制此文本并粘贴在Libre Office Writer上,则打印正确。我用tcpdf尝试了近两种字体。 Arial Unicode MS以及Lohit_hi

$tcpdf->SetFont('arialuni', 'B', 15, 'false');
$html = nl2br($result['Song']['hindi']);
$tcpdf->writeHTMLCell(0, 20, 20, 25, $html);

为什么它表现出性格但是错位了它们的位置。

3 个答案:

答案 0 :(得分:1)

如果我将'ज़िन्दगी'复制并粘贴到Microsoft Word中,默认情况下会显示如下:

enter image description here

它实际上是完全相同的unicode字符串(也就是说,一个Çन后跟一个virama,然后是一个द),但它只是以不同的方式呈现,具体取决于字体。 Unicode字体具有复杂的逻辑,用于决定何时将某个字符串替换为不同的字形,并且PDF使用的字体不支持您想要的特定替换。

您只需要找到支持该替换的字体,并确保您的PDF使用该字体。 (可能是您当前的setFont调用无法正常工作,或者您指定的字体在设置时无法使用,因此它使用系统的隐藏字符的默认字体,这不支持你所指的替代品。)

答案 1 :(得分:1)

为什么不使用 writeHTML()而不是 writeHTMLCell()?您的问题与细胞明显相关。看起来像行高是错的,甚至设置了背景重复的CSS属性(应该是background-repeat:none;)。 writeHTML()会阻止这种情况。

答案 2 :(得分:1)

我不相信TCPDF可以正确呈现印地语脚本。单独的字体不足以呈现复杂的脚本。以下引用是关于在TCPDF中呈现Saurashtra文本的注释线程的摘录。这也可能适用于印地语。据我所知,马拉雅拉姆语和古吉拉特语无法在TCPDF中呈现。

  

[Re:在TCPDF中渲染Saurashtra文本] [...]对于TCPDF,真正的字体需要是   首先转换为afm格式,然后对于每个脚本,变音符号或连字规则在tcpdf本身中实现。 [...]字体不足以渲染,   复杂脚本也需要一个整形引擎   解释字形形成规则。这就是PyPDFLib试图通过使用Pango进行脚本渲染来解决的问题   开罗的图形。 Santosh -- Comment on creating a new Language ecosystem- Sourashtra as example

mPDF的示例似乎展示了功能性印地语,正如此问题的答案所引用:Hindi language not displaying correctly on tcpdf