C# 使用itextSharp数字从pdf中提取文本

C# 使用itextSharp数字从pdf中提取文本,c#,pdf,text,itextsharp,extract,C#,Pdf,Text,Itextsharp,Extract,我有一个pdf文件,从中提取文本时遇到问题-使用itextsharp api 某些数字被其他数字或反斜杠替换:“/” pdf文件最初来自MS Word,并使用“另存为pdf”导出为pdf,我必须处理pdf文件,而不是文档 当您尝试从文件中复制和粘贴一些数字时,您可以非常清楚地看到问题 例如,如果您尝试复制并粘贴底部的6位数字,您可以看到它从201333更改为333222 您还可以看到日期字符串的问题:11/4/2016变为///11110 当我在计算机上使用adobe pdf converter

我有一个pdf文件,从中提取文本时遇到问题-使用itextsharp api

某些数字被其他数字或反斜杠替换:“/”

pdf文件最初来自MS Word,并使用“另存为pdf”导出为pdf,我必须处理pdf文件,而不是文档

当您尝试从文件中复制和粘贴一些数字时,您可以非常清楚地看到问题 例如,如果您尝试复制并粘贴底部的6位数字,您可以看到它从201333更改为333222

您还可以看到日期字符串的问题:11/4/2016变为///11110

当我在计算机上使用adobe pdf converter打印机打印pdf文件时,它会得到修复,但我需要自动修复它,例如使用C#

谢谢

文件在此处共享:

简而言之 iTextSharp文本提取结果准确地反映了PDF中所述字符的含义。因此,PDF规范(依赖于这些信息)推荐的文本提取总是会返回此信息

嵌入的字体包含不同的信息。因此,不相信这些信息的文本提取方法可能会返回更令人满意的结果

更详细地 首先,你说

我有一个pdf文件,从中提取文本时遇到问题-使用itextsharp api

因此,让它听起来像一个特定的问题。不过,稍后你会说

当您尝试从文件中复制和粘贴一些数字时,您可以非常清楚地看到问题

如果您还可以看到复制和粘贴的问题,则它不是iTextSharp特定的问题,而是多个PDF处理器(包括您复制和粘贴的查看器)的问题,或者只是您拥有的PDF的问题

事实证明,这是后者,你有一个关于其内容的PDF

例如,让我们看一下您指出的文本:

例如,如果您尝试复制并粘贴底部的6位数字,您可以看到它从201333更改为333222

查看PDF页面内容流,您会发现由以下说明生成的六位数字:

/F3 11.04 Tf
...
[<00150013>-4<0014>8<00160016>-4<0016>] TJ
PDF中字体F3的映射现在声明:

1 beginbfrange
<0013> <0016> [<0033> <0033> <0033> <0032>]
endbfrange 
1开始法兰
[   ]
endbfrange
也就是说,它说

  • 字形0013表示Unicode码点0033,即数字
    3
  • 字形0014表示Unicode代码点0033,即数字
    3
  • 字形0015表示Unicode代码点0033,即数字
    3
  • 字形0016表示Unicode码点0032,即数字
    2
因此,根据ToUnicode地图,使用上述指令绘制的符号字符串表示
333222


PDF规范将ToUnicode映射作为将字符代码映射到Unicode值的最高优先级方法。因此,根据规范工作的文本提取器将在此处返回
333222

请检查您的PDF,并检查是否存在类似问题。如果您无法检查自己,请共享您的PDF进行分析。非常感谢您提供详细信息。有没有ItextSharp解决方案?要寻找的解决方案是修复PDF。为了解决这个问题,可以使用iTextSharp作为PDF操作框架,但需要使用额外的资源,特别是字体库,最好使用创建文档中子集字体的字体,这可能不是一件小事,至少需要做一些工作。要做到这一点,一个人应该有一些知识的字体程序和PDF的内部。
1 beginbfrange
<0013> <0016> [<0033> <0033> <0033> <0032>]
endbfrange