2010-10-18 16 views
10

में ApacheFOP v1.0 का उपयोग करना क्या किसी ने सफलतापूर्वक Apache FOP v1.0 लाइब्रेरी को .NET DLL में अनुपालन किया है? मैं http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html पर आईकेवीएम सिंटैक्स का उपयोग कर रहा हूं; हालांकि, संकलित डीएलएल अधूरा प्रतीत होता है। उदाहरण के लिए, मैं FopFactory वस्तु का दृष्टांत नहीं कर सकते हैं के रूप में:.NET अनुप्रयोग

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/ को आजमाया? –

+0

यह भी देखें: http://stackoverflow.com/questions/1099485/generating-pdf-in-net-using-xsl-fo –

+0

हम वर्तमान में nFop का उपयोग कर रहे हैं, लेकिन 508 ​​का लाभ उठाने के लिए अपाचेफ़ॉप v1.0 पर जाना चाहते हैं अभिगम्यता विशेषताएं। – ClayB

उत्तर

8

(एफओपी उपयोगकर्ता समूह पर लोगों के सौजन्य से)

पूर्वापेक्षा: iKVM 0.44.0.5 स्थापित। http://xmlgraphics.apache.org/fop/1.0/index.html#download

  • कॉपी सभी जार फ़ाइलों से

    1. डाउनलोड एफओपी 1.0 C:\Fop\Build\
    2. के लिए खुला एक कमांड प्रॉम्प्ट और निम्न चलाएँ: ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:C:\Fop\Build\\*.jar -version:1.0 -out:C:\Fop\fop.dll
    3. अपने दृश्य स्टूडियो परियोजना में, fop.dll, IKVM.OpenJDK.*.dll और IKVM.Runtime.dll के संदर्भ जोड़
  • +0

    मेरे लिए काम करता है :) धन्यवाद –

    +0

    +1। यह मेरे लिए एफओपी 1.0 और आईकेवीएम 0.46.0.1 का उपयोग करने के लिए भी काम करता है। रूपांतरण के दौरान मेरे पास बहुत सी चेतावनियां थीं लेकिन सब कुछ काम करने लगता है। [एफओपी एम्बेडिंग निर्देश] से उदाहरण कोड का उपयोग करना (http://xmlgraphics.apache.org/fop/1.0/embedding.html) बहुत कम संशोधन के साथ काम करता है (आवश्यक जरूरी उपयोग कथन, और एक स्ट्रिंग का उपयोग कर एमआईएमई प्रकार निर्दिष्ट) । –

    +0

    आप 'रेफरेंस' स्विच को अनदेखा कर सकते हैं, जिससे मेरे लिए त्रुटियां आईं। लेकिन यह आज के नवीनतम fop ट्रंक और नवीनतम ikvm के साथ काम किया। प्रदर्शन लगभग बराबर दिखता है, थोड़ा सा धीमा लेकिन कम स्मृति का उपयोग करना। मैंने एक लाइन कमांडलाइन ऐप का उपयोग किया जो केवल परिवर्तित fops Main.main विधि को कॉल करता है। – Peterdk

    5

    मैंने बिना किसी सफलता के क्लेब द्वारा सुझाए गए दृष्टिकोण की कोशिश की।

    मैंने एफओपी 0.95 और 1.0 के साथ आईकेवीएम 0.44 और 0.46 के संयोजनों का उपयोग किया। लेकिन कुछ भी काम नहीं किया! कुछ जावा libs गायब हैं और त्रुटियों का कारण बन रहे हैं। एक .net अपवाद भी हुआ: सिस्टम में प्रकार लोड नहीं हो सका। सुरक्षा नामस्थान। मैंने Avik Sengupta द्वारा http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html पर सुझाए गए अनुसार प्रत्येक .jar फ़ाइल को एक डीएल में संकलित करने का प्रयास किया, लेकिन lib \ batik-all-1.7.jar पर अटक गया। जब तक कि किसी के पास कोई और कार्यवाही न हो, मुझे विश्वास है कि यह दृष्टिकोण अब नवीनतम किट के साथ काम नहीं कर रहा है।

    हालांकि, मुझे एक अलग दृष्टिकोण मिला जो किसी को .net से FOP को कॉल करने की अनुमति देता है। मुझे आशा है कि यह मदद मिलेगी किसी: http://www.ptperalta.net/index.php/technology/using-apache-fop-in-net.html

    0

    ClayB के मेरे लिए काम किया:

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

    कृपया मूल लेख को पढ़ें। कृपया ध्यान रखें 2 "सभी जेएआर फ़ाइलों को सी: \ फॉप \ बिल्ड \" पर कॉपी करें।
    "सब" बहुत महत्वपूर्ण है। यहाँ देखें मैं जरूरत जार की सूची:
    - fop.jar
    - एवलॉन-ढांचा-4.2.0.jar
    - बाटिक सभी-1.7.jar
    - कॉमन्स-कब-1.3.1.jar
    - कॉमन्स-प्रवेश-1.0.4.jar
    - serializer-2.7.0.jar
    - xalan-2.7.0.jar
    - xercesImpl-2.7.1.jar
    - एक्सएमएल-API- 1.3। 04.jar
    - xml-apis-ext-1.3.04.jar
    - xmlgraphics-commons-1.4.jar
    सभी जार फॉप के अलावा आप "lib" फ़ोल्डर में पाएंगे।

    +0

    नोट, कि आपको 'lib'' lib \ build' में जार की आवश्यकता नहीं है। इसने एफओपी के .NET संस्करण को चलाने के दौरान कुछ वर्ग नहीं पाया। – Peterdk

    0

    क्लैटबी ने यहां भी काम किया। बस अपनी परियोजना में सभी IKVM libs जोड़ने के लिए remmeber (फॉप 1.1 और IKVM 7.2.4630.5 के साथ काम किया)।

    3

    मुझे पता है कि यह एक पुराना धागा है लेकिन यह अभी भी इस काम को पाने के लिए कुछ शोध लेता है। यह अब विजुअल स्टूडियो 2013 में NuGet के साथ उपलब्ध है। NuGet पैकेज को crispin.fop कहा जाता है। नीचे दिए गए मेरे कोड में, मैं एक "fop" फ़ाइल और नई पीडीएफ फ़ाइल में भेजता हूं जिसे मैं बनाना चाहता हूं और "voila", यह बनाया गया है।

    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' विधि; 'कम से कम एक पैरामीटर की अपेक्षा करता है। शायद बाद में एक ब्रेकिंग बदलाव पेश किया गया है –