Windows 和 Ubuntu 上印地语 Unicode 的打印问题

Posted

技术标签:

【中文标题】Windows 和 Ubuntu 上印地语 Unicode 的打印问题【英文标题】:Printing issue with Hindi Unicode on Windows and Ubuntu both 【发布时间】:2013-09-04 19:26:45 【问题描述】:

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

如果我复制此文本并粘贴到 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);

为什么它的显示角色却放错了位置。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

不可行。我都试过了。存在相同的渲染问题。【参考方案3】:

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

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

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

【讨论】:

感谢您的信息。我很清楚它的渲染问题。您能否让我清楚 tcpdf 支持哪些确切的印地语字体。我已经尝试过Arial Unicode MSLohiti HIndi。但在这两种情况下,渲染问题仍然存在。 我没有用过 tcpdf,所以我无法为你提供更多的东西:tcpdf.org/fonts.php 嗨 Joshua - 澄清一下:第一个词是 zindagi,第二个词是 zaneedagi。你的意思是这两个词都有 ZNDG,但元音的解释取决于选择的字体? Jay,是的,它是完全相同的 unicode 字符串 - 即 ज 然后 ़ि 然后 न 然后 ् 等等。字体不会以任何方式改变字符的顺序,但它确实会改变它们是如何一起呈现的。 我们遇到了完全相同的问题mpdf1.com/mpdf/index.php?page=Download 为我们工作

以上是关于Windows 和 Ubuntu 上印地语 Unicode 的打印问题的主要内容,如果未能解决你的问题,请参考以下文章

itext android 印地语 pdf 创建

德尔福印地局域网聊天

Flutter_TTS 包在不同设备上的行为不同

ubuntu安装VMware tools

ubuntu安装VMware tools

在 Crystal Reports 中转换为 unicode 字体