2011-12-13 12 views
13

Sto cercando una versione leggera di poi-3.8.jar per utilizzarla in un'app Android (privata). Non riesco a montare l'intero jar 1.7Mb nell'APK per qualche ragione (e sarebbe comunque sbagliato farlo comunque) e visto che sto cercando solo il documento -> html e xls -> funzionalità html, non sono abbastanza sicuro di aver bisogno dell'intero file jar.Tentativo di eseguire il porting di POI Apache su Android

Ho passato un paio d'ore a cercare di capire come estrarre org.apache.poi.hwpf.converter.WordToHtmlExtracter.java in poi/hwpf/converter ma sembra che stia usando un sacco di altre cose. Anche se questo non mi sorprende, stavo pensando che forse qualcuno qui avrebbe saputo quali pacchetti posso eliminare per rendere più piccolo il barattolo. Sarò lieto di dedicare più tempo a questo, a meno che qualcuno qui mi dice che è una perdita di tempo e che TUTTO nelle fonti è necessario per convertire i file doc in html.

Non ho bisogno di nulla che mostri nulla, ho solo bisogno della "semplice" doc in html (e xls in html se possibile). Non ho bisogno di nulla relativi a PDF, PowerPoint, Outlook o qualsiasi altra cosa.

sarò felice di condividere tutto ciò che scopro

Acclamazioni

risposta

7

Beh ero in grado di fare la maggior parte di quello che stavo chiedendo qui. Questo è l'importazione dei file jar. Ho avuto almeno 2 tipi di problemi: - RAM non sufficiente su Eclipse che ha reso il dexing delle mie classi in crash la maggior parte delle volte (corretto aggiustando i valori Xmx e xms in Eclipse.ini) - il limite del metodo 64k per ogni file DEX ha reso le cose complicate Ho dovuto dividere tutti i file POI necessari in diversi file DEX. (L'ho fatto seguendo il tutorial del blog Android: http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html)

La vera risposta alla mia domanda è: "sì, hai bisogno di tutto nel barattolo". L'ho fatto funzionare per i file di base "non aperti xml". La mia app fa abbastanza bene la conversione in html, ed è anche abbastanza veloce.

In una nota a margine, stavo anche cercando di fare la stessa cosa con i file "open XML", ed è molto più complicato. Il mio piccolo progetto non fa quello che dovrebbe fare, ho qualche strana eccezione durante l'inizializzazione della classe XMLBeans. Ecco il mio trace (scusate per la bruttezza):

