2011-02-22 22 views
8

मैंने हाल ही में एफओपी का उपयोग करके एक एंड्रॉइड ऐप संकलित किया क्योंकि मैं कुछ एक्सएमएल को पीडीएफ फाइल में परिवर्तित करना चाहता हूं। हालांकि मुझे नहीं लगता कि एफओपी जेएआर फाइलों का मतलब एंड्रॉइड पर काम नहीं करना है। क्या एंड्रॉइड के लिए एफओपी के कोई संस्करण उपलब्ध हैं? या पीडीएफ कनवर्टर के लिए कोई अन्य एक्सएमएल इंटरनेट पर एक एफओपी सक्षम सर्वर से कनेक्ट करने के बजाय मैं अपने ऐप के भीतर उपयोग कर सकता हूं?एंड्रॉइड के लिए एफओपी?

मैंने fop.jar और xmlgraphics.jar सहित कोशिश की है लेकिन यहां तक ​​कि मेरे प्रोजेक्ट में जोड़े गए लोगों के साथ, FopFactory.newInstance() पर कॉल विफल हो जाता है।

// Add button listener 
btnCreatePDF.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       FopFactory fopFactory = FopFactory.newInstance(); 
       OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("/sdcard/test.pdf"))); 
       Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out); 
       TransformerFactory factory = TransformerFactory.newInstance(); 
       Transformer transformer = factory.newTransformer(); 
       Source src = new StreamSource(new File("/sdcard/test.fo")); 
       Result res = new SAXResult(fop.getDefaultHandler()); 

       transformer.transform(src, res); 

       out.close(); 
      } 
     });

संकलक भी एक मुझे Dxwarning: Ignoring InnerClasses attribute... त्रुटियों की एक गुच्छा दे रहा है:

यहाँ कि एफओपी कॉल बटन क्लिक के लिए मेरे कोड का टुकड़ा है। यहाँ त्रुटि जब मैं पीडीएफ बनाने के लिए बटन पर क्लिक करें है:

02-22 14:16:23.641: WARN/System.err(5590): java.lang.UnsupportedOperationException: Don't know how to handle "application/pdf" as an output format. Neither an FOEventHandler, nor a Renderer could be found for this output format. 
02-22 14:16:23.641: WARN/System.err(5590):  at org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:361) 
02-22 14:16:23.641: WARN/System.err(5590):  at org.apache.fop.fo.FOTreeBuilder.(FOTreeBuilder.java:105) 
02-22 14:16:23.641: WARN/System.err(5590):  at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:101) 
02-22 14:16:23.641: WARN/System.err(5590):  at org.apache.fop.apps.Fop.(Fop.java:79) 
02-22 14:16:23.641: WARN/System.err(5590):  at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:271) 
02-22 14:16:23.641: WARN/System.err(5590):  at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:248) 
02-22 14:16:23.641: WARN/System.err(5590):  at com.zebdor.signal88.ProposalCalculator$3.onClick(ProposalCalculator.java:158) 
02-22 14:16:23.641: WARN/System.err(5590):  at android.view.View.performClick(View.java:2501) 
02-22 14:16:23.641: WARN/System.err(5590):  at android.view.View$PerformClick.run(View.java:9107) 
02-22 14:16:23.641: WARN/System.err(5590):  at android.os.Handler.handleCallback(Handler.java:587) 
02-22 14:16:23.641: WARN/System.err(5590):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-22 14:16:23.641: WARN/System.err(5590):  at android.os.Looper.loop(Looper.java:123) 
02-22 14:16:23.641: WARN/System.err(5590):  at android.app.ActivityThread.main(ActivityThread.java:3812) 
02-22 14:16:23.641: WARN/System.err(5590):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-22 14:16:23.641: WARN/System.err(5590):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-22 14:16:23.641: WARN/System.err(5590):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
02-22 14:16:23.641: WARN/System.err(5590):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
02-22 14:16:23.641: WARN/System.err(5590):  at dalvik.system.NativeStart.main(Native Method) 
+0

मैंने कभी एफओपी का उपयोग नहीं किया है, लेकिन वास्तव में तब होता है जब आप कोड चलाते हैं जो आपको विश्वास दिलाता है कि यह काम नहीं करेगा? यदि यह सच है कि यह स्थानीय रूप से इंटरनेट पर काम करता है, तो यह एंड्रॉइड के साथ चीजों के लिए एक बहुत ही आम दृष्टिकोण है। – tangentstorm

+0

मैंने बटन पर क्लिक करते समय त्रुटि आउटपुट जोड़ा। संकलक मुझे चेतावनी का एक टन दे रहा था जिससे मुझे विश्वास था कि जेएआर एंड्रॉइड के साथ असंगत थे। – Zac

उत्तर

8

Android से, आप न केवल एक .jar एक जावा पुस्तकालय से लेने के लिए और एक Android आवेदन में इसका इस्तेमाल कर सकते हैं। एंड्रॉइड Dalvik JVM (http://en.wikipedia.org/wiki/Dalvik_(software) का उपयोग करता है) जो जावा एसई एपीआई से पूर्ण एपीआई के साथ 100% संगत नहीं है, और इसके बजाय केवल एपीआई के सबसेट का समर्थन करता है। इस कारण से, कई जावा पुस्तकालयों का उपयोग आप एफओपी की तरह कर सकते हैं, एंड्रॉइड संगत नहीं हैं और इन पुस्तकालयों को एंड्रॉइड डिवाइस पर ठीक से काम करने से पहले विशेषज्ञता की आवश्यकता होती है। सौभाग्य।

+0

ठीक है कि समझ में आता है। मुझे लगता है कि संकलक से सभी Dxwarnings की व्याख्या करेंगे। – Zac

+0

यह सही है। –

+0

मुझे एक ही समस्या है। इस मुद्दे को हल करने के तरीके पर कोई सिफारिशें? क्या यह भी संभव है या मुझे आशा छोड़नी चाहिए? –