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 Users Group の方々のご厚意による)

前提条件: 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.*.dllおよびへの参照を追加します。IKVM.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- でスタックしました。 all-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
- serializer-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 に答える