12-19 12:07:10.790: W/dalvikvm(13385): Exception 
Ljava/lang/RuntimeException; thrown while initializing 
Lorg/apache/xmlbeans/impl/regex/SchemaRegularExpression; 
12-19 12:07:10.790: W/dalvikvm(13385): Exception 
Ljava/lang/ExceptionInInitializerError; thrown while initializing 
Lorg/apache/xmlbeans/impl/schema/BuiltinSchemaTypeSystem; 
12-19 12:07:10.790: D/dalvikvm(13385): Method.invoke() on bad class 
Lorg/apache/xmlbeans/impl/schema/BuiltinSchemaTypeSystem; failed 
12-19 12:07:10.790: W/dalvikvm(13385): Exception 
Ljava/lang/ExceptionInInitializerError; thrown while initializing 
Lorg/apache/xmlbeans/XmlBeans; 
12-19 12:07:10.790: W/System.err(13385): 
java.lang.reflect.InvocationTargetException 
12-19 12:07:10.790: W/System.err(13385): at 
java.lang.reflect.Method.invokeNative(Native Method) 
12-19 12:07:10.790: W/System.err(13385): at 
java.lang.reflect.Method.invoke(Method.java:491) 
12-19 12:07:10.790: W/System.err(13385): at 
t.fze.TestOfficeAndroidActivity.onCreate(TestOfficeAndroidActivity.java:55) 
12-19 12:07:10.790: W/System.err(13385): at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
12-19 12:07:10.790: W/System.err(13385): at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 
12-19 12:07:10.790: W/System.err(13385): at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 
12-19 12:07:10.790: W/System.err(13385): at 
android.app.ActivityThread.access$1500(ActivityThread.java:122) 
12-19 12:07:10.790: W/System.err(13385): at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002) 
12-19 12:07:10.790: W/System.err(13385): at 
android.os.Handler.dispatchMessage(Handler.java:99) 
12-19 12:07:10.790: W/System.err(13385): at 
android.os.Looper.loop(Looper.java:132) 
12-19 12:07:10.790: W/System.err(13385): at 
android.app.ActivityThread.main(ActivityThread.java:4025) 
12-19 12:07:10.790: W/System.err(13385): at 
java.lang.reflect.Method.invokeNative(Native Method) 
12-19 12:07:10.790: W/System.err(13385): at 
java.lang.reflect.Method.invoke(Method.java:491) 
12-19 12:07:10.790: W/System.err(13385): at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
12-19 12:07:10.790: W/System.err(13385): at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
12-19 12:07:10.790: W/System.err(13385): at 
dalvik.system.NativeStart.main(Native Method) 
12-19 12:07:10.790: W/System.err(13385): Caused by: 
org.apache.poi.POIXMLException: 
java.lang.reflect.InvocationTargetException 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:414) 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:174) 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:63) 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.ss.examples.html.ToHtml.create(ToHtml.java:139) 
12-19 12:07:10.790: W/System.err(13385): at 
org.apache.poi.ss.examples.html.ToHtml.create(ToHtml.java:123) 
12-19 12:07:10.790: W/System.err(13385): ... 16 more 
12-19 12:07:10.790: W/System.err(13385): Caused by: 
java.lang.reflect.InvocationTargetException 
12-19 12:07:10.790: W/System.err(13385): at 
java.lang.reflect.Constructor.constructNative(Native Method) 
12-19 12:07:10.790: W/System.err(13385): at 
java.lang.reflect.Constructor.newInstance(Constructor.java:416) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) 
12-19 12:07:10.800: W/System.err(13385): ... 22 more 
12-19 12:07:10.800: W/System.err(13385): Caused by: 
java.lang.ExceptionInInitializerError 
12-19 12:07:10.800: W/System.err(13385): at 
org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument$Factory.parse(ThemeDocument.java:71) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.poi.xssf.model.ThemesTable.<init>(ThemesTable.java:38) 
12-19 12:07:10.800: W/System.err(13385): ... 25 more 
12-19 12:07:10.800: W/System.err(13385): Caused by: 
java.lang.ExceptionInInitializerError 
12-19 12:07:10.800: W/System.err(13385): at 
java.lang.reflect.Method.invokeNative(Native Method) 
12-19 12:07:10.800: W/System.err(13385): at 
java.lang.reflect.Method.invoke(Method.java:491) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.XmlBeans.getNoType(XmlBeans.java:856) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.XmlBeans.<clinit>(XmlBeans.java:881) 
12-19 12:07:10.800: W/System.err(13385): ... 27 more 
12-19 12:07:10.800: W/System.err(13385): Caused by: 
java.lang.ExceptionInInitializerError 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.schema.BuiltinSchemaTypeSystem.fillInType(BuiltinSchemaTypeSystem.java:1025) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.schema.BuiltinSchemaTypeSystem.<clinit>(BuiltinSchemaTypeSystem.java:223) 
12-19 12:07:10.800: W/System.err(13385): ... 31 more 
12-19 12:07:10.800: W/System.err(13385): Caused by: 
java.lang.RuntimeException: Installation Problem??? Couldn't load 
messages: Can't find resource for bundle 
'org.apache.xmlbeans.impl.regex.message_fr_FR', key '' 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.RegexParser.setLocale(RegexParser.java:88) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.RegexParser.<init>(RegexParser.java:78) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.ParserForXMLSchema.<init>(ParserForXMLSchema.java:28) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.RegularExpression.setPattern(RegularExpression.java:2996) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.RegularExpression.setPattern(RegularExpression.java:3009) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.RegularExpression.<init>(RegularExpression.java:2975) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.SchemaRegularExpression.<init>(SchemaRegularExpression.java:27) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.SchemaRegularExpression.<init>(SchemaRegularExpression.java:23) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.SchemaRegularExpression$1.<init>(SchemaRegularExpression.java:44) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.SchemaRegularExpression.buildKnownPatternMap(SchemaRegularExpression.java:43) 
12-19 12:07:10.800: W/System.err(13385): at 
org.apache.xmlbeans.impl.regex.SchemaRegularExpression.<clinit>(SchemaRegularExpression.java:38) 
12-19 12:07:10.800: W/System.err(13385): ... 33 more 
+2

