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

本文关键字:错误 找不到 EI 数据 图像 PDF iTextSharp 文件 取文本 提取 | 更新日期: 2023-09-27 18:02:42

在使用下面的代码段使用iTextSharp从PDF文件中提取文本时,我得到了这个错误:"无法找到图像数据或EI ",而调试代码时发现这个错误出现在某些页面中,但不是所有页面,然后进一步调查,还发现通常有两种类型的PDF xObject图像和内联图像,使用下面的代码段内联图像无法处理。在这个问题上,在其他类似的帖子中有一些评论建议使用最新版本(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
} 

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

请分享你的PDF。

原因如下:

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

在ISO-32000-1中,内联图像以BI操作符开始,后跟一些参数。图像字节的长度不是这些参数之一。实际的图像字节被一个ID和一个EI操作符包围。

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

这种情况很少发生,但它作为一个问题报告给我们,我们在最近的iText版本中通过将IDEI之间的字节转换为图像来解决这个问题。如果失败,ittext继续搜索下一个EI。如果ittext没有找到EI参数,您将得到您提到的异常。

这是一个繁琐的过程,作为编写PDF标准的ISO委员会的成员,我在规范中引入了一个新的内联图像参数:参数/L将告知解析器IDEI操作符之间预期的字节数。与此同时,我注意到保持内联图像小于4 KB的建议成为规范:在PDF 2.0中,使用超过4096字节的内联图像将是非法的。当然,这对你没有帮助。PDF 2.0还不存在。从长远来看,我在ISO委员会的工作只有助于解决这个问题。

在短期内,我们已经编写了一个解决向我们报告的PDF问题的解决方案,但显然,您已经找到了一个逃避解决方案的PDF。如果你想让我们解决这个问题,你必须分享PDF。

相关文章: