从PDF文件复制时,印地语内容失真

时间:2018-11-24 15:46:46

标签: pdf acrobat hindi

每当我尝试从任何资源复制印地语内容时,字符都会变形。我试图复制到浏览器,MS Word,文本文件等。我正在使用Acrobat DC。

例如,在附件中,当我复制第3页的内容(印地语)时,字符被更改。

enter image description here更改为संिैधावनक

enter image description here更改为ईपचारों

我尝试了许多库,尝试使用内置的导出工具,使用复制/粘贴,使用向导,更改的编码/语言等来转换内容,但是它们都不起作用。我还尝试构建一些脚本,安装语言包,在转换为图像后使用OCR,但是它们都没有起作用。

您能指导解决此问题的潜在方法是什么吗?

文件https://www.dropbox.com/s/ujbt7d2aidqg8r4/Vision%20IAS%20Prelims%202019%20Test%201%20%5BHindi%20Medium%5D.pdf?dl=0的链接

1 个答案:

答案 0 :(得分:0)

对于堆栈溢出规则律师;我知道这不是一个完整的答案,但是要发表评论的时间太长了。

作为该语言的母语,我很难在这里识别差异。文本很多,虽然我可以看到字体不同,但是我不清楚各个字形是什么。您能指出复制后不正确的一个特定字形吗?

文件中嵌入的字体(Arial Unicode MS)具有附加的ToUnicode CMap,对我来说似乎正确,但是一些单个字符代码映射到多个Unicode代码点。例如,字符代码0x564映射到Unicode值0x093e,0x0901。

我无法轻易分辨出这是否正确。我可以费力地解码整个字符串,检查一下Unicode代码点是什么,然后使用Arial Unicode MS将它们分别放置在Word文档中,尝试将它们与原始文件中的字符进行匹配。但是在我看来,很多角色都是正确的,而且我不想浪费很多时间。

[编辑]

这就是PDF文件中的文本。字符代码是PDF文件中的实际字符代码,它通过CMap和我们不需要在这里担心的字体机制的其他部分映射到字体中的字形程序。它还通过ToUnicode CMap映射到一组Unicode代码点

代码Unicode字形名称

059A            0938            स       Sa
0565            0902            ं       vowel sign Anusvara
0597            093F            ि       vowel sign I
05A8            0948            ै       vowel sign Ai
0589            0927            ध       Dha
059E            093E            ा       vowel sign Aa
059F            0935            व       Va
058A            0928            न       Na
0577            0915            क       Ka

尽我最大的努力去回忆如何读梵文,我相信原文像是Sa(带有“ am”变音符号)Va(带有ai元音修饰符)Dha(带有Aa元音修饰符)Na(带有i元音)修饰符),最后是Ka。

我担心不能正确剪切和粘贴的原因仅仅是因为ToUnicode值似乎部分不正确。当字符代码0x0597应该为U + 0935时已被分配了Unicode值U + 093F,而字符代码0x059f当应该为U + 093F时已被分配了Unicode代码点U + 0935。那就是这两个字符代码的Unicode值已转置。

当您复制并粘贴它时,最终会得到不兼容的修饰符,这就是为什么您会得到有趣的角色的原因。字形中的虚线环指示应由重音符号修改的字符。您永远都不会看到它,但是因为布局引擎找不到要修改的基本字符,所以只能自己绘制重​​音。

恐怕您的PDF文件制作错误,解决此问题的唯一方法是更正ToUnicode CMap中的错误。我确实对上面提到的两个字符执行了此操作,然后将其复制并粘贴为:

संवैधाषनक

哪个看起来或多或少是正确的(我似乎对一个元音修饰符犯了一个错误)。但是,该表中可能还存在其他错误,尝试对其进行纠正非常重要。我花了几个小时的大部分时间来解决这个问题,验证整个CMap将花费我一两天。而且CMap特定于本文档,我不能在其他地方使用它,因为字体是一个子集。不同的文档将具有不同的子集,这意味着字符代码将有所不同。