确定PDF页面是包含文本还是纯图片
如何使用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)); }
没有防水的方法来做你想要的。
文本可以在PDF文件中以不同方式显示。 例如:可以使用图形状态运算符而不是使用文本状态来绘制所有字形。 (对不起,如果这对您来说听起来像中文,但我可以向您保证这是正确的PDF语言。)
如果一个临时解决方案能够覆盖最常见的情况并偶尔错过异国情调的PDF,那么您已经有了良好的第一个解决方法。
在您的代码中,您遍历所有页面,并询问iText页面上是否有任何文本。 这已经是一个很好的迹象。
在内部,您的代码使用RenderListener
接口。 iText解析页面的内容并触发特定RenderListener
实现中的方法。 这是自定义实现的实现: MyTextRenderListener 。 此自定义实现用于ParsingHelloWorld示例。
还有一个renderImage()
方法(参见例如MyImageListener )。 如果触发此方法,则您100%确定页面中还有一个图像,并且您可以使用ImageRenderInfo
对象来获取图像的位置,宽度和高度(即:如果您知道如何解释由getImageCTM()
方法返回的Matrix
)。
使用所有这些元素,您已经可以很长时间地实现所需,但请注意,总会有异国情况的PDF会逃脱您的所有检查。