使用下面的代码使用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
}
答案 0 :(得分:3)
请分享您的PDF。
这就是原因:
您的PDF包含内嵌图片。内联图像在ISO-32000-1中存在问题,但我个人认为问题将在ISO-32000-2中解决(对于PDF 2.0,预计在2017年)。
在ISO-32000-1中,内嵌图像以BI
运算符开头,后跟一些参数。图像字节的长度不是这些参数之一。实际图像字节由ID
和EI
运算符括起来。
软件解析PDF语法需要搜索这些运算符并通常做得很好:查找BI
,然后取ID
和EI
之间的字节。但是:当您遇到EI
是图像字节的一部分的图像时该怎么办?
这几乎没有发生过,但我们向我们报告了一个问题,我们通过将ID
和EI
之间的字节转换为图像,在最近的iText版本中解决了这个问题。如果失败,iText将继续搜索下一个EI
。如果iText找不到EI
参数,则会出现您提及的异常。
这是一个繁琐的过程,作为编写PDF标准的ISO委员会的成员,我在规范中引入了一个新的内联图像参数:参数/L
将通知解析器到底有多少字节在ID
和EI
运算符之间应该是预期的。与此同时,我认为保持小于4 KB的内嵌图像的建议变得规范:在PDF 2.0中,拥有超过4096字节的内嵌图像是违法的。当然:这对你没有帮助。 PDF 2.0尚不存在。我在ISO委员会的工作只能帮助解决长期问题。
从短期来看,我们已经编写了一个解决方案,解决了向我们报告的PDF问题,但显然,您发现了一个逃避解决方法的PDF。如果您希望我们解决问题,您必须共享PDF。