So rendern Sie eine PDF-Datei in Android

213

Android hat keine PDF-Unterstützung in seinen Bibliotheken. Gibt es eine Möglichkeit, PDF-Dateien in den Android-Anwendungen zu rendern?

alexleutgoeb
quelle
5
Dies ist ein gutes Beispiel für das Anzeigen von PDF-Dateien. Sie müssen auf die Readme.txt-Datei im folgenden Link verweisen, um diese zu verwenden. github.com/jblough/Android-Pdf-Viewer-Library
Ramesh Akula
1
Hier ist ein Beispiel für die Verwendung dieser Bibliothek: stackoverflow.com/a/16294833/2027232
Nicolas Tyler
Sie HVA sehen stackoverflow.com/questions/22498937/...
Samet Oztoprak

Antworten:

68

Seit API Level 21 (Lollipop) bietet Android eine PdfRenderer-Klasse :

// create a new renderer
 PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());

 // let us just render all pages
 final int pageCount = renderer.getPageCount();
 for (int i = 0; i < pageCount; i++) {
     Page page = renderer.openPage(i);

     // say we render for showing on the screen
     page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);

     // do stuff with the bitmap

     // close the page
     page.close();
 }

 // close the renderer
 renderer.close();

Weitere Informationen finden Sie in der Beispiel-App .

Für ältere APIs empfehle ich die Android PdfViewer-Bibliothek . Sie ist sehr schnell und einfach zu verwenden und unter der Apache-Lizenz 2.0 lizenziert:

pdfView.fromAsset(String)
  .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
  .enableSwipe(true)
  .swipeHorizontal(false)
  .enableDoubletap(true)
  .defaultPage(0)
  .onDraw(onDrawListener)
  .onLoad(onLoadCompleteListener)
  .onPageChange(onPageChangeListener)
  .onPageScroll(onPageScrollListener)
  .onError(onErrorListener)
  .enableAnnotationRendering(false)
  .password(null)
  .scrollHandle(null)
  .load();
Miloš Černilovský
quelle
12
Die PDFView-Bibliothek ist großartig, aber beachten Sie, dass sie unter der GNU General Public und nicht unter der Lesser GPL steht. Dies kann die Aufnahme in kommerzielle Software erschweren.
Sam
Ja, @Sam ist richtig. Persönlich musste ich PDF.js wegen der Lizenzprobleme in älteren Android-Versionen verwenden, aber das Rendern ist extrem langsam und es ist aufgrund der Java-JavaScript-Kommunikation schwierig, es zum Laufen zu bringen.
Miloš Černilovský
1
Gibt es eine Möglichkeit, ältere Versionen anzuzeigen, ohne die Datei irgendwo in der App herunterzuladen und zu speichern?
Gokhan Arik
1
Könnten Sie ein detaillierteres Beispiel mit verwenden PDFView Library? Was sollen wir eingeben pdfName? Was die Funktionen tun onDraw, onLoadund onPageChangeZuhörer aus? Vielen Dank für Ihre Hilfe :)
Triet Doan
2
Der Antwort wurde eine neue PDF-Bibliothek hinzugefügt, die unter Apache License 2.0 lizenziert ist.
Miloš Černilovský
61

Entnommen aus meinem Blog:

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);
  }
}
Shankar Agarwal
quelle
69
Das ist wirklich nicht sehr sauber. Zum einen wird Ihre App beschädigt, wenn Google jemals beschließt, die URL für Google Text & Tabellen zu ändern, und Sie müssen ein Update veröffentlichen, damit Benutzer Dokumente erneut anzeigen können.
Mark
3
Dadurch kann ich nur die erste Seite anzeigen, und der Link "Download" unten ist nicht aktiv ... irgendwelche Ideen? Außerdem scheint setPluginsEnabled nicht mehr Teil der WebView-Klasse zu sein.
Whyoz
7
Dies funktioniert nicht, wenn keine Internetverbindung besteht und eine INTERNET-Berechtigung erforderlich ist
Mani
4
Früher hat es funktioniert. Aber in letzter Zeit wird immer wieder "Whoops! Es gab ein Problem bei der Vorschau dieses Dokuments" angezeigt. Ich denke, Google hat einige Dinge an ihrer Seite geändert, die dieses Problem verursacht haben.
Lee Yi Hong
1
Für mich war das Laden und Scrollen durch das Dokument sehr langsam.
Nilsi
33

