3

我想在 .NET 中使用 Flying Saucer Java API,所以我尝试使用IKVM来转换Flying Saucer库:

ikvmc core-renderer.jar

出于某种原因,IKVMC 给了我一个 exe core-renderer.exe,所以我将其重命名为core-renderer.dll,添加到我的程序集中并被黑掉了

using java.io;
using java.lang;
using com.lowagie.text;
using org.xhtmlrenderer.pdf;

namespace flying_saucer
{
    class FlyingSaucerApp
    {
        static void Main(string[] args)
        {
            // This works
            DocumentException dummy = new DocumentException();

            ITextRenderer renderer = new ITextRenderer();


            // For some reason, this raises NoClassDefFoundError                
            renderer.setDocument(File("hello.xhtml").toURI().toURL().toString());
        }
    }
}

出于某种原因,它正在给予java.lang.NoClassDefFoundError: com.lowagie.text.DocumentException. 我意识到可能会抛出DocumentException一些东西ITextRender(),但我已经包含了com.lowagie.text,有什么想法吗?

4

2 回答 2

5

事实证明,对于这种特殊情况,我需要渲染 Flying Saucer 和 iText(Flying Saucer 的依赖项),并让 Flying Saucer 程序集引用其依赖项:

ikvmc -target:library itext.jar
ikvmc -target:library -reference:itext.dll core-renderer.jar

(对于新手:如果您没有阅读任何文档并且只是在尝试命令,您还需要确保 IKVMC 随附的 DLL 文件也存在——最简单的方法是将所有 IKVMC 文件转储到您的iText JAR 文件)

于 2010-06-04T10:22:58.200 回答
2

确保您已将 、 和 程序集包含IKVM.AWT.WinForms.dllIKVM.OpenJDK.ClassLibrary.dllIKVM.Runtime.dllIKVM.Runtime.JNI.dll项目中。此外,为了避免生成可执行文件然后重命名它,您可以-target:library在编译时指定开关。

于 2010-06-01T08:18:25.160 回答