วิธีแสดงไฟล์ PDF ใน Android


213

Android ไม่มีการสนับสนุน PDF ในไลบรารี มีวิธีการแสดงไฟล์ PDF ในแอปพลิเคชัน Android หรือไม่


5
นี่เป็นตัวอย่างที่ดีสำหรับการแสดงไฟล์ pdf จำเป็นต้องอ้างอิงไฟล์ Readme.txt ในลิงค์ด้านล่างเพื่อใช้งาน github.com/jblough/Android-Pdf-Viewer-Library
Ramesh Akula

1
นี่คือตัวอย่างของการใช้ไลบรารีนั้น: stackoverflow.com/a/16294833/2027232
Nicolas Tyler

คุณ hva เพื่อดูstackoverflow.com/questions/22498937//
Samet ÖZTOPRAK

คำตอบ:


68

เนื่องจาก API ระดับ 21 (Lollipop) Android มีคลาส PdfRenderer :

// 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();

สำหรับข้อมูลเพิ่มเติมดูตัวอย่างแอ

สำหรับ API ที่เก่ากว่าฉันแนะนำไลบรารี Android PdfViewerมันรวดเร็วและใช้งานง่ายลิขสิทธิ์ภายใต้ Apache License 2.0:

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();

12
ห้องสมุด PDFView นั้นยอดเยี่ยม แต่โปรดทราบว่ามันอยู่ภายใต้ GNU General Public ไม่ใช่ Lesser GPL ซึ่งอาจทำให้เป็นการยากที่จะรวมไว้ในซอฟต์แวร์เชิงพาณิชย์
แซม

ใช่ @Sam ถูกต้อง ส่วนตัวฉันต้องใช้ PDF.js เนื่องจากปัญหาลิขสิทธิ์ใน Android รุ่นเก่า แต่การเรนเดอร์ช้ามากและเป็นการยากที่จะทำงานเนื่องจากการสื่อสาร Java-JavaScript
MilošČernilovský

1
สำหรับเวอร์ชั่นเก่าจะมีวิธีการแสดงอย่างไรโดยไม่ต้องดาวน์โหลดและจัดเก็บไฟล์ไว้ในแอพ
Gokhan Arik

1
คุณสามารถใช้ตัวอย่างที่ละเอียดกว่านี้ได้PDFView Libraryไหม? เราควรใส่pdfNameอะไรดี? ทำหน้าที่อะไรonDraw, onLoadและonPageChangeฟังดูเป็นอย่างไร ขอบคุณสำหรับความช่วยเหลือของคุณ :)
Triet Doan

2
เพิ่มไลบรารี PDF ใหม่ที่ได้รับอนุญาตภายใต้ Apache License 2.0 ให้กับคำตอบ
MilošČernilovský

61

นำมาจากบล็อกของฉัน:

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);
  }
}

70
ที่นี่ไม่ค่อยสะอาดจริงๆ สำหรับหนึ่งถ้า Google ตัดสินใจที่จะเปลี่ยน URL ของ Google เอกสารแอปของคุณจะแตกและคุณจะต้องผลักดันการอัปเดตเพื่อให้ผู้ใช้สามารถดูเอกสารได้อีกครั้ง
ทำเครื่องหมาย

3
นี่เป็นเพียงการอนุญาตให้ฉันดูหน้าแรกและลิงก์ "ดาวน์โหลด" ที่ด้านล่างไม่ทำงาน ... แนวคิดใด ๆ นอกจากนี้ดูเหมือนว่า setPluginsEnabled ไม่ได้เป็นส่วนหนึ่งของคลาส WebView อีกต่อไป
Whyoz

7
สิ่งนี้จะไม่ทำงานหากไม่มีการเชื่อมต่ออินเทอร์เน็ตและต้องได้รับอนุญาตจากอินเทอร์เน็ต
Mani

4
มันเคยทำงาน แต่เมื่อเร็ว ๆ นี้มันแสดงว่า "อ๊ะมีปัญหาในการแสดงตัวอย่างเอกสารนี้" ฉันเดาว่า google มีการเปลี่ยนแปลงบางอย่างที่ด้านข้างทำให้เกิดปัญหานี้
Lee Yi Hong

1
สำหรับฉันมันช้ามากในการโหลดและเลื่อนดูเอกสาร
nilsi

33

ฉันได้ทำวิธีไฮบริดจากคำตอบบางส่วนที่ให้กับบทความนี้และโพสต์ที่คล้ายกันอื่น ๆ :

วิธีการแก้ปัญหานี้จะตรวจสอบว่ามีการติดตั้งแอพตัวอ่าน PDF หรือไม่และทำสิ่งต่อไปนี้: - หากติดตั้งตัวอ่านให้ดาวน์โหลดไฟล์ PDF ไปยังอุปกรณ์และเริ่มแอพตัวอ่าน PDF - หากไม่มีการติดตั้งตัวอ่านให้ถามผู้ใช้ ไฟล์ PDF ออนไลน์ผ่าน Google Drive

บันทึก! วิธีนี้ใช้DownloadManagerคลาสAndroid ซึ่งเปิดตัวใน API9 (Android 2.3 หรือ Gingerbread) ซึ่งหมายความว่ามันไม่ทำงานบน Android 2.2 หรือเก่ากว่า

