2010-10-18 25 views
10

Herhangi biri Apache FOP v1.0 kitaplığına bir .NET DLL dosyasına başarıyla katlandı mı? http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html adresinde bulunan IKVM sözdizimini kullanıyorum; ancak, derlenmiş DLL eksik görünüyor. Örneğin, ben FopFactory nesne örneğini olamaz:.NET uygulamasında ApacheFOP v1.0 kullanma

using org.apache.fop.apps; 

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

http://fonet.codeplex.com/ yerine mi deneyin? –

+0

ayrıca bkz: http://stackoverflow.com/questions/1099485/generating-pdf-in-net-using-xsl-fo –

+0

Şu anda nFop kullanıyoruz, ancak 508'den yararlanmak için ApacheFOP v1.0'a geçmek istiyoruz erişilebilirlik özellikleri. – ClayB

cevap

8

(FOP Kullanıcılar Grubu millet izniyle)

Önkoşul: IKVM 0.44.0.5 yüklü. C:\Fop\Build\

  • için http://xmlgraphics.apache.org/fop/1.0/index.html#download
  • Kopya tüm JAR dosyalarını gelen

    1. İndir FOP 1.0 Komut istemini açın ve aşağıdaki çalıştırın: senin Visual Studio projesinde ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:C:\Fop\Build\\*.jar -version:1.0 -out:C:\Fop\fop.dll
    2. fop.dll, IKVM.OpenJDK.*.dll ve IKVM.Runtime.dll referans ekleyebilir
  • +0

    Benim için çalışıyor :) Teşekkürler –

    +0

    +1. Bu benim için de FOP 1.0 ve IKVM 0.46.0.1 kullanarak çalıştı. Dönüşüm sırasında çok fazla uyarıda bulundum, ancak her şey işe yarayacak gibi görünüyor. [FOP yerleştirme talimatları] 'ndan örnek kodu kullanarak (http://xmlgraphics.apache.org/fop/1.0/embedding.html) çok az değişiklik yapıldı (gerekli USING deyimleri gerekliydi ve bir dize kullanılarak MIME türü belirtildi) . –

    +0

    Benim için hatalara neden olan '-reference 'anahtarını yok sayabilirsiniz. Ancak, bugünün son fop trunk ve son ikvm ile çalıştı. Performans neredeyse eşit görünüyor. Net biraz daha yavaş ama daha az bellek kullanıyor. Sadece dönüştürülmüş fops Main.main yöntemini çağıran tek satırlı bir komut satırı uygulaması kullandım. – Peterdk

    5

    ClayB tarafından önerilen yaklaşımı hiç bir denemeden denedim.

    IKVM 0.44 ve 0.46 kombinasyonlarını FOP 0.95 ve 1.0 ile kullandım. Ama hiçbir şey işe yaramadı! Bazı java lib'ları eksik ve hatalara neden oluyor. Ayrıca bir .net istisnası oluştu: System.Security ad alanında yazı yüklenemedi. Hatta her .jar dosyasını Avuk Sengupta tarafından http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html için önerilen şekilde dll'ye derlemeye çalıştım, ancak lib \ batik-all-1.7.jar konumuna yapıştı. Herhangi bir başka işleve sahip olmadıkça, bu yaklaşımın artık en son kitlerle çalışmadığına inanıyorum. Bununla birlikte, birisinden FOP'yi .net'den çağırmayı sağlayan farklı bir yaklaşım buldum. http://www.ptperalta.net/index.php/technology/using-apache-fop-in-net.html

    0

    ClayB benim için çalıştı:

    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() { 
    } 
    

    orijinal makaleyi okuyun: Bu kimse yardımcı olacağını umuyoruz. Lütfen 2. noktadaki "Tüm JAR dosyalarını C: \ Fop \ Build \" e kopyalayın.
    "all" çok önemlidir. fop.jar
    - - avalon-çerçeve-4.2.0.jar
    - batik-all-1.7.jar
    - commons-io-1.3.1.jar

    : Ben gerekli kavanoz en listesi burada görün - commons-günlük-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
    Tüm kavanozun "lib" klasöründe bulabileceğiniz fop dışında.

    +0

    Not: Lib'lere 'lib \ build'de küplere ihtiyacınız olduğunu unutmayın. Bu fop .net sürümünü çalıştırırken bazı sınıf bulunamadı neden oldu. – Peterdk

    0

    ClatB`s burada da çalıştı. Sadece projenize TÜM IKVM lib'lerini eklemeyi unutmayın (Fop 1.1 ve IKVM 7.2.4630.5 ile Çalışıldı).

    3

    Bunun eski bir iş parçacığı olduğunu biliyorum, ancak bu çalışmayı elde etmek için hala bazı araştırmalar yaptı. Şimdi Visual Studio 2013'te NuGet ile kullanılabilir. NuGet paketine crispin.fop denir. Aşağıdaki kodumda, bir "fop" dosyasında ve oluşturduğum yeni PDF dosyasını ve "voila" iletiyorum, oluşturuldu.

    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

    FopFactory fopFactory = FopFactory.newInstance(); '' newInstance' yönteminde '' en az bir parametre bekleniyor. Muhtemelen sonradan ortaya çıkan bir kırılma değişikliği –