FOP para Android?

Recientemente he compilado una aplicación de Android utilizando FOP como quiero convertir algunos XML en un archivo PDF. Sin embargo, no creo que los archivos JAR FOP no funcionen en Android. ¿Hay alguna versión de FOP disponible para Android? O cualquier otro convertidor de XML a PDF que podría utilizar en mi aplicación en lugar de conectarse a un servidor FOP habilitado en Internet?

He intentado incluir fop.jar y el xmlgraphics.jar pero incluso con ésos agregados a mi proyecto, la llamada a FopFactory.newInstance() falla.

Aquí está mi fragmento de código para el botón de clic que llama a FOP:

 // Add button listener btnCreatePDF.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FopFactory fopFactory = FopFactory.newInstance(); OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("/sdcard/test.pdf"))); Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); Source src = new StreamSource(new File("/sdcard/test.fo")); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); out.close(); } }); 

El compilador también me está dando un montón de Dxwarning: Ignoring InnerClasses attribute... Aquí está el error cuando hago clic en el botón para crear el PDF:

 02-22 14:16:23.641: WARN/System.err(5590): java.lang.UnsupportedOperationException: Don't know how to handle "application/pdf" as an output format. Neither an FOEventHandler, nor a Renderer could be found for this output format. 02-22 14:16:23.641: WARN/System.err(5590): at org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:361) 02-22 14:16:23.641: WARN/System.err(5590): at org.apache.fop.fo.FOTreeBuilder.(FOTreeBuilder.java:105) 02-22 14:16:23.641: WARN/System.err(5590): at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:101) 02-22 14:16:23.641: WARN/System.err(5590): at org.apache.fop.apps.Fop.(Fop.java:79) 02-22 14:16:23.641: WARN/System.err(5590): at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:271) 02-22 14:16:23.641: WARN/System.err(5590): at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:248) 02-22 14:16:23.641: WARN/System.err(5590): at com.zebdor.signal88.ProposalCalculator$3.onClick(ProposalCalculator.java:158) 02-22 14:16:23.641: WARN/System.err(5590): at android.view.View.performClick(View.java:2501) 02-22 14:16:23.641: WARN/System.err(5590): at android.view.View$PerformClick.run(View.java:9107) 02-22 14:16:23.641: WARN/System.err(5590): at android.os.Handler.handleCallback(Handler.java:587) 02-22 14:16:23.641: WARN/System.err(5590): at android.os.Handler.dispatchMessage(Handler.java:92) 02-22 14:16:23.641: WARN/System.err(5590): at android.os.Looper.loop(Looper.java:123) 02-22 14:16:23.641: WARN/System.err(5590): at android.app.ActivityThread.main(ActivityThread.java:3812) 02-22 14:16:23.641: WARN/System.err(5590): at java.lang.reflect.Method.invokeNative(Native Method) 02-22 14:16:23.641: WARN/System.err(5590): at java.lang.reflect.Method.invoke(Method.java:507) 02-22 14:16:23.641: WARN/System.err(5590): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 02-22 14:16:23.641: WARN/System.err(5590): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 02-22 14:16:23.641: WARN/System.err(5590): at dalvik.system.NativeStart.main(Native Method) 

Con Android, no puedes tomar un archivo .jar desde una biblioteca de Java y usarlo en una aplicación de Android. Android utiliza la JVM de Dalvik (http://en.wikipedia.org/wiki/Dalvik_(software)) que no es 100% compatible con la API completa de la API de Java SE, y en su lugar sólo admite un subconjunto de la API. Por esta razón, muchas de las bibliotecas Java a las que podría estar acostumbrado, como FOP, no son compatibles con Android tal cual y requieren especialización antes de que dichas bibliotecas funcionen correctamente en un dispositivo Android. Buena suerte.

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