ฉันเขียนโพสต์บล็อกเกี่ยวกับที่นี่แต่ฉันได้ให้รหัสเต็มด้านล่างเพื่อความสมบูรณ์:

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;
    }

}

8

ดาวน์โหลดซอร์สโค้ดที่นี่ ( แสดงไฟล์ PDF ภายในแอปพลิเคชัน Android ของฉัน )

เพิ่มการพึ่งพานี้ใน Grade: 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 + "-");
            }
        }
    }

}

คำใบ้: assetFileNameไฟล์ pdf ควรมีอยู่ในassetsโฟลเดอร์
ahmednabil88

7

ในที่สุดผมก็สามารถที่จะปรับเปลี่ยนรหัส butelo ของการเปิดไฟล์ PDF ใด ๆ ในระบบแฟ้ม Android pdf.jsใช้ รหัสสามารถพบได้ใน GitHub ของฉัน

สิ่งที่ฉันทำคือแก้ไขpdffile.jsอาร์กิวเมนต์ HTML เพื่ออ่านfileเช่นนี้:

var url = getURLParameter('file');

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

ดังนั้นสิ่งที่คุณต้องทำก็แค่ต่อท้ายไฟล์พา ธindex.htmlดังนี้:

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

อัพเดตpathตัวแปรเพื่อชี้ไปยัง PDF ที่ถูกต้องในระบบไฟล์ Adroid


สวัสดี Paul ฉันได้ใช้ตัวอย่างนี้แล้ว แต่มันแสดงหน้าจอว่างเปล่าบน WebView ใน API ระดับ 16 คุณมีปัญหาเกี่ยวกับปัญหานี้หรือไม่?
Riddhish.Chaudhari

ไฟล์ pdf ถูกเก็บไว้ที่ไหน? คุณไม่สามารถโหลด pdf จากโฟลเดอร์สินทรัพย์ คุณสามารถโหลดได้ทั้งจากการ์ด SD หรือที่เก็บข้อมูลภายในที่ได้รับการป้องกันของแอป ตรวจสอบ logcat ของคุณเพื่อหาข้อผิดพลาดที่เกี่ยวข้องกับ webview
Shantanu Paul

เส้นทาง Uri = Uri.parse (Environment.getExternalStorageDirectory (). toString () + "/example4.pdf"); webView.loadUrl ( "ไฟล์: ///android_asset/pdfviewer/index.html file =?" เส้นทาง +);
Riddhish.Chaudhari

@ พอลฉันใช้รหัสด้านบนมันใช้งานได้ดีกับ API 19 แต่ด้านล่างไม่ทำงาน ทำไม??
Riddhish.Chaudhari

โปรดดูสิ่งนี้สำหรับความเข้ากันได้กับ Android เวอร์ชันเก่า: github.com/pauldmps/Android-pdf.js/issues/1 github.com/pauldmps/Android-pdf.js/issues/2
Shantanu Paul

4

คุณสามารถใช้วิธีการง่าย ๆ โดยการนำเข้า

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

และรหัส XML คือ

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

และเพียงแค่ประกาศและเพิ่มไฟล์ลงในโฟลเดอร์ทรัพย์สินและเพียงแค่กำหนดชื่อ

   PDFView  pdfView=findViewById(R.id.pdfv);       
    pdfView.fromAsset("agl.pdf").load();

คุณจะประกาศ PDFView ใน Kotlin ได้อย่างไร?
Nicholas Farmer

@NicholasFarmer ตรวจสอบลิงค์นี้stackoverflow.com/questions/56613766/…
akshay

7
เพียงระวังสิ่งนี้สามารถเพิ่ม 16 ~ 18MB ที่ด้านบนของแอพของคุณ ห้องสมุดนี้ใช้งานPdfiumAndroidตัวเองอยู่แล้วขนาด 18.4MB
Pierre

คำใบ้: agl.pdfไฟล์ควรมีอยู่ในassetsโฟลเดอร์
ahmednabil88

1

ในการเพิ่มแสงเล็กน้อยให้กับสิ่งนี้ฉันจะต้องไปกับโซลูชัน pdf.js จาก Mozilla นี่คือการเชื่อมโยงไปยังการดำเนินงานเขียนดีอยู่แล้วจากนี้: https://bitbucket.org/butelo/pdfviewer/

นี่คือการแก้ไขที่ฉันเพิ่มในกิจกรรม Android ของฉัน:

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

นี่คือการแก้ไขที่ฉันทำในpdffile.js:

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

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

1

ฉันใช้รหัสด้านล่างเพื่อเปิดและพิมพ์ PDF โดยใช้ Wi-Fi ฉันกำลังส่งรหัสทั้งหมดของฉันและฉันหวังว่าจะเป็นประโยชน์

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);
        }
    };
}

0

ยังไม่มีตัวอย่างเอกสาร PDF ใน Android webview หากคุณต้องการดูตัวอย่าง base64 pdf มันต้องการห้องสมุดของบุคคลที่สาม

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;
            }
        });

    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.