的示例文档显示这样的:
但是从使用Adobe Acrobat导致复制&膏:
4144144714614 6991-6991
的逆转字符的顺序乍一看可能已经占到文本已在内容流中设置为希伯来语的语言:
/P <</MCID 0/Lang (he-IL)>> BDC
但可能不适合多个字形错误地提取出来,例如原因两年的数字1992
和1996
都被提取为“6991”。
这样做的真正的罪魁祸首是在这里使用的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"
显然,三个不同的字形映射到数字“4”和两个不同的数字“1”。
在文本绘制操作与字形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中绘制字形或如何排列明文数字。
最右边的年份1996
的第一个字符串<0014001C001C0019>
中的字形从左到右排列。如果假定字符顺序或明文中的字符顺序是从右到左,则会得出0014
将映射为“6”且0019
为“1”的错误结论。对于上面引用的文本绘制操作中的所有字符串和尚未关联的所有字形标识的所有字符串,总结错误地是这样,将会得到如PDF中的ToUnicode表所示的错误映射。
因此,PDF本质上是躺在哪个字形表示哪个数字。为了解决这个问题,生产者程序(或生成ToUnicode地图的工具)必须修复。
来源
2014-12-03 11:18:59
mkl
很可能PDF不包含字形所代表的字符,甚至是错误的信息。如果你分享一个示例文件,我们可以检查。 – mkl 2014-12-02 15:13:45
有错误的文档示例:https://dl.dropboxusercontent.com/u/25681990/1992.pdf – shevayura 2014-12-03 09:07:09