itext阅读pdf 1s作为向上箭头ERROR

时间:2014-03-26 20:09:08

标签: c# itext

出于某种原因,itextsharp现在正在读取pdf,其中包含诸如4123之类的数字为4 * 23,其中*实际上是指向上方的箭头。不知道为什么会这样。请帮忙。

感谢。

示例文件位于此处:https://dl.dropboxusercontent.com/u/116833/SAMPLE%20PDF.pdf

1 个答案:

答案 0 :(得分:5)

箭头的原因是文件实际上试图误导文本提取器,它们根据第9.10.2节将字符代码映射到Unicode值的指导提取文本PDF规范ISO 32000-1虽然没有混淆那些喜欢 ActualText 标记内容序列条目的人:前一种方法导致相信'3'是箭头而后者被告知'3'是箭头三分

最有可能这样做是为了防止自动文本提取,同时允许手动复制和粘贴,因为Adobe Reader确实更喜欢 ActualText 标记内容序列条目(因此,手动提取可以正常工作),而许多程序化提取器更喜欢前一种方法。

据我阅读说明书的相关部分,它不会优先于另一部分。

详细

E.g。看看第一部分编号: First part number

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”。

     

(cf。http://www.marathon-studios.com/unicode/U0018/Control

在某些情况下,此控制字符显示为向上箭头。