0

PDF 查看器未按预期呈现使用 PDFbox 生成的 PDF 中的所有泰米尔语字母。看来我必须在生成 PDF 以使其按预期呈现时进行所需的替换。

尝试替换,任何帮助将不胜感激。基本上这是需要替换或更改泰米尔语字母的三种情况。其余字母的大多数替换或多或少都遵循相同的。

需要反转字形

        கெ = க + ெ =  க ெ  ->  ெ + க = கெ 

需要拆分和重新排序字形

        கொ = க + ொ  = க ொ  ->    க + ெ + ா  ->  ெ + க + ா = கொ
                                    

新结果字形 - 用新字形替换一系列字形。新字形没有 unicode,只存在于字体文件中。

        கு = க + ு = க ு -> கு            
输入文本 来自 JDK 的字符列表 来自 JDK 的代码点 ttf 中的 gid 实际的* 预期的
கெ க + ெ</td> 2965 3014 字符:க 代码点:2965 unicode:ub95 字符:ெ 代码点:3014 unicode:ubc6 1828 1856 க + ெ = க ெ</td> ெ + க = கெ 反转预期的字形。
கொ க + ொ</td> 2965 3018 字符:க 代码点:2965 unicode:ub95 字符:ொ 代码点:3018 unicode:ubca 1828 1859 க + ொ = க ொ</td> க + ெ + ா ெ + க + ா = கொ 预计拆分和重新排序。
கு க + ு</td> 2965 3009 字符:க 代码点:2965 unicode:ub95 字符:ு 代码点:3009 unicode:ubc1 1828 1854 க + ு = க ு</td> கு (gid = 6698) 预计新字形。新字形没有 unicode,只存在于字体文件中。

以下是 PDF 查看器的实际内容呈现 在此处输入图像描述

下面是预期的内容,进行了硬编码替换(对于没有 unicode 的字形 id,硬编码为 PDCIDFontType2#public byte[] encode(int unicode)。在调用 showtext 之前反转、拆分和重新排序输入文本字符序列。还添加了在 TrueTypeEmbedder Subsetter 中没有 unicode 的 glyphe id 用于将 glyphe 嵌入到生成的 pdf 中。)只是为了获取它。

在此处输入图像描述

如何以有效的方式处理这些替换?

查看 GlyphSubstitutionTable、fontbox.cmap.Identity-H、fontbox.unicode.Scripts.txt。到现在都搞不定。任何帮助,将不胜感激。

字体

实际的

预期的

换人

4

1 回答 1

1

您需要实现一个文本整形引擎来处理泰米尔语写作。

请参阅 OpenType 规范:https : //docs.microsoft.com/en-us/typography/opentype/spec/,GSUB/GPOS 表是您的主要兴趣。

这不是一件容易的事,所以也许使用像HarfBuzz这样的外部库是一个更好的选择。

还有这个关于孟加拉语写作的PDFBox 问题 (4189) 。也许它会帮助您实现对泰米尔语的支持

于 2022-03-02T15:30:29.823 回答