使用iTextSharp从PDF文件中提取文本时,我收到此错误:“找不到图像数据或EI”

时间:2014-05-11 14:34:27

标签: c# itextsharp

使用下面的代码使用iTextSharp从PDF文件中提取文本时,我收到此错误:“无法找到图像数据或EI”,而在调试代码时发现此错误出现在某些页面但不是所有页面中,然后进一步调查,并发现,通常在pdf xObject图像和内联图像中有两种类型的图像,并使用下面的代码内联图像ca无法处理。在其他类似的帖子中建议使用最新版本(5.5.0)的itextsharp,这个问题的评论很少,我也做了但没有运气。我的基本目的是提取页面中的文字而不是图像。如何处理内联图像或如何只提取文本,无论页面具有什么类型的图像。

for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
PdfContentByte pdfData = pdfStamper.GetUnderContent(page);
LocTextExtractionStrategy its = new LocTextExtractionStrategy();
pdfData = pdfStamper.GetUnderContent(page);

string extractedTextInCurrentPage=PdfTextExtractor.GetTextFromPage(pdfReader, page, its);//In this line exception is throwing
} 

1 个答案:

答案 0 :(得分:3)

请分享您的PDF。

这就是原因:

您的PDF包含内嵌图片。内联图像在ISO-32000-1中存在问题,但我个人认为问题将在ISO-32000-2中解决(对于PDF 2.0,预计在2017年)。

在ISO-32000-1中,内嵌图像以BI运算符开头,后跟一些参数。图像字节的长度不是这些参数之一。实际图像字节由IDEI运算符括起来。

软件解析PDF语法需要搜索这些运算符并通常做得很好:查找BI,然后取IDEI之间的字节。但是:当您遇到EI是图像字节的一部分的图像时该怎么办?

这几乎没有发生过,但我们向我们报告了一个问题,我们通过将IDEI之间的字节转换为图像,在最近的iText版本中解决了这个问题。如果失败,iText将继续搜索下一个EI。如果iText找不到EI参数,则会出现您提及的异常。

这是一个繁琐的过程,作为编写PDF标准的ISO委员会的成员,我在规范中引入了一个新的内联图像参数:参数/L将通知解析器到底有多少字节在IDEI运算符之间应该是预期的。与此同时,我认为保持小于4 KB的内嵌图像的建议变得规范:在PDF 2.0中,拥有超过4096字节的内嵌图像是违法的。当然:这对你没有帮助。 PDF 2.0尚不存在。我在ISO委员会的工作只能帮助解决长期问题。

从短期来看,我们已经编写了一个解决方案,解决了向我们报告的PDF问题,但显然,您发现了一个逃避解决方法的PDF。如果您希望我们解决问题,您必须共享PDF。