如何以编程方式(在java中)识别pdf是正常(可搜索)还是扫描(图像)?
我正在使用docparser进行PDF到Excel的转换。 但是docparser无法正确处理扫描的PDF。因此我需要将扫描的PDF与普通PDF分开,只想通过docparser(即API调用)处理普通PDF。 是否有一些方法可以通过编程方式识别pdf类型(扫描或正常)以便我进一步工作?如何以编程方式(在java中)识别pdf是正常(可搜索)还是扫描(图像)?,java,pdf,Java,Pdf,我正在使用docparser进行PDF到Excel的转换。 但是docparser无法正确处理扫描的PDF。因此我需要将扫描的PDF与普通PDF分开,只想通过docparser(即API调用)处理普通PDF。 是否有一些方法可以通过编程方式识别pdf类型(扫描或正常)以便我进一步工作? 如果有人知道如何解决这个问题,请提供帮助。…最后,我找到了我问题的解决方案。但不是一个标准的解决方案(我想是的)。感谢发表评论并提供帮助的人 使用Pdfbox库我们可以提取扫描的pdf页面,并将每个页面与图像对象
如果有人知道如何解决这个问题,请提供帮助。…最后,我找到了我问题的解决方案。但不是一个标准的解决方案(我想是的)。感谢发表评论并提供帮助的人 使用Pdfbox库我们可以提取扫描的pdf页面,并将每个页面与图像对象(PDImageXObject)的实例进行比较,如果它实现,页面将被计算为图像,我们可以计算这些图像。如果图像等于pdf中的页面数。我们会说它是一个扫描的pdf 这是代码
public static String testPdf(String filename) throws IOException
{
String s = "";
int g = 0;
int gg = 0;
PDDocument doc = PDDocument.load(new File(filename));
gg = doc.getNumberOfPages();
for(PDPage page:doc.getPages())
{
PDResources resource = page.getResources();
for(COSName xObjectName:resource.getXObjectNames())
{
PDXObject xObject = resource.getXObject(xObjectName);
if (xObject instanceof PDImageXObject)
{
((PDImageXObject) xObject).getImage();
g++;
}
}
}
doc.close();
if(g==gg) // pdf pages if equal to the images
{
return "Scanned pdf";
}
else
{
return "Searchable pdf";
}
}
据我所知,在PDF级别上,“正常”和“扫描”PDF之间没有区别。。所以,你必须试探性地去做。例如,如果所有页面都包含一个90%以上纸张大小的图像,那么很有可能它是一个扫描的PDF。一些扫描的PDF在其元数据中有一个扫描仪品牌标签,因此您可以通过它来识别它们。但是,如果扫描仪不添加或修改创建的pdf的元数据,我想这将很难识别。感谢各位给出答案,但当我使用Tablea-pdf到Excel工具并上载扫描的pdf时,它会显示一个弹出窗口,其中显示“上载的文件是扫描图像,可能不会给出正确的结果…”.所以我认为肯定存在某种方法来识别扫描的PDF…”“所以我认为肯定存在某种方法来识别扫描的PDF”-正如@xs0所指出的,您必须使用启发式。例如,只有图像内容但没有文本的页面…我们只提供了两种方法:-)此外,如果您有OCR可用,您可以将其分数视为另一个信号。您能描述一下您面临的问题吗?