Ich habe aus einigen der Antworten auf diesen und andere ähnliche Beiträge einen hybriden Ansatz gemacht:

Diese Lösung prüft, ob eine PDF-Reader-App installiert ist, und führt folgende Schritte aus: - Wenn ein Reader installiert ist, laden Sie die PDF-Datei auf das Gerät herunter und starten Sie eine PDF-Reader-App. - Wenn kein Reader installiert ist, fragen Sie den Benutzer, ob er sie anzeigen möchte die PDF-Datei online über Google Drive

HINWEIS! Diese Lösung verwendet die Android- DownloadManagerKlasse, die in API9 (Android 2.3 oder Gingerbread) eingeführt wurde. Dies bedeutet, dass es unter Android 2.2 oder früher nicht funktioniert.

Ich schrieb eine Blog - Post über es hier , aber ich habe den vollständigen Code unten auf Vollständigkeit zur Verfügung gestellt:

public class PDFTools {
    private static final String GOOGLE_DRIVE_PDF_READER_PREFIX = "http://drive.google.com/viewer?url=";
    private static final String PDF_MIME_TYPE = "application/pdf";
    private static final String HTML_MIME_TYPE = "text/html";

    /**
     * If a PDF reader is installed, download the PDF file and open it in a reader. 
     * Otherwise ask the user if he/she wants to view it in the Google Drive online PDF reader.<br />
     * <br />
     * <b>BEWARE:</b> This method
     * @param context
     * @param pdfUrl
     * @return
     */
    public static void showPDFUrl( final Context context, final String pdfUrl ) {
        if ( isPDFSupported( context ) ) {
            downloadAndOpenPDF(context, pdfUrl);
        } else {
            askToOpenPDFThroughGoogleDrive( context, pdfUrl );
        }
    }

