我正在使用iTextSharp来阅读PDF文件。我尝试用这个简单的代码阅读第一页的全文:
var pdfReader = new PdfReader("<fileName>");
var pageText = PdfTextExtractor.GetTextFromPage(pdfReader, 1, new SimpleTextExtractionStrategy());
它返回一个这样的字符串:
“\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0!\ n \“\ 0 \ 0 \ 0 \ \ \ \ 0 \ 0 \ 0#\ 0 $ \ 0%\ 0&amp; $ \ 0'\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0!\ n \“\ 0 \ 0 \ 0(\ n \ 0 \ 0 \ 0)\ 0 \ 0 * \ 0 +,\ 0,\ 0 \ 0&amp;,\ 0 - \ 0。#\ 0 \ 0 \ 0&amp; $ \ 0,\ 0 / \ n + \ 0&amp;&amp; \ 0 * 0 \ 0 1。\ n2 \ 0 3 \ n4 - \ 0 5 \ 0 \ 0 $ \ 0 \ 0#\ 0 \ 0 \ 0&amp; $ \ 0,\ 0 *&amp; \ 0 \ 0'\ 0。\ n6 \ n \ 0 \ 0 \ 0 - \ 0 \ 0 \ 0 \ 0&amp; \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0,\ 0#\ 0 \ 0 \ 0&amp; $ \ 0,\ 0 \ 0 \ 0&amp; \ 0#\ 0 \ 0&amp; $')&amp; \ 0 \ 0 \ 0 \ 0#\ 0''\ 0 7 - \ 0 $ \ 0 \ 0 7 \ 0'\ 0,\ 0 8 \ n9 5 \ 0 \ 0,\ 0 \ 0 $ $ \ 0 \ 0 \ 0 \ 0 \ 0'\ 0 \ 0 3 \ n \ 0 \ 0 \ 0)\ 0 \ 0 \ 0 \ 0 4 - \ 0 5 \ 0 \ 0 $ \ 0 \ 0 *&amp; \ 0 \ 0'\ 0 。\ n \ 0 \ 0 \ 0 \ 0#\ 0 $ \ 0 $ \ 0 \ 0)\ 0 \ 0 \ 0:0; \ 0;&lt ;;:1; + \ 0 =&lt; 9 =&lt; ;&lt;&gt; \ 0?\ 0?\ 0 3 \ 0(\ n @ \ n \ 0 \ 0#\ 0 $ \ 0%\ 0&amp; $ \ 0'\ 0!3 \ n \ 0。 .....“
我可以使用Acrobat Reader和浏览器阅读原始PDF。该文件似乎是PDF / A.
我使用的代码与其他PDF一起使用。
iText是否存在此标准的问题?
有人能指出我正确的方向吗?
更新
从Acrobat复制/粘贴给我带来了破碎的文字。我不认为这是一个iTextSharp(5.5.10)问题。
更新
您可以尝试使用此文件: PDF Example
答案 0 :(得分:2)
该文件不包含文本提取所需的信息。此外,该文件作为PDF / A文件无效。
示例文件包含一个背景(位于表单XObject资源中),显示填充值的空表单和前景(紧接在页面内容流中)。
XObject形式的文本是使用Type 3字体绘制的,其编码中没有标准编码或标准名称。其中也没有 ToUnicode 地图。
这意味着该表单XObject中的文本绘制指令具有作为字节序列的参数,并且对于每个字节值,Type 3字体对象提供包含简单绘图指令的流(使用行的路径定义)和曲线;路径填充指令),但没有信息哪个Unicode值对应于该字节值或绘图指令集。
因此,PDF查看者可以绘制页面,但是他们无法正确地将Unicode字符串放入剪贴板中,我们就像人类从该绘图中读取的那样,而且iTextSharp也不能。
没有OCR,没有合理的方法从表单中提取文本。
另一方面,前景中的文本使用带有标准编码的字体( WinAnsiEncoding )绘制,因此可以提取。因此,在OP代码的输出结束时,您将找到
\u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000
...
\u0000 \u0000 \u0000 x s \u0000 l t n q o x m l \u0000 z \u0000 ~ { \u0000 } } \u0000 l w x
2016
14874587948 DITTA PROVA SRL
CREMA CR 26013 VIA DANTE 17
011110
LPRGCM82T26D150H LEOPARDI GIACOMO
M 26 12 1982 CREMONA CR
MILANO MI F205
28 02 2017
DITTAP0101 / LEOGIA01001
即。填写的表格值。
确实声明的文件是PDF / A-1a,但很快检查它就会发现这是一个公然的谎言。例如。 Adobe Acrobat Preflight说:
这些条目表明文档实际上甚至没有尝试实际上是PDF / A-a1符合,它只是声明所以。