2016-09-17 14 views
0

以下のコードを使用してpdfをレンダリングします。これはtry/catchであり、うまく動作し、pdfを表示します。PDFレンダーの画面に縮尺を設定する

問題は、pdfファイルが画面に対して大きすぎることです。誰もそれに合わせてそれを縮小する方法を知っていますか?

ありがとうございます。

 imageView = (ImageView) findViewById(R.id.imagePDF); 

     int REQ_WIDTH = imageView.getWidth(); 
     int REQ_HEIGHT = imageView.getHeight(); 

     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width12 = size.x; 
     int height12 = size.y; 

     Bitmap bitmap = Bitmap.createBitmap(width12, height12, Bitmap.Config.ARGB_4444); 

     File file = new File("/sdcard/Download/sample.pdf"); 


     PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)); 

     if (currentPage < 0) { 
      currentPage = 0; 
     } else if (currentPage > renderer.getPageCount()) { 
      currentPage = renderer.getPageCount(); 
     } 

     int pages; 

     pages = renderer.getPageCount(); 

     Matrix m = imageView.getImageMatrix(); 

     Rect rect = new Rect(0, 0, width12, height12); 

     renderer.openPage(currentPage).render(bitmap, rect, m, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); 

     imageView.setImageMatrix(m); 
     imageView.setImageBitmap(bitmap); 
     imageView.invalidate(); 
+0

ImageView.setScaleType(CENTER_INSIDE) –

+0

imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); < - これは機能しませんが、pdfイメージはまだ画面の横から流れます – AesculusMaximus

+1

RectとMatrixはオプションです。両方にnullを渡すとどうなりますか? –

答えて

2

ページの縦横比に一致するビットマップを作成する必要があります。それだけでなく、ImageViewのの大きさに一致するようお勧めします:

   PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)); 
       PdfRenderer.Page page = renderer.openPage(0); 
       int pageWidth = page.getWidth(); 
       int pageHeight = page.getHeight(); 
       float scale = Math.min((float) REQ_WIDTH/pageWidth, (float) REQ_HEIGHT/pageHeight); 
       Bitmap bitmap = Bitmap.createBitmap((int) (pageWidth * scale), (int) (pageHeight * scale), Bitmap.Config.ARGB_8888); 
       page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); 
       imageView.setImageBitmap(bitmap); 

EDIT:

0の幅と高さを有するImageViewのを避けるため、1つの解決策は、コードを含むのRunnableを投稿することです:

imageView.post(new Runnable() { 
    public void run() { 
     // The above code goes here 
    } 
}); 
+0

これはうまくいくはずですが、何らかの理由でREQ_WIDTHとREQ_HEIGHTの値が0 ? – AesculusMaximus

+0

09-17 12:02:54.597 2358-2358 /? W/InputEventReceiver:入力イベントを終了しようとしましたが、入力イベント受信者は既に破棄されています。 09-17 12:02:54.758 2358-2358 /? W/System.err:java.lang.IllegalArgumentException:幅と高さが> 0である必要があります – AesculusMaximus

+0

ImageViewを完全に膨張させてはいけません。 try:imageView.post(new Runnable(){public void run(){/ *あなたのコード* /}}); –

関連する問題