出于某种原因,itextsharp现在正在读取pdf,其中包含诸如4123之类的数字为4 * 23,其中*实际上是指向上方的箭头。不知道为什么会这样。请帮忙。
感谢。
示例文件位于此处:https://dl.dropboxusercontent.com/u/116833/SAMPLE%20PDF.pdf
答案 0 :(得分:5)
箭头的原因是文件实际上试图误导文本提取器,它们根据第9.10.2节将字符代码映射到Unicode值的指导提取文本PDF规范ISO 32000-1虽然没有混淆那些喜欢 ActualText 标记内容序列条目的人:前一种方法导致相信'3'是箭头而后者被告知'3'是箭头三分
最有可能这样做是为了防止自动文本提取,同时允许手动复制和粘贴,因为Adobe Reader确实更喜欢 ActualText 标记内容序列条目(因此,手动提取可以正常工作),而许多程序化提取器更喜欢前一种方法。
据我阅读说明书的相关部分,它不会优先于另一部分。
E.g。看看第一部分编号:
BT
/T1_1 1 Tf
10 0 0 10 69.1456 750.2834 Tm
(1 )Tj
ET
EMC
/Span <</MCID 14 >>BDC
BT
/T1_1 1 Tf
10 0 0 10 89.5488 750.2834 Tm
(2)Tj
/Span<</ActualText<FEFF0033>>> BDC
(3)Tj
EMC
(412109 )Tj
ET
EMC
如您所见,'3'标有 ActualText 条目,表明它确实是三个(<FEFF0033>
指示Unicode数字三是一个很长的路径。)
另一方面,字体 T1_1 提供包含映射的 ToUnicode 流
...
<30> <0030>
<31> <0031>
<32> <0032>
<33> <0018>
<34> <0034>
<35> <0035>
...
当你看到其他数字(0x30为'0',0x31为'1',......,0x39为'9')被相同地映射时,'3',即0x33,被映射到Unicode代码点0x0018,和
U + 0018是字符
<control>
的Unicode十六进制值,在Unicode 6.0字符表中被归类为“控制字符”。“
<control>
”以前在旧版本的Unicode中命名为“CANCEL”。
在某些情况下,此控制字符显示为向上箭头。