2016-09-17 159 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(){公共无效的运行(){/ *您的代码* /}}); –