2016-09-17 2 views
0

Im используя приведенный ниже код для рендеринга pdf. Это в try/catch и хорошо работает, показывая pdf.Настройка масштаба PDFrenderer на экран

Проблема в том, что файл 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); 

РЕДАКТИРОВАТЬ:

Чтобы избежать ImageView, имеющий ширину и высоту 0, одним из решений является оставить 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() {public void run() {/ * ваш код * /}}); –

Смежные вопросы