¿No sería bueno si el modelo de imagen de Android se inspirara en Qt's? Qt estableció que generar PDF o SVG puede ser tan simple como redirigir el mismo código que uno usa para dibujar en la pantalla. Mire la derivación de QPrinter, QSvgGenerator y QWidget de QPaintDevice para el patrón.
Calaf
1
Lo mismo en iOS. La generación de PDF está incorporada.
Fabian Zeindl
2
Creo que Kit Kat tiene una función para generar PDF, pero no sé si esto es compatible con versiones anteriores. He publicado una opción a continuación y el siguiente sitio enumera varias opciones que van desde comerciales a gratuitas: stefan.fenz.at/creating-pdfs-on-android-an-evaluation
IcedDante
55
Ridículo que esto se cerró como "fuera de tema".
Joe Coder
2
¿Por qué se cerró esta publicación? Stackoverflow es demasiado exigente con su alcance; esta pregunta tiene 175,000 visitas, como un recurso de codificación este sitio debería permitir cosas hipercomunes como esta, las reglas necesitan enmendarse, leemos demasiado lejos en el texto literal de lo que está "fuera de tema" en lugar del núcleo de la regla. Lo marqué para volver a abrir, espero que otros también voten.
Albert Renshaw
Respuestas:
155
Si alguien quiere generar archivos PDF en un dispositivo Android, aquí está cómo hacerlo:
// open a new documentPrintedPdfDocument document =newPrintedPdfDocument(context,
printAttributes);// start a pagePage page = document.startPage(0);// draw something on the pageView content = getContentView();
content.draw(page.getCanvas());// finish the page
document.finishPage(page);...// add more pages...// write the document content
document.writeTo(getOutputStream());//close the document
document.close();
Un truco para hacer un PDF con características complejas es hacer una actividad ficticia con el diseño xml deseado. Luego puede abrir esta actividad ficticia, tomar una captura de pantalla mediante programación y convertir esa imagen a pdf usando esta biblioteca . Por supuesto, hay limitaciones, como no poder desplazarse, no más de una página, pero para una aplicación limitada, esto es rápido y fácil. ¡Espero que esto ayude a alguien!
Este comentario me apunta en la dirección correcta. Sin embargo: 1. ¡no necesita comenzar una actividad para tomar una captura de pantalla! simplemente puede inflar un diseño xml en tiempo de ejecución y convertirlo en un mapa de bits como se sugiere aquí ; Dicho esto, puede generar múltiples páginas con diferentes diseños. El desplazamiento no se admite como se dice, pero puede implementar una lista utilizando, por ejemplo, un diseño lineal.
r.pedrosa
11
No es fácil encontrar una solución completa del problema de la conversión de un HTML arbitrario a PDF con letras que no están en inglés en Android. Lo pruebo para las letras Unicode rusas.
Utilizamos tres bibliotecas:
(1) Jsoup (jsoup-1.7.3.jar) para una conversión de HTML a XHTML,
El problema difícil es mostrar letras rusas en PDF utilizando la biblioteca iTextPDF XMLWorker. Para esto debemos crear nuestra propia implementación de la interfaz FontProvider:
Actualización He probado la biblioteca yo mismo. Funciona bien con generaciones de PDF simples (proporciona métodos para agregar texto, líneas, rectángulos, mapas de bits, fuentes). El único problema es que el PDF generado se almacena en una Cadena en la memoria, esto puede causar problemas de memoria en documentos de gran tamaño.
¿Alguien puede decirme lo que Android PDF Writer no puede hacer, ese "itext" sí?
M. Usman Khan
1
No mantenido !! Última actualización: 2015-12-14
Mahdi Alkhatib
2
PDFJet ofrece una versión de código abierto de su biblioteca que debería ser capaz de manejar cualquier tarea básica de generación de PDF. Es una solución puramente basada en Java y se afirma que es compatible con Android. Existe una versión comercial con algunas características adicionales que no parece ser demasiado costosa.
Tarde, pero relevante para solicitar y con suerte útil. Si utiliza un servicio externo (como se sugiere en la respuesta de CommonsWare), Docmosis tiene un servicio en la nube que podría ayudar: descargar el procesamiento a un servicio en la nube que realiza el procesamiento pesado. Ese enfoque es ideal en algunas circunstancias, pero por supuesto depende de estar conectado a la red.
U también puede usar la biblioteca PoDoFo . El objetivo principal es que se publique bajo LGPL. Dado que está escrito en C ++, debe realizar una compilación cruzada con NDK y escribir C-side y Java wrapper. Algunas bibliotecas de terceros se pueden usar desde el proyecto OpenCV . También en OpenCV el proyecto U puede encontrar un android.toolchain.cmakearchivo, que lo ayudará a generar Makefile.
Respuestas:
Si alguien quiere generar archivos PDF en un dispositivo Android, aquí está cómo hacerlo:
fuente
Si está desarrollando dispositivos con un nivel de API 19 o superior, puede usar el documento impreso PrintedPdf: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
fuente
Un truco para hacer un PDF con características complejas es hacer una actividad ficticia con el diseño xml deseado. Luego puede abrir esta actividad ficticia, tomar una captura de pantalla mediante programación y convertir esa imagen a pdf usando esta biblioteca . Por supuesto, hay limitaciones, como no poder desplazarse, no más de una página, pero para una aplicación limitada, esto es rápido y fácil. ¡Espero que esto ayude a alguien!
fuente
No es fácil encontrar una solución completa del problema de la conversión de un HTML arbitrario a PDF con letras que no están en inglés en Android. Lo pruebo para las letras Unicode rusas.
Utilizamos tres bibliotecas:
(1) Jsoup (jsoup-1.7.3.jar) para una conversión de HTML a XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
El problema difícil es mostrar letras rusas en PDF utilizando la biblioteca iTextPDF XMLWorker. Para esto debemos crear nuestra propia implementación de la interfaz FontProvider:
Aquí usamos la fuente estándar de Android Droid Sans, que se encuentra en la carpeta del sistema:
fuente
Un poco tarde y todavía no lo he probado, pero otra biblioteca que está bajo la licencia BSD es Android PDF Writer .
Actualización He probado la biblioteca yo mismo. Funciona bien con generaciones de PDF simples (proporciona métodos para agregar texto, líneas, rectángulos, mapas de bits, fuentes). El único problema es que el PDF generado se almacena en una Cadena en la memoria, esto puede causar problemas de memoria en documentos de gran tamaño.
fuente
PDFJet ofrece una versión de código abierto de su biblioteca que debería ser capaz de manejar cualquier tarea básica de generación de PDF. Es una solución puramente basada en Java y se afirma que es compatible con Android. Existe una versión comercial con algunas características adicionales que no parece ser demasiado costosa.
fuente
Tarde, pero relevante para solicitar y con suerte útil. Si utiliza un servicio externo (como se sugiere en la respuesta de CommonsWare), Docmosis tiene un servicio en la nube que podría ayudar: descargar el procesamiento a un servicio en la nube que realiza el procesamiento pesado. Ese enfoque es ideal en algunas circunstancias, pero por supuesto depende de estar conectado a la red.
fuente
U también puede usar la biblioteca PoDoFo . El objetivo principal es que se publique bajo LGPL. Dado que está escrito en C ++, debe realizar una compilación cruzada con NDK y escribir C-side y Java wrapper. Algunas bibliotecas de terceros se pueden usar desde el proyecto OpenCV . También en OpenCV el proyecto U puede encontrar un
android.toolchain.cmake
archivo, que lo ayudará a generarMakefile
.fuente