泰语字符在PDF中无法正确呈现

时间:2017-08-02 14:30:44

标签: pdf fonts thai

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

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

经过一番研究后,我找到了一个似乎运作得相当好的东西,直到我们的泰国人注意到这些字符

ต่ำ

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

enter image description here

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

任何提示?

2 个答案:

答案 0 :(得分:2)

您的字体在某种程度上是不完整的。它缺少一些通常位于Unicode的私人使用区域(PUA)中的字形 某些应用程序(我知道Microsoft Word)可以手动解决此问题,但您的渲染应用程序(和Adobe Acrobat Viewer)不会。 您应该找到带有这些字形的字体,或者找到一个可以手动替换现有字形的应用程序。

许多字体虽然声称支持泰语(而且它们确实包含“常规”泰语字形),但可能不完整。

除了canonic字形外,格式良好的字体应包含“私人使用” 区域“(PUA)子范围包含非规范形式的字形。那些 字形包括:

  1. 色调标记移至上方位置,与鞋面组合使用 元音(SARA_ISARA_UE等);
    KO_KAI + MAI_EK
  2. 音标和上元音稍微向左移动,与PO_PLAFO_FAN等结合使用(否则会与辅音的上尾重叠);
    PO_PLA + SARA_I
    PO_PLA + MAI_EK
  3. YO_YINGTHO_THAN(没有尾巴)的特殊字形与元音下方结合使用;
    YO_YING _ SARA_U
  4. 还有几个;
  5. 通常,当渲染的应用程序找到上述符号组合时,它会在PUA区域中查找替换字形。如果没有找到,它只会回退到默认的字形,这种情况会发生在你的情况下。

    以下是Arial Unicode和FreeSerif的PUA区域的两个屏幕截图 这是不言自明的:FreeSerif有PUA空。我想,你的Nimbus字体会出现同样的问题。

    A font with missing PUA

    A font with filled PUA

答案 1 :(得分:0)

The problem is that PDFKit does not perform complex script rendering.
Several scripts such as arabic, thai etc, require glyph substitution and re-positioning depending on context (position in string, neighbor characters) and PDFKit seems not to do it.
PDF viewer applications display exactly what is defined in the PDF file. The Nimbus Sans Thai font probably includes all the required glyphs but what bytebuster explains in his answer needs to be performed by PDFKit and not by the viewer application.