textos texto sirve programa para modificar hacer gratis falsificar escribir editores editar documentos crear aplicaciones aplicacion android pdf

android - programa - excel sirve para editar documentos de texto



¿Cómo crear archivos PDF en una aplicación de Android? (8)

No es fácil encontrar una solución completa al problema de la conversión de un HTML arbitrario a PDF con letras no inglesas en Android. Lo pruebo para las letras rusas Unicode.

Usamos 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).

public boolean createPDF(String rawHTML, String fileName, ContextWrapper context){ final String APPLICATION_PACKAGE_NAME = context.getBaseContext().getPackageName(); File path = new File( Environment.getExternalStorageDirectory(), APPLICATION_PACKAGE_NAME ); if ( !path.exists() ){ path.mkdir(); } File file = new File(path, fileName); try{ Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); document.open(); // Подготавливаем HTML String htmlText = Jsoup.clean( rawHTML, Whitelist.relaxed() ); InputStream inputStream = new ByteArrayInputStream( htmlText.getBytes() ); // Печатаем документ PDF XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, null, Charset.defaultCharset(), new MyFont()); document.close(); return true; } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (DocumentException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; }

El problema más difícil es mostrar las letras rusas en PDF utilizando la biblioteca iTextPDF XMLWorker. Para esto debemos crear nuestra propia implementación de la interfaz FontProvider:

public class MyFont implements FontProvider{ private static final String FONT_PATH = "/system/fonts/DroidSans.ttf"; private static final String FONT_ALIAS = "my_font"; public MyFont(){ FontFactory.register(FONT_PATH, FONT_ALIAS); } @Override public Font getFont(String fontname, String encoding, boolean embedded, float size, int style, BaseColor color){ return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, size, style, color); } @Override public boolean isRegistered(String name) { return name.equals( FONT_ALIAS ); } }

Aquí usamos la fuente estándar de Android Droid Sans, que se encuentra en la carpeta del sistema:

private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";

¿Hay alguna forma de crear archivos PDF desde una aplicación de Android?


PDFJet ofrece una versión de OpenSource 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 dice que es compatible con Android. Hay una versión comercial con algunas características adicionales que no parece ser demasiado costosa.



Si está desarrollando dispositivos con API de nivel 19 o superior, puede usar el documento integrado PrintedPdfDocument: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html

// open a new document PrintedPdfDocument document = new PrintedPdfDocument(context, printAttributes); // start a page Page page = document.startPage(0); // draw something on the page View 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();


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. Como está escrito en C ++, debe compilarlo de forma cruzada usando NDK y escribir en el lado C y en el envoltorio de Java. Algunas de las bibliotecas de terceros se pueden usar desde el proyecto OpenCV . También en el proyecto OpenCV, U puede encontrar el archivo android.toolchain.cmake , que lo ayudará a generar Makefile .


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 grandes.


Un truco para hacer un PDF con características complejas es hacer una actividad ficticia con el diseño xml deseado. A continuación, puede abrir esta actividad ficticia, tomar una captura de pantalla mediante programación y convertir esa imagen a PDF utilizando esta biblioteca . Por supuesto, existen 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!