studio programacion móviles libros example desarrollo curso con aplicaciones java android pdf

java - programacion - Cómo renderizar PDF en Android



manual de programacion android pdf (6)

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


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

Esta API le permite crear un mapa de bits 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 mapa de bits

    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 mapa de bits preparado

    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

  • ahora puedes hacer lo que quieras con el mapa de bits.

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

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



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


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 objetivo, por lo que no será fácil transferir la aplicación a la plataforma BlackBerry más adelante.


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