我们在 PDF 查看器中呈现泰米尔字母时遇到了问题,其中某些字母的呈现方式与预期不同。下面,我概述了实际的内容渲染和预期的内容,以供参考:
经过分析,我们发现了三种需要在生成过程中重新排序或替换字形的情况:
反转字形
கெ = க + ெ = க ெ -> ெ + க = கெ
分割和重新排序字形
கொ = க + ொ = க ொ -> க + ெ + ா -> ெ + க + ா = கொ
用新的字形替换某些组合。新字形没有unicode,仅存在于字体文件中。
கு = க + ு = க ு -> கு
输入文字 | 来自 JDK 的字符列表 | 来自 JDK 的代码点 | ttf 中的 gid | 实际* | 预计 | |
---|---|---|---|---|---|---|
கெ | க+ெ | 2965 3014 字符:க 代码点:2965 unicode:ub95 字符:ெ 代码点:3014 unicode:ubc6 | 1828 1856 | க + ெ = க ெ | ெ + க = கெ | 反转预期的字形。 |
கொ | க + ொ | 2965 3018 字符:க 代码点:2965 unicode:ub95 字符:ொ 代码点:3018 unicode:ubca | 1828 1859 | க + ொ = க ொ | க + ெ + ா ெ + க + ா = கொ | 预期拆分和重新排序。 |
கு | க + ு | 2965 3009 字符:க 代码点:2965 unicode:ub95 字符:ு 代码点:3009 unicode:ubc1 | 1828 1854 | க + ு = க ு | கு(gid = 6698) | 预计会有新字形。新字形没有unicode,仅存在于字体文件中。 |
查看 GlyphSubstitutionTable、fontbox.cmap.Identity-H、fontbox.unicode.Scripts.txt。到目前为止还无法得到它。任何帮助我们以有效的方式解决它的问题将不胜感激。
链接、字体 实际 预期 用例 PDFBox Jira
您需要实现一个文本整形引擎来处理泰米尔语书写。
请参阅 OpenType 规范:https://learn.microsoft.com/en-us/typography/opentype/spec/,GSUB/GPOS 表是您的主要兴趣。
这不是一件容易的任务,因此也许使用外部库(例如 HarfBuzz)是更好的选择。
还有关于孟加拉语书写的 PDFBox 问题 (4189)。也许它会帮助您实现对泰米尔语的支持
更新:例如这个 HarfBuzz 命令行:
hb-shape -O json -u U+0B95,U+0BC1 --no-glyph-names FreeSerif.otf
将返回:
[{"g":6698,"cl":0,"dx":0,"dy":0,"ax":858,"ay":0}]
您必须解析 json 输出,获取字形 ID 并将其提供给 PDFBox。