Cómo renderizar PDF en Android

En mi aplicación, recibiré un flujo de bytes y lo convertiré a un archivo pdf en la memoria del teléfono. ¿Cómo lo renderizo en un pdf? ¿Y mostrarlo en una actividad?

Algunos teléfonos (como el Nexus One) vienen con una versión de Quickoffice preinstalada, por lo que puede ser tan fácil como enviar el Intento apropiado una vez que hayas guardado el archivo en la tarjeta 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(); } } } }); } } 

Abrir archivo pdf en webview .

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

Android-Lollipop (api 21) introduce una nueva API: PdfRenderer

Esta API le permite crear un bitmap a partir de una página en un documento PDF.

En breve:

  • Obtenga un descriptor de archivo buscable de su documento pdf:

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

     PdfRenderer renderer = new PdfRenderer(fd); 
  • preparar el bitmap

     Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444); 
  • obtener la PdfRenderer.Page para renderizar

     PdfRenderer.Page page = renderer.openPage(pageIndex); 
  • renderizar la página en el bitmap preparado

     page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); 
  • ahora puedes hacer lo que quieras con el bitmap.

  • tenga en cuenta que los 2 argumentos nulos pueden permitirle recortar una parte de la página y realizar una transformación (utilizando una Matriz ) del clip
  • hay otro modo de renderizado: RENDER_MODE_FOR_PRINT . Si necesita este modo, hay algunas pautas para usarlo correctamente: aquí están los detalles .

Aquí hay un ejemplo completo sobre cómo usar esta nueva API

Esta biblioteca es simple y funciona bien: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer

Respuesta anterior …

Creo que Joan Zapata nos da la mejor y más simple solución:

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

¡Te aseguro que funciona!

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

Para los archivos pdf locales, puede renderizarlos a través de las bibliotecas de terceros. por ejemplo, use la biblioteca MuPDF , sus tipos de archivos compatibles incluyen PDF, PNG y JPEG.

Una deficiencia de MuPDF es que usa una biblioteca nativa para cumplir el objective, por lo que no será fácil transferir la aplicación a la plataforma BlackBerry más adelante.

Para abrir un pdf desde una matriz de bytes, puede usar RadaeePDF , puede hacer lo siguiente en su actividad:

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