FOP for Android?

我最近编译了一个使用FOP的Android应用程序,因为我想将一些XML转换成PDF文件。 不过我不认为FOP JAR文件不适用于Android。 有没有可用于Android的FOP版本? 或者我可以在我的应用程序中使用任何其他XML到PDF转换器,而不是连接到互联网上启用FOP的服务器?

我试过包括fop.jar和xmlgraphics.jar,但即使添加到我的项目,调用FopFactory.newInstance()失败。

这是我调用FOP的button点击的代码片段:

 // 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(); } }); 

编译器也给了我一堆Dxwarning: Ignoring InnerClasses attribute...错误。 点击button创buildPDF时出现以下错误:

 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) 

Solutions Collecting From Web of "FOP for Android?"

使用Android,您不能只从Java库中获取.jar,并在Android应用程序中使用它。 Android使用Dalvik JVM(http://en.wikipedia.org/wiki/Dalvik_(software)),它与Java SE API的完整API不是100%兼容的,而是只支持API的一个子集。 由于这个原因,你可能会用到的许多Java库,如FOP,都不是Android兼容的,需要专门化才能使这些库在Android设备上正常工作。 祝你好运。