Sarebbe interessato a condividere il codice per Android finora? Sembra che non ci sia interesse a leggere documenti di MS Office su Android: non sono stato in grado di trovare nulla di utile oltre al tuo post. Su una nota a margine, ci sono molte API closed source e ho provato a contattare le diverse società, ma nessuna di loro ha risposto a nessuna delle mie domande e sto cercando disperatamente di trovare una soluzione decente (o effettivamente qualsiasi) per la gestione documenti su Android; \ Come te ho solo bisogno della conversione in html per i diversi formati in quanto sono interessato solo alla visualizzazione dei documenti. – Darwind

+2

Ciao Darwind, sì puoi dare un'occhiata al mio codice. In realtà, sono riuscito a farlo funzionare (yay) con POI. Ho pubblicato una spiegazione completa sul blog della mia azienda (mi dispiace, è in francese!) parte 1 (semplice utilizzo POI su Android): http://blog.oxiane.com/2011/12/30/visualiser-un-fichier-office-doc-xls-ppt-sous-android/ parte 2 (per documenti Office 2007+) http://blog.oxiane.com/2011/12/30/visualiser-un-fichier-office-doc-xls-ppt%E2%80%A6-sous-android-23/ Oppure puoi dare un'occhiata al mio codice (abbastanza disordinato, ma funziona!) Https://code.google.com/p/display-msoffice-docs-android-with-apache-poi/ –

+0

nota a margine, ho scoperto (poco dopo essermi ucciso con questa porta POI) che esiste una soluzione MOLTO più semplice per gestire documenti di Office 2007+. Ho usato questa lib: http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/11/21/openxmlandjava.aspx Non funziona con i documenti di Office "binari" (parola 2003 ...) così tu Avrebbe ancora bisogno di implementare POI per questi file, ma è molto più semplice che eseguire il porting di POI. In effetti mi ci sono volute solo poche modifiche per farlo funzionare. Non ho ancora condiviso il mio codice però. –

3

Si potrebbe anche utilizzare ProGuard shrinking. Può ridurre la dimensione dell'apk fino a diverse volte.

+0

grazie per l'idea, ma sfortunatamente non era la dimensione dell'APK che stavo cercando di ridurre, ma il numero di metodi nell'applicazione. Se leggete tutti i commenti sopra, il mio problema principale era che c'erano più di 64k metodi nel file jar che volevo importare. E i metodi 64k sono troppi, non mi permettono di compilare l'APK! –

2

ho creato una "porta" (se così si può dire) di XSSF recente: https://stackoverflow.com/a/25564538/2155217

E 'abbastanza per la lettura e la scrittura di file XLSX. Potrebbe non funzionare correttamente se il file contiene alcune funzionalità extra come disegni o grafici.

+0

Ciao Andrew! fantastico lavoro che hai fatto lì. Non l'ho ancora provato, ma sembra che tu usi il metodo "esegui> guarda cosa non è riuscito> aggiungi quel file al barattolo". Questo è stato anche il mio primo modo di farlo, fino a quando ho realizzato che la maggior parte del barattolo era effettivamente necessario. Sei stato in grado di identificare con maggiore precisione quali caratteristiche mancano? –

Problemi correlati