Pertanyaan Cara merender PDF di Android


Dalam aplikasi saya, saya akan menerima aliran byte dan mengubahnya menjadi file pdf di memori telepon. Bagaimana saya membuat itu menjadi pdf? Dan tunjukkan pada suatu kegiatan?


76
2018-05-21 15:21


asal


Jawaban:


Beberapa ponsel (seperti Nexus One) hadir dengan versi Quickoffice pra-instal sehingga mungkin semudah mengirim Intent yang sesuai setelah Anda menyimpan file ke kartu SD.

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



Buka file pdf di tampilan web.

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) memperkenalkan API baru: PdfRenderer

API ini memungkinkan Anda untuk membuat Bitmap dari halaman dalam dokumen PDF.

Sesaat:

  • dapatkan deskriptor file yang bisa dicari dari dokumen pdf Anda:

    ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
    
  • buat PdfRenderer

    PdfRenderer renderer = new PdfRenderer(fd);
    
  • siapkan Bitmap

    Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
    
  • ambil PdfRenderer.Page untuk membuat

    PdfRenderer.Page page = renderer.openPage(pageIndex);
    
  • render halaman pada bitmap yang disiapkan

    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    
  • sekarang Anda dapat melakukan apa yang Anda inginkan dengan bitmap.

  • Perhatikan bahwa 2 argumen null memungkinkan Anda untuk memotong beberapa bagian di halaman dan melakukan transformasi (menggunakan a Matriks) dari klip
  • ada mode render lain: RENDER_MODE_FOR_PRINT. Jika Anda memerlukan mode ini, ada beberapa panduan untuk menggunakannya dengan benar: ini adalah Rinciannya.

Berikut ini contoh lengkap tentang cara menggunakan API baru ini


5
2017-11-08 10:01



Perpustakaan ini sederhana dan berfungsi dengan baik: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer

Balasan Lama ...

Saya pikir Joan Zapata memberi kita solusi yang lebih baik dan sederhana:

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

Saya jamin itu berhasil!

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


4
2017-11-14 10:14



Untuk file pdf lokal, Anda dapat membuatnya melalui pustaka pihak ketiga. misalnya, gunakan Perpustakaan MuPDF, jenis file yang didukung termasuk PDF, PNG dan JPEG.

Salah satu kekurangan dari MuPDF adalah bahwa ia menggunakan perpustakaan asli untuk memenuhi target, sehingga tidak akan mudah untuk mem-port aplikasi pada platform BlackBerry nanti.


3
2018-05-26 14:17



Untuk membuka pdf dari array byte, Anda dapat menggunakan RadaeePDF, Anda dapat melakukan hal-hal berikut ke dalam aktivitas Anda:

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