Die PdfRenderer-Klasse von Android erzeugt Bilder mit niedriger Qualität

8

Ich verwende PdfRenderer über api 21, um PDF in meiner App anzuzeigen, und mir ist aufgefallen, dass die Qualität der Seiten sehr schlecht ist. Ich folgte auch google sample um PdfRenderer zu benutzen und so erstelle ich Bitmap für page:

%Vor%

Ich habe ARGB_8888 verwendet, weil es meines Wissens die beste Qualität ist, Bitmaps anzuzeigen. Mache ich etwas falsch?

BEARBEITEN

Das ist der große Unterschied zwischen der PdfRenderer-Klasse und einem klassischen Pdf-Reader:

    
Giorgio Antonioli 28.08.2015, 14:55
quelle

3 Antworten

27

ARGB_8888 'bezieht sich nur auf die Farbqualität, aber die Druck- / Anzeigequalität hängt von der Auflösung ab (wie viele Punkte pro Zoll Sie bei der Anzeige auf dem Bildschirm haben).

Wenn Sie beispielsweise 400 DPI-Bildschirm (400 Punkte pro Zoll) haben und PDF mit dieser Qualität anzeigen möchten, sollten Sie die Bitmap über Bitmap.createBitmap () rendern, die Pixel als ihre Größe akzeptiert:

%Vor%

wo:

  1. getResources().getDisplayMetrics().densityDpi ist die Ziel-DPI-Auflösung
  2. mCurrentPage.getWidth() gibt die Breite in Postscript-Punkten zurück, wobei jedes pt 1/72 Zoll ist.
  3. 72 (DPI) ist die Standard-PDF-Auflösung.

Wenn wir also # 2 mit 72 tauchen, erhalten wir Zoll und multiplizieren mit DPI Pixel. Mit anderen Worten, um die Qualität des Druckgeräts des Displays anzupassen, sollten Sie die Größe des als Standard gerenderten Bildes erhöhen. Die PDF-Auflösung beträgt 72 DPI. Bitte überprüfen Sie auch diesen Beitrag ?

    
Eugene M 01.09.2015, 08:41
quelle
4

Ich bin ein bisschen spät. Die markierte Antwort hat mir nicht weitergeholfen, da die Bitmap zu groß wurde und somit nicht gerendert werden konnte. Ich habe den ursprünglichen Beitrag gefunden, weil ich genau das gleiche Problem hatte, vielleicht hilft diese Antwort anderen in meiner Situation.

Ich suchte herum, um zu sehen, ob jemand eine saubere Lösung zum Skalieren der Bitmap hatte, während das Verhältnis beibehalten wurde. Ich bin auf diese Seite gestoßen:

Ссылка

Es ist kein kompliziertes Zeug, wirklich. Ich brauchte nur zwei zusätzliche Codezeilen:

%Vor%

Ich habe ähnliche helper / util-Klassen hinzugefügt, wie die Site vorschlägt (in der Praxis sind es also mehr als zwei Zeilen;)). Die Höhe kommt von

%Vor%

Die Skalierung teilt die Gerätehöhe einfach mit der ursprünglichen Bitmap-Höhe, um einen Faktor zu erhalten, der wiederum mit der ursprünglichen Bitmap-Breite multipliziert wird, um die skalierte Breite zu finden.

Das funktioniert perfekt auf meinem Nexus 5. Ich konnte das nicht auf mehreren Geräten testen, aber es scheint wie eine feste Lösung.

    
blae 02.10.2016 08:17
quelle
0

Sie können versuchen, dieses Beispiel mit PDFViewer Klasse, nicht sicher über die Qualität, weil ich es nie benutzt habe, aber es ist immer noch ein Versuch:)

    
Pier Giorgio Misley 01.09.2015 08:48
quelle

Tags und Links