android - 适用于 Android 的 FOP?

标签 android apache-fop

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

我已经尝试包含 fop.jar 和 xmlgraphics.jar,但即使将它们添加到我的项目中,对 FopFactory.newInstance() 的调用也会失败。

这是调用 FOP 的按钮点击代码 fragment :

// 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... 错误。这是我单击按钮创建 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)

最佳答案

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

关于android - 适用于 Android 的 FOP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083162/

相关文章:

java - Android OpenGL ES读取纹理像素

pdf - 这个 Apache FOP 错误是什么意思?

XSL-FO 在一行或 fo 上写入文本 :leader

java - FopFactory.newInstance() 命令上的 Apache fop-0.95 错误

java - 如何在 Apache FOP 2.3 中将字体呈现为形状

android - 加载 fragment 没有淡入或淡出

android - 查询正在使用QUERY_ALL_PACKAGES权限的Android开发者

xsl-fo - 不同字体大小的 block 元素下划线,无间断线

android - 防止卸载 Android 应用程序

android - 您的 APP_BUILD_SCRIPT 使用 Android ndk-build 指向一个未知文件