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

时间:2017-12-11 10:39:28

标签: java pdf

我正在使用docparser处理Pdfs到Excel的转换。  但docparser无法正确处理扫描的pdfs。所以我需要从普通的pdf 中分离扫描的pdf,并且只想通过docparser处理普通的pdf(即API调用)。 是否有退出方式以编程方式识别pdf类型(扫描或正常)以便我可以进一步工作? 如果有人知道如何解决这个问题,请帮忙.....

1 个答案:

答案 0 :(得分:0)

最后,我找到了我的问题的解决方案。但不是标准的解决方案(我认为)。感谢评论并提供帮助的人们。

使用 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";
         }



}