2

我的应用程序应该能够以多种支持的语言输出包含用户指南的 PDF 文件。(我正在使用pdfkit

我在为泰语找到合适的字体时遇到了一些麻烦:一些所谓的泰语支持的语言(包括来自 Google 的 Noto Thai)会输出正方形、问号甚至更糟糕的不可读的东西。

经过一番研究,我发现一个似乎工作得很好,直到我们的泰国人注意到字符

ต่ำ</p>

如下图所示,基本上第一个字符上方的两个元素折叠在一起,一个覆盖另一个

在此处输入图像描述

我正在使用从 myfonts.com 下载的 Nimbus Sans Thai Family,顺便说一下,它似乎能够正确渲染这些字符,因为您可能会喜欢尝试在预览输入中复制粘贴 ต่ำ

有什么提示吗?

4

2 回答 2

6

您的字体在某些方面不完整。它缺少一些通常位于 Unicode 的私人使用区域 (PUA) 中的字形。
一些应用程序(我知道 Microsoft Word)可以手动克服这个问题,但您的渲染应用程序(和 Adob​​e Acrobat Viewer)不能。
您应该找到带有这些字形的字体,或者找到一个可以手动替换现有字形的应用程序。


许多字体,尽管他们声称支持泰语(实际上,它们包含“常规”泰语字形),但它们可能是不完整的。

除了规范字形之外,格式良好的字体应该包含一个“私人使用区域”(PUA)子范围,其中包含非规范形式的字形。这些字形包括:

  1. 在辅音+声调且没有上元音的情况下,声调移到上位以与上元音( 、 等)结合使用SARA_ISARA_UE
    KO_KAI + MAI_EK
  2. 声调和上元音略微向左移动,以便与 , 等组合使用PO_PLAFO_FAN否则会与辅音的上尾重叠);
    PO_PLA + SARA_I
  3. 此外,两种效果结合在一起,例如音标同时向左下方移动:
    PO_PLA + MAI_EK
  4. YO_YING与下元音结合使用的和THO_THAN(无尾)特殊字形;
    YO_YING_SARA_U
  5. 还有几个;

通常,当渲染的应用程序找到上述符号组合时,它会在 PUA 区域中查找替代字形。如果未找到,它只会退回到默认字形,这在您的情况下会发生。

这里有两张 Arial Unicode 和 FreeSerif 的 PUA 区域截图,不言自明:FreeSerif 的 PUA 为空。我认为,您的 Nimbus 字体也会出现同样的问题。

缺少 PUA 的字体

填充 PUA 的字体


最后的观察。不正确的字体可能以不同的方式不正确。上面我描述了一个更规范的情况,当音调的标准位置标记位置,而非标准位置向下移动(或不存在,这构成不完整的字体)。
但是,有些字体的行为方式相反。它们(仅)在较低位置包含音标。这是你似乎观察到的。

于 2017-08-02T19:27:54.940 回答
0

问题是 PDFKit 不执行复杂的脚本渲染。
一些脚本,如阿拉伯语、泰语等,需要根据上下文(字符串中的位置、相邻字符)进行字形替换和重新定位,而 PDFKit 似乎不这样做。
PDF 查看器应用程序准确显示 PDF 文件中定义的内容。Nimbus Sans Thai 字体可能包含所有必需的字形,但 bytebuster 在他的回答中解释的内容需要由 PDFKit 而不是查看器应用程序执行。

于 2017-08-03T07:09:43.273 回答