使用ApacheFOP v1.0在.NET应用程序中

mpgws1up  于 2023-05-01  发布在  .NET
关注(0)|答案(6)|浏览(162)

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

using org.apache.fop.apps;

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

aij0ehis1#

(由FOP用户组提供)
先决条件:IKVMwww.example. www.example.com 安装。
1.下载FOP 1.0来自 www.example.com
1.将所有JAR文件复制到C:\Fop\Build\
1.打开命令提示符并运行以下命令:ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:C:\Fop\Build\\*.jar -version:1.0 -out:C:\Fop\fop.dll
1.在Visual Studio项目中,添加对fop.dllIKVM.OpenJDK.*.dllIKVM.Runtime.dll的引用

nxowjjhe

nxowjjhe2#

我尝试了ClayB建议的方法,但没有成功。
我使用了IKVM 0的组合。44和0.46,FOP为0。95和1.0。但什么都不起作用!有一些java库丢失并导致错误。还有一个。发生网络异常:无法在系统中加载类型。安全命名空间。我试着把每一个都写下来。jar文件到dll,如Avik Sengupta在http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html上建议的那样,但在lib\batik-all-1上卡住了。7.jar。除非有人有进一步的工作,否则我确信这种方法不再适用于最新的工具包。
然而,我发现了一种不同的方法,它允许从调用FOP。net.我希望这能帮助到一些人:

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

mqkwyuun

mqkwyuun3#

我知道这是一个旧的线程,但它仍然采取了一些研究,让这个工作。它现在可以在Visual Studio 2013中与NuGet一起使用。NuGet包被称为crispin。在我下面的代码中,我传入一个“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();
        }
    }
f1tvaqid

f1tvaqid4#

ClayB为我工作。请记住第2点“将所有JAR文件复制到C:\Fop\Build\”。
“所有”是非常重要的。查看我需要的jar列表:

  • fop.jar
  • avalon框架-4。2.0.jar
  • 蜡染全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”中。
vptzau2j

vptzau2j5#

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

gijlo24d

gijlo24d6#

我知道这是一个老帖子,但这篇文章没有解决方案。我创建了一个运行在.Net Core上的Apache FOP version 2.8的开源纯端口。查看详情:

FOP.NetCore

https://github.com/sorcerdon/FOP.NetCore
以下是Nuget:

由于这是一个纯端口,这意味着它可以做Apache FOP可以做的任何事情。

相关问题