Frage Wie man PDF in Android rendert


In meiner Anwendung werde ich einen Bytestream empfangen und im Telefonspeicher in eine PDF-Datei konvertieren. Wie rendiere ich das auf eine PDF? Und es auf einer Aktivität zeigen?


76
2018-05-21 15:21


Ursprung


Antworten:


Einige Telefone (wie das Nexus One) kommen mit einer Version von Quickoffice vorinstalliert, so dass es so einfach wie das Senden der entsprechenden Absicht sein kann, sobald Sie die Datei auf der SD-Karte gespeichert haben.

public class OpenPdf extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.OpenPdfButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = new File("/sdcard/example.pdf");

                if (file.exists()) {
                    Uri path = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(path, "application/pdf");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                    try {
                        startActivity(intent);
                    } 
                    catch (ActivityNotFoundException e) {
                        Toast.makeText(OpenPdf.this, 
                            "No Application Available to View PDF", 
                            Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}

113
2018-05-21 21:35



Öffnen Sie die PDF-Datei in der Webansicht.

public class MyPdfViewActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WebView mWebView=new WebView(MyPdfViewActivity.this);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);
    setContentView(mWebView);
  }
}

17
2018-06-02 10:16



Android-Lollipop (api 21) führt eine neue API ein: PdfRenderer

Mit dieser API können Sie eine Bitmap aus einer Seite in einem PDF-Dokument erstellen.

Kurz gesagt:

  • Holen Sie einen suchbaren Dateideskriptor aus Ihrem PDF-Dokument:

    ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
    
  • Erstellen Sie den PdfRenderer

    PdfRenderer renderer = new PdfRenderer(fd);
    
  • Bereite die Bitmap vor

    Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
    
  • bekommen das PdfRenderer.Seite rendern

    PdfRenderer.Page page = renderer.openPage(pageIndex);
    
  • Rendern Sie die Seite auf der vorbereiteten Bitmap

    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    
  • Jetzt können Sie mit der Bitmap machen, was Sie wollen.

  • Beachten Sie, dass Sie mit den zwei Nullargumenten möglicherweise einen Teil der Seite abschneiden und eine Transformation durchführen können (mit a Matrix) des Clips
  • Es gibt einen anderen Rendermodus: RENDER_MODE_FOR_PRINT. Wenn Sie diesen Modus benötigen, gibt es einige Richtlinien, um es richtig zu verwenden: hier sind die Details.

Hier finden Sie ein vollständiges Beispiel zur Verwendung dieser neuen API


5
2017-11-08 10:01



Diese Bibliothek ist einfach und funktioniert gut: Android PDF-Viewer https://github.com/barteksc/AndroidPdfViewer

Alte Antwort ...

Ich denke, dass Joan Zapata uns die bessere und einfachere Lösung gibt:

https://github.com/JoanZapata/android-pdfview

Ich versichere dir, dass es funktioniert!

1: https://github.com/JoanZapata/android-pdfview


4
2017-11-14 10:14



Für die lokalen PDF-Dateien können Sie sie über die Bibliotheken von Drittanbietern rendern. Verwenden Sie zum Beispiel den MuPDF-BibliothekZu den unterstützten Dateitypen zählen PDF, PNG und JPEG.

Ein Nachteil von MuPDF ist, dass es eine native Bibliothek verwendet, um das Ziel zu erfüllen, daher wird es nicht einfach sein, die Anwendung später auf der BlackBerry-Plattform zu portieren.


3
2018-05-26 14:17



Um eine PDF aus einem Byte-Array zu öffnen, können Sie verwenden RadaeePDFkönnen Sie Folgendes in Ihre Aktivität tun:

private PDFReader m_vPDF = null;
private Document doc = new Document();

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Global.Init(this);

    m_vPDF = new PDFReader(this);
    doc.Close();

    int ret = m_doc.OpenMem(data, password);
        switch( ret )
        {
            case -1://need input password
                finish();
                break;
            case -2://unknown encryption
                finish();
                break;
            case -3://damaged or invalid format
                finish();
                break;
            case -10://access denied or invalid file path
                finish();
                break;
            case 0://succeeded, and continue
                break;
            default://unknown error
                finish();
                break;
        }

    m_vPDF.open(doc);

    setContentView( m_vPDF );
}

0
2017-11-21 09:13