2016-09-17 5 views
0

Ich verwende den folgenden Code, um eine PDF zu rendern. Dies ist in einem Versuch/Fang und funktioniert gut, zeigt das PDF.PDFrenderer Einstellung Skala auf Bildschirm

Das Problem ist, dass die PDF-Datei zu groß für den Bildschirm ist. Weiß jemand, wie man es passend skaliert?

Vielen Dank.

 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); <- das funktioniert nicht, das PDF-Bild läuft immer noch von der Seite des Bildschirms – AesculusMaximus

+1

das Rect und Matrix sind optional. Was passiert, wenn Sie für beide null übergeben? –

Antwort

2

Sie müssen ein Bitmap erstellen, das dem Seitenverhältnis der Seite entspricht. Am besten ist es, die Abmessungen des Image passen auch:

   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:

Zur Vermeidung von Image Breite und Höhe von 0, eine Lösung ist ein Runnable enthält den Code zu schreiben:

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

Das sieht aus wie es sollte funktionieren, aber aus irgendeinem Grund sind die REQ_WIDTH und REQ_HEIGHT Werte 0 ? – AesculusMaximus

+0

09-17 12: 02: 54.597 2358-2358 /? W/InputEventReceiver: Es wurde versucht, ein Eingabeereignis zu beenden, aber der Eingabeereignisempfänger wurde bereits entfernt. 09-17 12: 02: 54.758 2358-2358 /? W/System.err: java.lang.IllegalArgumentException: Breite und Höhe müssen> 0 sein – AesculusMaximus

+0

Ihr ImageView darf noch nicht vollständig aufgebläht sein. Probieren Sie: imageView.post (new Runnable() {public void run() {/ * Ihr Code * /}}); –

Verwandte Themen