Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式(在java中)识别pdf是正常(可搜索)还是扫描(图像)?_Java_Pdf - Fatal编程技术网

如何以编程方式(在java中)识别pdf是正常(可搜索)还是扫描(图像)?

如何以编程方式(在java中)识别pdf是正常(可搜索)还是扫描(图像)?,java,pdf,Java,Pdf,我正在使用docparser进行PDF到Excel的转换。 但是docparser无法正确处理扫描的PDF。因此我需要将扫描的PDF与普通PDF分开,只想通过docparser(即API调用)处理普通PDF。 是否有一些方法可以通过编程方式识别pdf类型(扫描或正常)以便我进一步工作? 如果有人知道如何解决这个问题,请提供帮助。…最后,我找到了我问题的解决方案。但不是一个标准的解决方案(我想是的)。感谢发表评论并提供帮助的人 使用Pdfbox库我们可以提取扫描的pdf页面,并将每个页面与图像对象

我正在使用docparser进行PDF到Excel的转换。 但是docparser无法正确处理扫描的PDF。因此我需要将扫描的PDF与普通PDF分开,只想通过docparser(即API调用)处理普通PDF。 是否有一些方法可以通过编程方式识别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可用,您可以将其分数视为另一个信号。您能描述一下您面临的问题吗?