2016-05-03 25 views
1

私の目標は、入力可能なPDF文書を画像に変換し、Kumulosのデータベースに保存することです。私はPDFTronとpdf文書の変換に問題があります。私が得ているエラーは、ファイルが存在しないということです。しかし、私はファイルをプルして、アプリで見ることができます。PDFTronでPDFをJPGに変換する方法

switch (Global.g){ 
     case 1: 
      InputStream is = res.openRawResource(R.raw.incident_report); 
      try{ 
       doc = new PDFDoc(is); 
      }catch (PDFNetException e){ 
       doc = null; 
       e.printStackTrace(); 
      }catch (IOException e){ 
       doc = null; 
       e.printStackTrace(); 
      } 
      try { 
       mPDFViewCtrl.setDoc(doc); 
       save_Button.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         try{ 
          String output_path = "../../raw/Output/"; 

          PDFDraw draw=new PDFDraw(); // PDFDraw class is used to rasterize PDF pages. 
          ObjSet hint_set=new ObjSet(); 

          PDFDoc doc=new PDFDoc((mPDFViewCtrl + "incident_report.pdf")); 
          // Initialize the security handler, in case the PDF is encrypted. 
          doc.initSecurityHandler(); 

          draw.setDPI(72); // Set the output resolution is to 72 DPI. 

          // Use optional encoder parameter to specify JPEG quality. 
          Obj encoder_param=hint_set.createDict(); 
          encoder_param.putNumber("Quality", 80); 

          // Traverse all pages in the document. 
          for (PageIterator itr=doc.getPageIterator(); itr.hasNext();) { 
           Page current=(Page)(itr.next()); 
           String filename=output_path+"incident_report"+current.getIndex() + ".jpg"; 
           System.out.println(filename); 
           draw.export(current, filename, "JPEG", encoder_param); 
          } 

          doc.close(); 

         }catch(PDFNetException e){ 
          e.printStackTrace(); 
         } 
         finish(); 
        } 
       }); 

       cancel_Button.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         finish(); 
        } 
       }); 
      } catch (PDFNetException e) { 
       e.printStackTrace(); 
      } 
      break; 

答えて

0

次の行は間違っています。

PDFDoc doc=new PDFDoc((mPDFViewCtrl + "incident_report.pdf")); 

それだけでエラーを読み取ることができないあなたの解決すべき

PDFDoc doc=mPDFViewCtrl.getDoc(); 

でなければなりません。

他の多くの問題がありますが、コードを見てください。

  1. あなたは(あなたがこれをやっている知っていない)PDFViewCtrlクラスの外の文書にアクセスしているので、あなたは、読み取りロックを獲得すべき最初のPDFDocオブジェクト
  2. にinitSecurityHandlerを呼び出すことはありません。この特殊なケースでは、ドキュメントを変更していないので、読めないロックを取得するのが最善です。ここで

訂正コード

InputStream is = res.openRawResource(R.raw.incident_report); 
try{ 
    doc = new PDFDoc(is); 
    doc.initSecurityHandler(); // handle passwordless but encrypted files 
}catch (PDFNetException e){ 
    doc = null; 
    e.printStackTrace(); 
}catch (IOException e){ 
    doc = null; 
    e.printStackTrace(); 
} 
try { 
    mPDFViewCtrl.setDoc(doc); 
    save_Button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      try{ 
       String output_path = "../../raw/Output/"; 
       PDFDraw draw=new PDFDraw(); 
       draw.setDPI(72); 
       ObjSet hint_set=new ObjSet(); 
       Obj encoder_param=hint_set.createDict(); 
       encoder_param.putNumber("Quality", 80); 

       // Get PDF being viewed and get read lock 
       PDFDoc doc=mPDFViewCtrl.getDoc(); 
       mPDFViewCtrl.docLockRead(); 

       for (PageIterator itr=doc.getPageIterator(); itr.hasNext();) { 
        Page current=(Page)(itr.next()); 
        String filename=output_path+"incident_report"+current.getIndex() + ".jpg"; 
        System.out.println(filename); 
        draw.export(current, filename, "JPEG", encoder_param); 
       } 
      }catch(PDFNetException e){ 
       e.printStackTrace(); 
      }finally { 
       mPDFViewCtrl.docUnlockRead(); // release read lock 
      } 
      finish(); 
     } 
    }); 

    cancel_Button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
} catch (PDFNetException e) { 
    e.printStackTrace(); 
} 
+0

うーん、まだエラーを取得しています。私はその私のoutput_path私/ System.outを考えます:../../raw/Output/incident_report1.jpg intelwatch W/System.err:例外: intelwatch W/System.err:メッセージ:いいえそのようなファイルやディレクトリ intelwatch W/System.err:条件式:m_stream!= NULL – F0xcr4f7

+0

PDFDraw.exportがデバイス上のフォルダにアクセスする際に問題があると思うなら、android.graphics.Bitmapオブジェクトを返すPDFDraw.getBitmap(Page)を使うことができます。次に、それを使って好きなようにディスクに書き込むことができます。これが機能してもPDFDraw.exportのパスは同じではない場合は、PDFTronのサポートでチケットを提出してください。 – Ryan

関連する問題