2011-02-22 14 views
8

Bazı XML'leri bir PDF dosyasına dönüştürmek istediğim gibi FOP kullanarak bir Android uygulamasını kısa süre önce derledim. Ancak, FOP JAR dosyalarının Android üzerinde çalışmamaları gerektiğini düşünmüyorum. Android için kullanılabilir olan FOP sürümleri var mı? Veya başka bir XML'den PDF'ye dönüştürücü Uygulamamda, Internet'te FOP özellikli bir sunucuya bağlanmak yerine kullanabilir miyim?Android için FOP?

fop.jar ve xmlgraphics.jar'ı dahil etmeyi denedim, ancak projeme eklenenler ile bile FopFactory.newInstance() numaralı çağrı başarısız oluyor.

// 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(); 
      } 
     });

derleyici aynı zamanda bir bana Dxwarning: Ignoring InnerClasses attribute... hataların bir demet veriyor:

İşte FOP çağıran düğmeye tıklama için benim kod parçacığı bu. İşte PDF oluşturmak için düğmeye tıkladığında hata var:

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

Hiç FOP kullanmamıştım, ancak çalışamayacağına inanmanızı sağlayan kodu çalıştırdığınızda ne oluyor? Yerel olarak değil, internet üzerinden çalıştığı gerçeği, bu android ile şeylere oldukça yaygın bir yaklaşım. – tangentstorm

+0

Düğmeye tıkladığımdan hata çıktısını ekledim. Derleyici bana JAR'ların Android ile uyumsuz olduğuna inanmamı sağlayan bir ton uyarı veriyordu. – Zac

cevap

8

Android ile, sadece bir Java kitaplığından bir .jar alamaz ve bir Android uygulamasında kullanabilirsiniz. Android, Java SE API'sinin tam API'si ile% 100 uyumlu olmayan ve bunun yerine yalnızca API'nin bir alt kümesini destekleyen Dalvik JVM'yi (http://en.wikipedia.org/wiki/Dalvik_(software) kullanır. Bu nedenle, FOP gibi kullanabileceğiniz birçok Java kütüphanesi, Android uyumlu değildir ve bu tür kitaplıklar bir Android cihazında düzgün bir şekilde çalışmaya başlamadan önce uzmanlık gerektirir. İyi şanslar.

+0

Tamam, bu mantıklı. Sanırım bu tüm Dxwarnings'leri derleyiciden açıklıyor. – Zac

+0

Bu doğru. –

+0

Aynı problemi yaşıyorum. Bu sorunu çözmek için herhangi bir öneri? Mümkün mü yoksa umudumu mu bırakmalıyım? –