10

有没有人成功地将 Apache FOP v1.0 库编译为 .NET DLL?我正在使用http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html中的 IKVM 语法;但是,编译后的 DLL 似乎不完整。例如,我不能将 FopFactory 对象实例化为:

using org.apache.fop.apps;

namespace Utils
{
     public class PdfRender
     {
          public void Render()
          {
            FOUserAgent foUserAgent = fop.getUserAgent();
            FopFactory fopFactory = FopFactory.newInstance();
          }
     }
}
4

5 回答 5

8

(由 FOP 用户组的人提供)

先决条件:已安装 IKVM 0.44.0.5。

  1. 从http://xmlgraphics.apache.org/fop/1.0/index.html#download下载 FOP 1.0
  2. 将所有 JAR 文件复制到C:\Fop\Build\
  3. 打开命令提示符并运行以下命令:ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:C:\Fop\Build\\*.jar -version:1.0 -out:C:\Fop\fop.dll
  4. 在 Visual Studio 项目中,添加fop.dllIKVM.OpenJDK.*.dllIKVM.Runtime.dll
于 2010-10-25T14:06:41.280 回答
6

我尝试了 ClayB 建议的方法,但没有成功。

我使用了 IKVM 0.44 和 0.46 与 FOP 0.95 和 1.0 的组合。但是没有任何效果!缺少一些 java 库并导致错误。还发生了一个 .net 异常:无法在 System.Security 命名空间中加载类型。我什至尝试按照 Avik Sengupta 在http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html的建议将每个 .jar 文件编译为 dll ,但被困在 lib\batik-全1.7.jar。除非有人有任何进一步的解决方法,否则我相信这种方法不再适用于最新的套件。

但是,我发现了一种不同的方法,它允许从 .net 调用 FOP。我希望这会帮助某人:

try {
    ProcessStartInfo p = new ProcessStartInfo(fopPath + "fop.bat");
    p.Arguments = String.Format("{0} {1}", foFilePath, pdfFilePath);
    p.WindowStyle = ProcessWindowStyle.Hidden;
    p.WorkingDirectory = fopPath;
    Process proc = new System.Diagnostics.Process();
    proc.StartInfo = p;

    proc.Start();
    proc.WaitForExit();
    }
catch() {
}

请阅读原文:http ://www.ptperalta.net/index.php/technology/using-apache-fop-in-net.html

于 2011-08-04T11:15:41.240 回答
4

我知道这是一个旧线程,但仍然需要一些研究才能使其正常工作。它现在可用于 Visual Studio 2013 中的 NuGet。NuGet 包称为crispin.fop。在下面的代码中,我传入了一个“fop”文件和我想要创建的新 PDF 文件,“瞧”,它被创建了。

    using org.apache.fop.tools;
    using org.apache.fop.apps;
    using org.xml.sax;
    using java.io;

    public void GeneratePDF(string foFile, string pdfFile)
    {
        OutputStream os = new BufferedOutputStream(new FileOutputStream(new java.io.File(pdfFile)));

        try
        {
            FopFactory fopFactory = FopFactory.newInstance();
            Fop fop = fopFactory.newFop("application/pdf", os);
            FOUserAgent foUserAgent = fop.getUserAgent();
            javax.xml.transform.TransformerFactory factory = javax.xml.transform.TransformerFactory.newInstance();
            javax.xml.transform.Transformer transformer = factory.newTransformer();
            javax.xml.transform.Source src = new javax.xml.transform.stream.StreamSource(new java.io.File(foFile));
            javax.xml.transform.Result res = new javax.xml.transform.sax.SAXResult(fop.getDefaultHandler());
            transformer.transform(src, res);
        }

        catch (Exception ex)
        {                
            throw ex;
        }

        finally
        {
            os.close();
        }
    }
于 2014-03-07T13:01:25.470 回答
0

ClayB 为我工作。请记住第 2 点“将所有 JAR 文件复制到 C:\Fop\Build\”。
“全部”非常重要。在这里查看我需要的 jar 列表:
- fop.jar
- avalon-framework-4.2.0.jar
- batik-all-1.7.jar
- commons-io-1.3.1.jar
- commons-logging-1.0.4。 jar
- 序列化程序-2.7.0.jar
- xalan-2.7.0.jar
- xercesImpl-2.7.1.jar
- xml-apis-1.3.04.jar
- xml-apis-ext-1.3.04.jar
- xmlgraphics- commons-1.4.jar
除了 fop 之外的所有 jar,您都可以在文件夹“lib”中找到。

于 2011-10-26T14:00:02.053 回答
0

ClatB 也在这里工作过。只需记住将所有 IKVM 库添加到您的项目(使用 Fop 1.1 和 IKVM 7.2.4630.5)。

于 2013-09-18T11:18:47.030 回答