2011-12-13 61 views
13

Tôi đang tìm phiên bản nhẹ của poi-3.8.jar để sử dụng nó trong ứng dụng Android (riêng tư). Tôi dường như không thể phù hợp với toàn bộ bình 1,7Mb trong APK vì một số lý do (và sẽ là sai khi làm như vậy) và vì tôi chỉ tìm kiếm tài liệu -> html và xls -> html chức năng, tôi không khá chắc chắn tôi cần toàn bộ tập tin jar.Đang cố gắng chuyển Apache POI tới Android

Tôi đã dành một vài giờ cố gắng tìm ra cách trích xuất org.apache.poi.hwpf.converter.WordToHtmlExtracter.java trong poi/hwpf/converter nhưng có vẻ như nó đang sử dụng rất nhiều thứ khác. Ngay cả khi điều này không thực sự làm tôi ngạc nhiên, tôi đã nghĩ rằng có lẽ ai đó ở đây sẽ biết những gói nào tôi có thể loại bỏ để làm cho cái bình nhỏ hơn. Tôi sẽ rất vui khi dành nhiều thời gian hơn cho nó, trừ khi ai đó ở đây nói với tôi rằng đó là một sự lãng phí thời gian và tất cả mọi thứ trong các nguồn là cần thiết để chuyển đổi doc thành các tập tin html.

Tôi không cần bất kỳ thứ gì hiển thị bất kỳ thứ gì, tôi chỉ cần tài liệu "đơn giản" để html (và xls để html nếu có thể) các tính năng. Tôi không cần bất cứ điều gì liên quan đến PDF, powerpoint, triển vọng hay bất cứ điều gì.

Sẽ rất vui khi chia sẻ bất cứ điều gì tôi tìm hiểu

Cheers

Trả lời

7

Vâng, tôi đã có thể làm hầu hết những gì tôi đã được yêu cầu ở đây. Đó là nhập các tệp jar. Tôi có ít nhất 2 loại vấn đề: - không đủ RAM trên Eclipse khiến cho các lớp của tôi bị sụp đổ phần lớn thời gian (cố định bằng cách điều chỉnh giá trị Xmx và xms trong Eclipse.ini) - giới hạn phương thức 64k cho mỗi tệp DEX làm mọi thứ phức tạp. Tôi đã phải chia tất cả các lọ POI bắt buộc thành nhiều tệp DEX. (Tôi đã làm điều đó bằng cách làm theo hướng dẫn từ blog Android: http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html)

Câu trả lời thực sự cho câu hỏi của tôi là: "có bạn cần mọi thứ trong bình". Tôi đã làm cho nó hoạt động cho các tệp "không mở xml" cơ bản. Ứng dụng của tôi thực hiện chuyển đổi thành html khá tốt và cũng đủ nhanh.

Một lưu ý phụ, tôi cũng đang cố gắng làm điều tương tự với các tệp "mở XML", và nó phức tạp hơn nhiều. Dự án nhỏ của tôi không làm những gì nó phải làm, tôi đã có một số ngoại lệ lạ khi khởi tạo lớp XMLBeans. Đây là dấu vết của tôi (xin lỗi vì sự xấu xa):

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

Bạn có muốn chia sẻ mã của mình cho Android cho đến nay không? Dường như có sự thiếu quan tâm đến việc có thể đọc tài liệu MS Office trên Android - tôi không thể tìm thấy bất kỳ thứ gì hữu ích ngoài bài đăng của bạn. Một lưu ý phụ có rất nhiều API nguồn đóng và tôi đã cố gắng liên lạc với các công ty khác nhau nhưng không ai trong số họ trả lời bất kỳ truy vấn nào của tôi và tôi đang cố gắng tìm một giải pháp phong nha (hoặc thực sự) để xử lý tài liệu trên Android; \ Vì bạn chỉ cần chuyển đổi sang html cho các định dạng khác nhau vì tôi chỉ quan tâm đến việc hiển thị tài liệu. – Darwind

+2

Xin chào Darwind, bạn có thể xem mã của tôi. Trên thực tế, tôi đã có thể làm cho nó hoạt động (yay) với POI. Tôi đã đăng một lời giải thích đầy đủ trên blog của công ty tôi (xin lỗi, nó bằng tiếng Pháp!) phần 1 (sử dụng POI đơn giản trên Android): http://blog.oxiane.com/2011/12/30/visualiser-un-fichier-office-doc-xls-ppt-sous-android/ phần 2 (đối với tài liệu Office 2007+) http://blog.oxiane.com/2011/12/30/visualiser-un-fichier-office-doc-xls-ppt%E2%80%A6-sous-android-23/ Hoặc bạn có thể xem mã của tôi (khá lộn xộn, nhưng nó hoạt động!) Https://code.google.com/p/display-msoffice-docs-android-with-apache-poi/ –

+0

Trên một bên lưu ý, tôi phát hiện ra (ngay sau khi giết bản thân mình với cổng POI này) rằng có một giải pháp MUCH đơn giản hơn để xử lý các tài liệu Office 2007+. Tôi đã sử dụng lib này: http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/11/21/openxmlandjava.aspx Nó không hoạt động với các tài liệu văn phòng "nhị phân" (từ 2003 ...) để bạn vẫn cần triển khai POI cho các tệp đó, nhưng nó dễ dàng hơn việc chuyển POI. Trong thực tế nó đã cho tôi chỉ có một vài tinh chỉnh để làm cho nó hoạt động. Tôi chưa chia sẻ mã của mình. –

3

Bạn cũng có thể sử dụng ProGuard shrinking. Nó có thể làm giảm kích thước của apk lên đến vài lần.

+0

cảm ơn cho ý tưởng, nhưng tiếc là nó không phải là kích thước của APK tôi đã cố gắng để giảm, nhưng số lượng các phương pháp trong ứng dụng.v Nếu bạn đọc tất cả các ý kiến ​​ở trên, vấn đề chính của tôi là có hơn 64k các phương thức trong tệp jar tôi muốn nhập. Và phương pháp 64k chỉ là quá nhiều, nó sẽ không cho phép tôi biên dịch APK! –

2

tôi đã tạo ra một "cổng" (nếu tôi có thể nói như vậy) của XSSF thời gian gần đây: https://stackoverflow.com/a/25564538/2155217

Nó đủ để đọc và ghi các file XLSX. Có thể không hoạt động đúng nếu tệp chứa một số tính năng bổ sung như Bản vẽ hoặc Biểu đồ.

+0

Xin chào Andrew! công việc tuyệt vời bạn đã làm ở đó. Tôi chưa thử nghiệm nó, nhưng có vẻ như bạn sử dụng phương pháp "run> xem những gì không thành công> thêm tập tin đó vào bình". Đó cũng là cách đầu tiên của tôi để làm điều đó, cho đến khi tôi nhận ra hầu hết các lọ thực sự là cần thiết. Bạn đã có thể xác định chính xác hơn những tính năng nào bị thiếu? –

Các vấn đề liên quan