代码之家  ›  专栏  ›  技术社区  ›  Daniel

复制+粘贴PDF文件中的希伯来文文本会导致最终字母被错误复制

  •  0
  • Daniel  · 技术社区  · 7 年前

    所以我得到了一些希伯来语的PDF文件,我想把它们翻译成英语,当我试图将PDF文件中的文本复制并粘贴到文本编辑器中时, 希伯来文的最后字母中有个字母被错误地复制了。

    我找到了 this

    我发现的另一件有趣的事情是,当你在浏览器中按Ctrl+F键(我在chrome上试过)并搜索最后一个字母“Pe”时,它会给出常规“Pe”和最终“Pe”的结果(反之亦然,当你搜索常规“Pe”时),即使它们有不同的代码点(以及ANSI代码页中的不同代码),这也很奇怪。(所有的最后字母及其对应的普通字母都是一样的)

    所以问题是- 有人知道为什么会这样吗?
    真实的 映射到字形的代码点,但在这种情况下,如何渲染字符?我对这个问题不是很熟悉,所以我希望能有任何解释。此外,如果有任何好的解决方案可以让我用最后的字母提取文本,我将不胜感激,因为我想解析文本,把字母弄乱会导致单词不完整。


    根据微博的要求,我添加了一些复制的单词和相应的正确单词。

    E1 F7 F8 1B    בקר.  # Should be בקרן (Final letter "Nun") Switches every 
    final Nun with 1B instead of EF according to the windows 1255 code page.
    
    F2 F1 F7 E9 E9 17 עסקיי. # Should be עסקיים (Final letter "Mem") Switches 
    every final Mem with 17 instead of ED.  
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   weibeld    7 年前

    因此,根据您的编辑,PDF文件似乎使用了一些奇怪的(非ASCII兼容)希伯来语编码进行文本提取,将字母的最终形式放置在 1X

    如果您只想在PDF中重建文本,最简单的解决方案可能是,不要更改PDF,而是在从PDF复制文本后用正确的代码替换错误的代码。

    例如,将从PDF复制的文本粘贴到 file

    cat file | tr '\033' '\357' | tr '\027' '\355' >out_file
    

    也就是说,一个 tr 033 , 357 等等,就是十六进制字节的八进制形式 1B EF 等等,你发现了 hexdump out_file

        2
  •  0
  •   Patrick Gallot    7 年前

    https://github.com/adobe-type-tools/agl-aglfn/blob/master/glyphlist.txt ).

    Identity-H编码意味着一种复合(双字节)字体,它可能有一个ToUnicode表。自定义编码意味着使用差异数组的编码字典。标准编码意味着未指定预定义(或自定义)编码。