PDF希伯来语转换问题

时间:2014-12-02 14:56:32

标签: pdf hebrew

当我转换,打印或用希伯来语简单复制粘贴pdf文档时,我会收到损坏的数字。例如在输出中我得到4994-4999而不是1992-1999。甚至LibreOffice也会打开这个问题。

更多示例(原始 - >输出):

2008-2010 -> 9334-93.3‬
2011-2012 -> 4344-4344
321390445 -> 044093223

我试过这个方法:

  1. 复制 - 粘贴
  2. 在另一份文件中打印文件
  3. 使用LibreOffice和GoogleDrive转换文档
  4. 使用命令行转换器,如pdf2txt,pdftotext,qpdf,pdftohtml

1 个答案:

答案 0 :(得分:0)

示例文档显示如下:

enter image description here

但Adobe Acrobat的复制和粘贴会导致:

  

4144144714614 6991-6991

乍看之下字符顺序的颠倒可能已经计入内容流中设置为希伯来语的文本的语言中:

/P <</MCID 0/Lang (he-IL)>> BDC

但这可能不是错误提取多个字形的原因,例如:年数19921996都被提取为&#34; 6991&#34;。

真正的罪魁祸首是在这里使用的字体的 ToUnicode 表中:

2 beginbfchar
<0003> <0020>
<0010> <002D>
endbfchar
1 beginbfrange
<0014> <001A> [<0036> <0031> <0034> <0034> <0037> <0031> <0034>]
endbfrange
1 beginbfchar
<001C> <0039>
endbfchar 

文本提取器使用此表将字形标识符与Unicode代码点相关联。这里的bfchar和bfrange部分暗示了这种映射:

0003 -> 0020 " "
0010 -> 002D "-"
0014 -> 0036 "6"
0015 -> 0031 "1"
0016 -> 0034 "4"
0017 -> 0034 "4"
0018 -> 0037 "7"
0019 -> 0031 "1"
001A -> 0034 "4"
001C -> 0039 "9"

显然,三个不同的字形被映射到数字&#34; 4&#34;和两个不同的数字&#34; 1&#34;。

比较文本绘制操作中渲染的字形与字形ID,

[<0014001C001C0019>] TJ
[<0010>] TJ
[<0014001C001C0015>] TJ
[<0003>] TJ
[<00170019001A00170019001A001700180019001A>11<001400150016>] TJ

表格应该像这样映射:

0003 -> " "
0010 -> "-"
0014 -> "1"
0015 -> "2"
0016 -> "3"
0017 -> "4"
0018 -> "5"
0019 -> "6"
001A -> "7"
001C -> "9"

对我而言,构建 ToUnicode 表的工具看起来不知道如何在PDF中绘制字形或如何对明文号中的数字进行排序。

最右边一年<0014001C001C0019>的第一个字符串1996中的字形从左到右排列。但是,如果假定明文中的字形顺序或字符顺序是从右到左,则会得出错误的结论0014将映射到&#34; 6&#34;和0019到&#34; 1&#34;。对于上面引用的文本绘制操作中的所有字符串以及尚未关联的所有字形ID,如此错误地得出结论,将会得到错误的映射,如PDF中 ToUnicode 表中所示。

因此,本质上PDF是关于哪个字形代表哪个数字。要解决此问题,必须修复生产者程序(或生成ToUnicode映射的工具)。