0 votos

Hola buenos días, llevo un par de semanas intentando leer archivos PDF, y al final vuelvo a recurir a vuestra ayuda.
Estaba utilizando la libreria Libreria PDFViewer, y parece que ha dejado de funcionar.

Estoy probando con PDF.js https://mozilla.github.io/pdf.js/ y lo unico que consigo leer son archivos que se encuentren en la carpeta Assets, y los muestra algo lentos, le cuesta abrir los pdf, pero lo que necesito leer son archivos que se encuentran la carpeta Documentos de la Memoria Externa.

El codigo que estoy utilizando es el siguiente:

WebView webView = rootView.findViewById(R.id.pdf2View_PDF);
WebSettings settings = webView.getSettings();
settings.setSupportZoom(true);
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccessFromFileURLs(true);
settings.setAllowUniversalAccessFromFileURLs(true);
settings.setBuiltInZoomControls(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());

Uri path = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/1.pdf");
webView.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + path + "#zoom=page-width");

Pero no muestra el PDF porque dice que no encuentra, pero como digo este sistema para abrir los pdf le cuenta mucho abrirlos

Tengo que decir que no puedo utilizar el codigo para abrir aplicaciones externas, y tampoco codigo que tenga que hacer uso de internet, porque muchas de las veces, no hay conexión.

Estoy probando con la libreria SkewPdfView https://github.com/naya-aastra/SkewPdfView pero tampoco consigo mostrar los PDF.

Como puedo abrir los PDF dentro de la aplicación ?
conoce alguien alguna libreria buena, digo buena para que no pase como con la PDFViewer y se tenga que reacer todo el codigo.

Un saludo.

por en Android

1 Respuesta

0 votos

Buenas.

No he probado las bibliotecas que comentas, pero para lo que necesitas, probaría antes las clases de PDF que están dentro del Framework de Android (tienes ejemplos de visualizar documentos PdfRenderer y de crear documentos PdfDocument): https://developer.android.com/reference/android/graphics/pdf/package-summary

 

por
Hola Ramon, gracias por responder, la verdad es que me pierdo un poco, y mas cuando esta en ingles, he intentado buscar ejemplo de como utilizar PdfRenderer y parece que para poder pasar de una pagina a otra hay que poner botones, si eso es así, no creo que sea muy practico, hay documentos que tienes muchas paginas, y para llegar a las ultimas paginas hay que pulsar muchas veces los botones,
Gracias Ramon, seguiré intentando buscar alguna solución, y algún código que pueda entender la forma de trabajar, porque con este no me aclaro mucho, tengo que tirar de las traducciones que hace Google que muchas veces no son muy claras, y sobre todo dejar un poco aparcado el código kotlin, no sé, igual soy el único con este problema porque no veo muchos comentarios sobre la librería PDFViewer que ha dejado de funcionar https://github.com/barteksc/AndroidPdfViewer

Como te comenté no te puedo echar mucha mano con estas bibliotecas pues no las he usado.

Pero viendo rápidamente la biblioteca de https://github.com/barteksc/AndroidPdfViewer quizás te recomendaría que no la usaras, pues lleva más de 2 años sin actualizar y, si te da problemas, es bastante probable que esté obsoleta. Siempre que puedas intenta usar antes las bibliotecas nativas, quizás por eso no la hayan vuelto a actualizar, pues ya la incorporaba Android.

No esas bibliotecas no se pueden utilizar, incluso da un error cuando se está creando la aplicación.

Cuando hablas de bibliotecas nativas, te refieres a las clases de PDF que están dentro del Framework de Android, o hay alguna otra.

Como te he comentado antes, utilizar el PdfRenderer para visualizar documentos no es muy práctico, hay que crear botones para pasar de páginas, imagínate un documento con más de 100 páginas, si alguien quiere visualizar las ultimas paginas de ese documento, se tira media hora hasta llegar al final del documento, acabaría por no utilizar la aplicación.
 
Que otras bibliotecas nativas hay para poder visualizar PDFs, pero que no se tenga que pulsar botones para pasar de página ?

Nativa solo PdfRenderer

La explicación de scroll con RecyclerView que te puse anteriormente te debería de valer para pasar por las diferentes páginas con el dedo. Aquí tienes otro par de links con el código de ejemplo, aunque no los he probado: https://ichi.pro/es/visualizacion-de-pdf-en-viewpager2-264396285442723 y en https://cloudacademy.com/blog/how-to-implement-pdf-viewer-in-your-app-using-pdfrenderer-and-viewpager2/

Un pregunta Ramon que directamente no tiene nada que ver, pero esta relacionada, como se puede detectar si hay instalada una aplicación, y abrir los PDF con esa aplicación externa ?

Editado:

Esa pregunta ya lo tengo resulta, como puedo abrir un pdf con esta aplicación ?
https://play.google.com/store/apps/details?id=com.google.android.apps.pdfviewer

 

 

Podrías comprobar si existe el nombre del paquete y capturar el error sino existe, por ejemplo:

PackageManager pm = context.getPackageManager();

Boolean existe = true;
try {
    pm.getPackageInfo("com.paquete.nombre", 0);
    existe = true;
} catch (PackageManager.NameNotFoundException e) {
    existe = false;
}

Aunque no suele ser una buena manera de actuar advertir al usuario que instale aplicaciones dependientes, menos un visor de PDF en concreto.

Si acaso podrías generar el fichero PDF y que el usuario lo abra con el visor que tenga instalado, aunque esto puede que comprometa a tu aplicación con dificultad añadida (esto es a gusto de cada uno, particularmente me gusta más la idea de la integración con PDFViewer que es nativo y le facilita el uso de la app al usuario; pero depende de lo que necesites).

Hola, tenia abierto en navegador y no he visto tu respuesta, y al modificar el post anterior he visto tu respuesta.

Como te comentaba en el post de arriba que modifique, ya conseguí ver si esta instalada una determinada aplicación.

Hay carpetas con documentos pdf, excel, word, etc, entonces si tengo puesto la opcion de escoger una aplicación.

Pero como normalmente solemos tener instalado ese visor de PDFs, por eso pensé en la siguiente paso, que seria abrir el pdf directamente con esa aplicación y saltarse la parte donde escoger una aplicación.

Pero no consigo abrir el pdf con esa aplicación, alguna idea de como abrirlo sin tener que escoger otra aplicación ?

Yo tambien prefiero abrir el pdf con PDFViewer dentro de la misma aplicación, pero no se como abrirlo, los codigos que encuentro para poder guiarme ya que no estoy muy puesto, estan en Kotlin.
Que yo sepa no se puede no escoger aplicación por políticas de seguridad de la API de Android, me temo que ese comportamiento no se pueda cambiar.