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:

 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; } 

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

https://stackoverflow.com/a/21025162/3110609

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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.