Java 确定PDF页面是包含文本还是纯图片

Java 确定PDF页面是包含文本还是纯图片,java,parsing,itext,pdfbox,Java,Parsing,Itext,Pdfbox,如何使用Java确定PDF页面是包含文本还是纯图片 我搜索了很多论坛和网站,但我还没有找到答案 是否可以从PDF中提取文本,以了解页面的格式是图片还是文本 PdfReader reader = new PdfReader(INPUTFILE); PrintWriter out = new PrintWriter(new FileOutputStream(OUTPUTFILE)); for (int i = 1; i <= re

如何使用Java确定PDF页面是包含文本还是纯图片

我搜索了很多论坛和网站,但我还没有找到答案

是否可以从PDF中提取文本,以了解页面的格式是图片还是文本

PdfReader reader = new PdfReader(INPUTFILE);  
        PrintWriter out = new PrintWriter(new FileOutputStream(OUTPUTFILE));              
        for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
         // here I want to test the structure of the page !!!! if it's possible                         
         out.println(PdfTextExtractor.getTextFromPage(reader, i));  
        }
PdfReader reader=新的PdfReader(INPUTFILE);
PrintWriter out=新的PrintWriter(新文件输出流(输出文件));

对于(inti=1;i,没有防水的方法来做你想做的事

文本可以在PDF文件中以不同的方式显示。例如:可以使用图形状态运算符而不是文本状态来绘制所有图示符。(如果这听起来像中文,我很抱歉,但我可以向您保证这是正确的PDF语言。)

如果一个特别的解决方案涵盖了最常见的情况,并且偶尔会遗漏一个外来的PDF,那么您已经有了一个很好的第一个解决方案

在您的代码中,您在所有页面上循环,并询问iText页面上是否有任何文本。这已经是一个很好的指示

在内部,您的代码正在使用
RenderListener
接口。iText解析页面内容并触发特定
RenderListener
实现中的方法。这是一个自定义实现的实现:。示例中使用了此自定义实现

还有一个
renderImage()
方法(例如,请参见)。如果触发此方法,您可以100%确定页面中还有图像,并且可以使用
ImageRenderInfo
对象获取图像的位置、宽度和高度(也就是说:如果您知道如何解释
getImageCTM()
方法返回的
Matrix


使用所有这些元素,您已经可以实现所需的目标,但请注意,总会有一些奇异的PDF可以逃避您的检查。

使用PDFBox 2.x,您可以尝试以下方法:

private boolean hasText(PDDocument doc)抛出IOException{
PDFTextStripper剥离器=新的PDFTextStripper();
返回剥离器.getText(doc).trim().length()!=0;
}

不幸的是,它会先扫描整个文件,并不会在第一个文本块处停止。但如果需要,您可以接收整个文本。

这似乎非常复杂。也许您需要一笔赏金。谢谢您,阿德尔先生,我希望如此:)非常感谢Mr@Bruno洛瓦吉