    /**
     * Downloads a PDF with the Android DownloadManager and opens it with an installed PDF reader app.
     * @param context
     * @param pdfUrl
     */
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public static void downloadAndOpenPDF(final Context context, final String pdfUrl) {
        // Get filename
        final String filename = pdfUrl.substring( pdfUrl.lastIndexOf( "/" ) + 1 );
        // The place where the downloaded PDF file will be put
        final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), filename );
        if ( tempFile.exists() ) {
            // If we have downloaded the file before, just go ahead and show it.
            openPDF( context, Uri.fromFile( tempFile ) );
            return;
        }

        // Show progress dialog while downloading
        final ProgressDialog progress = ProgressDialog.show( context, context.getString( R.string.pdf_show_local_progress_title ), context.getString( R.string.pdf_show_local_progress_content ), true );

        // Create the download request
        DownloadManager.Request r = new DownloadManager.Request( Uri.parse( pdfUrl ) );
        r.setDestinationInExternalFilesDir( context, Environment.DIRECTORY_DOWNLOADS, filename );
        final DownloadManager dm = (DownloadManager) context.getSystemService( Context.DOWNLOAD_SERVICE );
        BroadcastReceiver onComplete = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if ( !progress.isShowing() ) {
                    return;
                }
                context.unregisterReceiver( this );

                progress.dismiss();
                long downloadId = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1 );
                Cursor c = dm.query( new DownloadManager.Query().setFilterById( downloadId ) );

                if ( c.moveToFirst() ) {
                    int status = c.getInt( c.getColumnIndex( DownloadManager.COLUMN_STATUS ) );
                    if ( status == DownloadManager.STATUS_SUCCESSFUL ) {
                        openPDF( context, Uri.fromFile( tempFile ) );
                    }
                }
                c.close();
            }
        };
        context.registerReceiver( onComplete, new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE ) );

        // Enqueue the request
        dm.enqueue( r );
    }

    /**
     * Show a dialog asking the user if he wants to open the PDF through Google Drive
     * @param context
     * @param pdfUrl
     */
    public static void askToOpenPDFThroughGoogleDrive( final Context context, final String pdfUrl ) {
        new AlertDialog.Builder( context )
            .setTitle( R.string.pdf_show_online_dialog_title )
            .setMessage( R.string.pdf_show_online_dialog_question )
            .setNegativeButton( R.string.pdf_show_online_dialog_button_no, null )
            .setPositiveButton( R.string.pdf_show_online_dialog_button_yes, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    openPDFThroughGoogleDrive(context, pdfUrl); 
                }
            })
            .show();
    }

    /**
     * Launches a browser to view the PDF through Google Drive
     * @param context
     * @param pdfUrl
     */
    public static void openPDFThroughGoogleDrive(final Context context, final String pdfUrl) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        i.setDataAndType(Uri.parse(GOOGLE_DRIVE_PDF_READER_PREFIX + pdfUrl ), HTML_MIME_TYPE );
        context.startActivity( i );
    }
    /**
     * Open a local PDF file with an installed reader
     * @param context
     * @param localUri
     */
    public static final void openPDF(Context context, Uri localUri ) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        i.setDataAndType( localUri, PDF_MIME_TYPE );
        context.startActivity( i );
    }
    /**
     * Checks if any apps are installed that supports reading of PDF files.
     * @param context
     * @return
     */
    public static boolean isPDFSupported( Context context ) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), "test.pdf" );
        i.setDataAndType( Uri.fromFile( tempFile ), PDF_MIME_TYPE );
        return context.getPackageManager().queryIntentActivities( i, PackageManager.MATCH_DEFAULT_ONLY ).size() > 0;
    }

}
JesperB
quelle
8

Laden Sie den Quellcode hier herunter ( PDF-Datei in meiner Android-Anwendung anzeigen )

Fügen Sie diese Abhängigkeit in Ihre Note ein: compile 'com.github.barteksc: android-pdf-viewer: 2.0.3'

activity_main.xml

<RelativeLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="@color/colorPrimaryDark"
        android:text="View PDF"
        android:textColor="#ffffff"
        android:id="@+id/tv_header"
        android:textSize="18dp"
        android:gravity="center"></TextView>

    <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfView"
        android:layout_below="@+id/tv_header"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


    </RelativeLayout>

MainActivity.java

import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;

import java.util.List;

public class MainActivity extends Activity implements OnPageChangeListener,OnLoadCompleteListener{
    private static final String TAG = MainActivity.class.getSimpleName();
    public static final String SAMPLE_FILE = "android_tutorial.pdf";
    PDFView pdfView;
    Integer pageNumber = 0;
    String pdfFileName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        pdfView= (PDFView)findViewById(R.id.pdfView);
        displayFromAsset(SAMPLE_FILE);
    }

    private void displayFromAsset(String assetFileName) {
        pdfFileName = assetFileName;

        pdfView.fromAsset(SAMPLE_FILE)
                .defaultPage(pageNumber)
                .enableSwipe(true)

                .swipeHorizontal(false)
                .onPageChange(this)
                .enableAnnotationRendering(true)
                .onLoad(this)
                .scrollHandle(new DefaultScrollHandle(this))
                .load();
    }


    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber = page;
        setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
    }


    @Override
    public void loadComplete(int nbPages) {
        PdfDocument.Meta meta = pdfView.getDocumentMeta();
        printBookmarksTree(pdfView.getTableOfContents(), "-");

    }

    public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
        for (PdfDocument.Bookmark b : tree) {

            Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

            if (b.hasChildren()) {
                printBookmarksTree(b.getChildren(), sep + "-");
            }
        }
    }

}
Deepshikha Puri
quelle
Hinweis: assetFileNamePDF-Datei sollte in assetsOrdner vorhanden sein
ahmednabil88
7

