2016-09-17 158 views
0

使用下面的代碼來渲染pdf。這是一個嘗試/捕捉,並運行良好,顯示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); 

編輯:

爲了避免具有寬度和高度爲0的ImageView,一種解決方案是張貼一個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不能完全充氣。嘗試:imageView.post(新的Runnable(){公共無效的運行(){/ *您的代碼* /}}); –