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