Endlich konnte ich den Code von butelo ändern , um jede PDF-Datei im Android-Dateisystem mit zu öffnen pdf.js. Der Code befindet sich auf meinem GitHub

Was ich getan habe, war das pdffile.jsHTML-Argument filewie folgt zu ändern :

var url = getURLParameter('file');

function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null}

Sie müssen also nur den Dateipfad index.htmlwie folgt anhängen :

Uri path = Uri.parse(Environment.getExternalStorageDirectory().toString() + "/data/test.pdf");
webView.loadUrl("file:///android_asset/pdfviewer/index.html?file=" + path);

Aktualisieren Sie die pathVariable so, dass sie auf eine gültige PDF-Datei im Adroid-Dateisystem verweist.

Shantanu Paul
quelle
Hallo Paul, ich habe auch dieses Beispiel verwendet, aber es zeigt einen leeren Bildschirm in WebView in API Level 16 an. Können Sie etwas über dieses Problem wissen?
Riddhish.Chaudhari
Wo ist die PDF-Datei gespeichert? Sie können kein PDF aus dem Assets-Ordner laden. Sie können entweder von der SD-Karte oder dem geschützten internen Speicher Ihrer App laden. Überprüfen Sie Ihren Logcat auch auf Fehler im Zusammenhang mit der Webansicht.
Shantanu Paul
Uri path = Uri.parse (Environment.getExternalStorageDirectory (). ToString () + "/example4.pdf"); webView.loadUrl ("file: ///android_asset/pdfviewer/index.html? file =" + path);
Riddhish.Chaudhari
@ Paul Ich verwende den obigen Code, es funktioniert gut mit API 19, aber unten funktioniert es nicht. Warum??
Riddhish.Chaudhari
Die Kompatibilität mit älteren Android-Versionen finden Sie hier: github.com/pauldmps/Android-pdf.js/issues/1 github.com/pauldmps/Android-pdf.js/issues/2
Shantanu Paul
4

Sie können eine einfache Methode durch Import verwenden

implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'

und der XML-Code ist

<com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.github.barteksc.pdfviewer.PDFView>

und deklarieren und fügen Sie einfach eine Datei zu einem Asset-Ordner hinzu und weisen Sie einfach den Namen zu

   PDFView  pdfView=findViewById(R.id.pdfv);       
    pdfView.fromAsset("agl.pdf").load();
Akshay Shetty
quelle
Wie deklariert man PDFView in Kotlin?
Nicholas Farmer
@NicholasFarmer überprüfen Sie diesen Link stackoverflow.com/questions/56613766/…
akshay shetty
5
Seien Sie vorsichtig, dies kann 16 ~ 18 MB zusätzlich zu Ihrer App hinzufügen. Diese Bibliothek verwendet, PdfiumAndroiddie selbst bereits 18,4 MB
Pierre
Hinweis: Die agl.pdfDatei sollte im assetsOrdner vorhanden sein
ahmednabil88
1

Um dies ein wenig zu beleuchten, müsste ich mich für die pdf.js-Lösung von Mozilla entscheiden. Hier ist der Link zu einer bereits gut geschriebenen Implementierung: https://bitbucket.org/butelo/pdfviewer/ .

Hier sind die Änderungen, die ich in meiner Android-Aktivität hinzugefügt habe:

private String getInternalPDFURL(String interalPDFName){
    return "file:///android_asset/pdfviewer/index.html?pdf=" + interalPDFName + ".pdf";
}

Hier sind die Änderungen, die ich vorgenommen habe pdffile.js:

var url = '../' + getPDFURL();

function getPDFURL(){
    var query = window.location.search.substring(1);
    var vars = query.split("=");
    var pdfPage = vars[1];
    return pdfPage;
}
Droide Chris
quelle
1

Ich habe den folgenden Code verwendet, um die PDF-Datei über WLAN zu öffnen und zu drucken. Ich sende meinen gesamten Code und hoffe, dass er hilfreich ist.

public class MainActivity extends Activity {

