2017-12-11 12 views
-1

私は、docparserを使用してPdfsからExcelへの変換を行っています。 しかし、docparserはスキャンしたpdfsを正しく処理できません。だから通常のpdfsからスキャンされたpdfsを分離し、通常のpdfsをdocparser(つまりAPI呼び出し)で処理したいだけです。 PDF形式(スキャン済みまたは通常)をプログラムで特定するためにいくつかの方法がありますか?私はさらに作業することができますか? 誰かがこの問題に取り組む方法を知っているなら、助けてください.....正常(検索可能)かスキャン(画像)かを問わず、プログラムで(Javaで)pdfを認識する方法は?

+3

で、PDFのレベルでは、その必要があるでしょう、そこ..「ノーマル」と「スキャン」PDFの間に違いはありませんので、発見的にそれをやらなければならない。たとえば、すべてのページに用紙サイズの90%以上の画像が含まれている場合、それはスキャンされたPDFであることを確信しています。 – xs0

+0

スキャンされたpdfの中には、メタデータにスキャナブランドのタグがあります。それ。しかし、スキャナが作成されたpdfのメタデータを追加または変更しないと、それを特定するのは本当に難しいでしょう。 –

+0

あなたの回答にお返事いただきありがとうございます。しかしTabula-PdfをExcelツールに使用してスキャンしたpdfをアップロードしたとき、「アップロードされたファイルがスキャンされた画像で、正しい結果が得られないかもしれません.... "スキャンされたPdfsを特定する方法は確かに存在すると思います... –

答えて

0

最後に、私は私の質問に対する解決策を見つけました。しかし、標準的なものではありません。コメントして助けてくれた人々に感謝します。我々はスキャンしたPDFのページを抽出することができますし、それが叶うならば、ページを画像としてカウントされますと、私達ができる、画像オブジェクト(PDImageXObject)のインスタンスに各ページを比較しますPdfboxライブラリを使用して

それらの画像を数えます。 のイメージは、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"; 
     } 



} 
関連する問題