c# - itext 阅读 pdf 1s 作为向上箭头错误

标签 c# itext

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

谢谢。

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

最佳答案

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

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

就我阅读规范的相关部分而言,它偏爱任何一种方式。

详情

例如查看第一部分编号: 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 is the Unicode hex value of the character <control>, which is categorized as "control character" in the Unicode 6.0 character table.

"<control>" was previously named "CANCEL" in older versions of Unicode.

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

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

关于c# - itext 阅读 pdf 1s 作为向上箭头错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22671974/

相关文章:

C# - 单击事件发送一个值

c# - 如何在 macOS 上的 Sublime Text 3 上运行 C#?

java - 使用 PDFBox 复制 pdf 可以像 iText 一样小吗?

c# - 为什么我无法在此 iText\iTextSharp 页脚表格中获取圆角?

c# - 动态编译代码中缺少程序集引用

c# - 从结构继承

c# - WPF 和 MVVM - ViewModels 和 DataContext

java - 如何在从 ITextRenderer 和 Thymeleaf HTML 模板生成的 PDF 文件中显示 Unicode(十六进制)字符

java - 无法设置参数使用itextpdf生成的PDF

java - 通过 iText 提取 PDF 文本返回奇怪的字符