Android PdfDocument tamaño del archivo
Quiero generar un archivo PDF desde una vista usando la clase PdfDocument
android introducida en KitKat. Me las arreglé para hacerlo, y el archivo está hasta ahora generado bien, terminando con un PDF correcto. El único problema es que el archivo es enorme, 12Mb para sólo una página. ¿Hay una manera de reducir el tamaño de archivo?
El código que estoy usando para generar el PDF es:
- Cómo leer archivos .doc, .docx, .xls en android
- Cómo crear un archivo pdf con varias páginas de archivo de imagen en android
- ¿Existe una biblioteca de C ++ (algo alto nivel) para crear documentos PDF que se ejecutan en iOS y Android?
- PrintedPdfDocument siempre da como resultado PDF dañado
- Múltiples hipervínculos sobre una imagen en pdf android
public static File generateDocument(Activity activity, String fileName, ViewGroup container) throws IOException{ File f = new File(activity.getExternalFilesDir(null), fileName); PdfDocument document = new PdfDocument(); try{ for(int i=0;i<container.getChildCount();i++){ View v = container.getChildAt(i); PdfDocument.PageInfo.Builder pageBuilder = new PdfDocument.PageInfo.Builder(v.getWidth(), v.getHeight(), i); Page page = document.startPage(pageBuilder.create()); v.draw(page.getCanvas()); document.finishPage(page); } document.writeTo(new FileOutputStream(f)); } finally{ if(document!=null){ document.close(); } } return f; }
- Uso de la clase PdfDocument para la versión antigua de Android
- Formulario de llenado de Android
- Cómo convertir jpg a pdf en Android java
- Cómo convertir Android View a PDF
- Cómo crear archivos pdf en android
- Cómo hacer anotaciones como destacar, tachar, subrayar, dibujar, añadir texto, etc en android para un visor de pdf?
Hay algunas cosas principales que aumenta el tamaño de un archivo PDF:
hi-resolution pictures (where lo-res would suffice) embedded fonts (where content would still be readable "good enough" without them) PDF content not required any more for the current version/view (older version of certain objects) embedded ICC profiles embedded third-party files (using the PDF as a container) embedded job tickets (for printing) embedded Javascript and a few more
Intente usar iText. Los enlaces siguientes dan una idea básica para iText en android.
http://technotransit.wordpress.com/2011/06/17/using-itext-in-android/
http://www.mysamplecode.com/2013/05/android-itext-pdf-bluetooth-printer.html
Esto parece ser un error en PdfDocument. El archivo PDF que creé con PdfDocument fue de 5,6 megabytes. El mismo documento generado a través del equivalente de iOS fue 500K. Si tomo el PDF de Android y lo ejecuto a través de la optimización de pdf de Adobe Acrobat, sin comprimir ninguna imagen, el archivo de 5.6MB se convierte en 350K. Parecen idénticos, y no apliqué ninguna compresión en Adobe Acrobat.
En el código PDF actual, el diccionario de objetos de imagen de Android es
<</Type /XObject /Subtype /Image /Width 1224 /Height 1584 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 5816448 >>
El PDF de iOS tiene este dict
<< /Length 8 0 R /Type /XObject /Subtype /Image /Width 1224 /Height 1584 /ColorSpace /DeviceRGB /SMask 9 0 R /BitsPerComponent 8 /Filter /FlateDecode >>
Creo que el problema es la falta del filtro FlateDecode en la versión de Android. Cuando lo ejecuto a través del optimizador de Adobe Acrobat PDF, obtiene el filtro FlateDecode.