itext和阿拉伯语PDF局部缺少字符

u59ebvdq  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(611)

我正在尝试使用itext 4.2.1生成阿拉伯语pdf文档。这些文档基于wordxml格式提供的模板。我就在那里,但遇到了一个障碍。
源文件使用简化的阿拉伯字体和显示罚款,所以我用了相同的pdf格式。在大多数情况下,一切都很好,但偶尔它会“掉”一个字符。
我已经跟踪了itext源代码,可以看到它从0x06xx基代码到0xfexx表示代码的转换位置,具体取决于成形规则。一旦它翻译成表示代码,它就会在写入文档输出流之前,从字体文件中依次查找每个字符的度量。在这里,它有时无法在字体中找到所需的表示代码,所以只需将字符一起省略即可。
例如,字符0x0645使用charmap表中的此行转换为0xfee2

{0x0645, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4}, /* MEEM */

... 0xfee2不是简体阿拉伯字体。
假设文档在word中使用相同的字体显示良好,itext是否应还原为使用基本代码0x6xx进行表示?如果是这样的话,这个问题是否在图书馆的商业版本中得到了解决(如果有必要,我很乐意为此付费)。
或者,这是其他库必须解决的字体问题吗
是否有其他人遇到了这个障碍或类似的问题?如果是,您是如何解决的?

smdncfj3

smdncfj31#

阿拉伯语在0x6xx范围内具有逻辑文本表示,在另外两个范围内具有视觉表示:fb50-fdff阿拉伯语表示形式-a fe70-feff阿拉伯语表示形式-b
必须使用表示范围,因为对于每个字符,根据单词的位置,您可能有四种表示形式:初始、中间、结尾和孤立。其他的连字也是可能的。
抛开使用强大的旧itext版本不谈,如果字符不在字体中,就无法表示。如果字体缺少字符或可能使用其他字符,word将使用其他字体。试着用arial来确保连字是正确的。

2sbarzqh

2sbarzqh2#

我们最近遇到了同样的情况,我们正在介绍我们为解决这些问题所做的工作:
在我们的案例中,文档是用ms word用阿拉伯语编写的。当您选择单个字符并按alt+x时,在ms word中-您可以看到该字符的unicode。unicode位于正常的unicode范围(0600-06ff,255个字符)。
当使用ms word中的“另存为pdf”或使用“adobe acrobat professional”将上述文档转换为pdf时,正常的阿拉伯unicode被阿拉伯表示形式a[611个字符,取决于字符是独立的还是单词的开头、中间或结尾]和b[143个字符]相关的字形所取代。
根据adobe某人的博客-“pdf将页面的文本内容指定为字形而不是字符”-链接:http://blogs.adobe.com/insidepdf/2008/07/text_content_in_pdf_files.html
尽管互联网上的每一个地方都写着“不建议不要使用表示格式”,但转换成pdf导致了从普通unicode阿拉伯字符集到表示形式a&b字符集的变化。
当我们使用pdfbox提取文本时,我们收到了呈现形式a和b系列unicode中的字符。有趣的是,由于我们不能阅读阿拉伯语,当我们在google translate中复制和粘贴文本时,我们收到了相同的输出,但是当我们通过计算diff来计算差异时,我们收到的结果是两个字符串之间没有共同点[直到那时——我们还不知道正常的unicode阿拉伯语,阿拉伯语的一种表示形式——它也是unicode的一部分等等】
我们有从pdf中提取原始字符集的业务需求。这是一个挑战性的表现形式a和b有大约4种形式-为每个字符[取决于其在word中的位置]。
我们积极地在互联网上寻找——如果有任何图书馆的话——这可以建立两者之间的关系。
谢天谢地-unicode有替换字符集-它定义了我们如何从表示形式a&b字符[character fall back substitutions]-集移回到普通unicode字符集。
http://www.unicode.org/cldr/charts/29/supplemental/character_fallback_substitutions.html
通过使用上述数据源,我们能够将阿拉伯语表示形式a unicode集的591/611个字符和阿拉伯语表示形式b unicode字符集的139/143个字符定义为正常的阿拉伯语字符集。
adobe-也有adobe glyph列表规范-[github上提供]-它也定义了glyph和unicode之间的关系-但是对于阿拉伯语来说是不完整的,因为它定义了257个字符-这些字符主要以阿拉伯语表示形式出现。
此外,在我们的案例中,没有丢失字符。这些字符只是从我们的标准阿拉伯文unicode翻译成表示形式。
在我们最初的ms word文档中,有一些表格,里面有内容。在阿拉伯语翻译版中,我们收到了fffd unicode字符[问号,表示在unicode中发生更改时,有些字符无法翻译。]如果删除所有此类fffd字符,则剩余的文本-虽然转换为unicode集合的表示形式-与原始文本具有相同的含义。
我们确实花了大量时间来解决unicodes转换为pdf时的更改问题,希望我们的经验也能对其他人有所帮助。

相关问题