Использование ApacheFOP v1.0 в приложении .NET - PullRequest
10 голосов
/ 18 октября 2010

Кто-нибудь успешно собрал библиотеку Apache FOP v1.0 в .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();
          }
     }
}

Ответы [ 5 ]

8 голосов
/ 25 октября 2010

(Предоставлено людьми из группы пользователей FOP)

Необходимое условие: установлен IKVM 0.44.0.5.

  1. Загрузите FOP 1.0 с http://xmlgraphics.apache.org/fop/1.0/index.html#download
  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.dll, IKVM.OpenJDK.*.dll и IKVM.Runtime.dll
6 голосов
/ 04 августа 2011

Я попробовал подход, предложенный ClayB, но безуспешно.

Я использовал комбинации IKVM 0,44 и 0,46 с FOP 0,95 и 1,0.Но ничего не сработало!Там некоторые java-библиотеки отсутствуют и вызывают ошибки.Также произошло исключение .net: не удалось загрузить тип в пространстве имен System.Security.Я даже пытался скомпилировать каждый файл .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

3 голосов
/ 07 марта 2014

Я знаю, что это старая тема, но все же потребовалось некоторое исследование, чтобы это заработало. Теперь он доступен с NuGet в Visual Studio 2013. Пакет 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();
        }
    }
0 голосов
/ 18 сентября 2013

ClatB`s тоже работал здесь. Просто напомните, чтобы добавить ВСЕ библиотеки IKVM в ваш проект (Работал с Fop 1.1 и IKVM 7.2.4630.5).

0 голосов
/ 26 октября 2011

ClayB работал для меня. Пожалуйста, помните пункт 2 «Скопируйте все файлы JAR в C: \ Fop \ Build \».
«все» очень важно. Смотрите здесь список банок, в которых я нуждался:
- fop.jar
- avalon-framework-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, вы найдете в папке "lib".

...