    int Result_code = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = (Button)findViewById(R.id.button1);

        mButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 PrintManager printManager = (PrintManager)getSystemService(Context.PRINT_SERVICE);
                String jobName =  " Document";
                printManager.print(jobName, pda, null);
            }
        });
    }


    public void openDocument(String name) {

        Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        File file = new File(name);
        String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
        String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        if (extension.equalsIgnoreCase("") || mimetype == null) {
            // if there is no extension or there is no definite mimetype, still try to open the file
            intent.setDataAndType(Uri.fromFile(file), "text/*");
        }
        else {
            intent.setDataAndType(Uri.fromFile(file), mimetype);
        }

        // custom message for the intent
        startActivityForResult((Intent.createChooser(intent, "Choose an Application:")), Result_code);
        //startActivityForResult(intent, Result_code);
        //Toast.makeText(getApplicationContext(),"There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }


    @SuppressLint("NewApi")
    PrintDocumentAdapter pda = new PrintDocumentAdapter(){

        @Override
        public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){
            InputStream input = null;
            OutputStream output = null;

            try {
                String filename = Environment.getExternalStorageDirectory()    + "/" + "Holiday.pdf";
                File file = new File(filename);
                input = new FileInputStream(file);
                output = new FileOutputStream(destination.getFileDescriptor());

                byte[] buf = new byte[1024];
                int bytesRead;

                while ((bytesRead = input.read(buf)) > 0) {
                     output.write(buf, 0, bytesRead);
                }

                callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
            }
            catch (FileNotFoundException ee){
                //Catch exception
            }
            catch (Exception e) {
                //Catch exception
            }
            finally {
                try {
                    input.close();
                    output.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){

            if (cancellationSignal.isCanceled()) {
                callback.onLayoutCancelled();
                return;
            }

           // int pages = computePageCount(newAttributes);

            PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("Name of file").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();

            callback.onLayoutFinished(pdi, true);
        }
    };
}
Murali Mohan
quelle
0

Es gibt sowieso keine Vorschau des PDF-Dokuments in der Android-Webansicht. Wenn Sie eine Vorschau des Base64-PDF anzeigen möchten. Es erfordert eine Drittanbieter-Bibliothek.

build.Gradle

compile 'com.github.barteksc:android-pdf-viewer:2.7.0'

dialog_pdf_viewer

<?xml version="1.0" encoding="utf-8"?>

<!--
  ~ Copyright (c) 2017.
  ~ Samet Öztoprak
  ~ All rights reserved.
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/dialog_pdf_viewer_close"
        style="@style/ExitButtonImageViewStyle"
        android:src="@drawable/popup_exit" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:orientation="vertical">

        <com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <View style="@style/HorizontalLine" />

    <com.pozitron.commons.customviews.ButtonFont
        android:id="@+id/dialog_pdf_viewer_button"
        style="@style/ButtonPrimary2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="@string/agreed" />

</LinearLayout>

DailogPDFViewer.java

public class DialogPdfViewer extends Dialog {
    PDFView pdfView;
    byte[] decodedString;

    public interface OnDialogPdfViewerListener {
        void onAgreeClick(DialogPdfViewer dialogFullEula);

        void onCloseClick(DialogPdfViewer dialogFullEula);
    }

    public DialogPdfViewer(Context context, String base64, final DialogPdfViewer.OnDialogPdfViewerListener onDialogPdfViewerListener) {
        super(context);

        setContentView(R.layout.dialog_pdf_viewer);
        findViewById(R.id.dialog_pdf_viewer_close).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this);
            }
        });

        findViewById(R.id.dialog_pdf_viewer_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDialogPdfViewerListener.onAgreeClick(DialogPdfViewer.this);
            }
        });

        decodedString = Base64.decode(base64.toString(), Base64.DEFAULT);

        pdfView = ((PDFView) findViewById(R.id.pdfView));
        pdfView.fromBytes(decodedString).load();

        setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                    onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this);
                }
                return true;
            }
        });

    }
}
Samet ÖZTOPRAK
quelle