當前位置:編程學習大全網 - 源碼下載 - 如何用android解析docx文檔

如何用android解析docx文檔

android上查閱word類型文檔的方式主要有幾種,下載諸如wps,office等應用,用戶可以直接打開需要查看的word文檔,對於應用開發者來說,如何在自己的應用中集成word文檔查閱功能,使自己的app不受限於第三方應用有沒有安裝,有時候還是需要考慮的。

集成app閱讀word功能也可以通過幾種方式實現,例如購買專門的sdk包,像Aspose等(money啊)或者服務器端處理成圖片或者html,然後android端去請求訪問等方式。對於大部分個人開發者而言,這兩種方式就顯得比較重量級了。

下面介紹兩種專門解析docx文件的方式:docx4j 以及poi

Docx4j

github地址:/plutext/AndroidDocxToHtml

這個是官網demo,基本可以直接使用,解析出來的格式比較全,樣式也比較接近原文檔,就是解析速度令人不敢恭維,手機上測試的話,壹般壹份兒docx文檔都需要30s以上甚至更多,有時候測試文檔明明就只有幾十k大小而已,對於比較大,比較復雜的文檔,時間就更是讓人崩潰。解析速度不是令人滿意。

解析測試中遇到的bug

1.表格丟失,內容丟失:內嵌表格(表格中還有表格的這種)的內容和樣式會有部分丟失現象

2.表格(又是我?)樣式:假如文檔中的表格在word文檔中排版時超出了該文檔的邊界線,妳會發現超出邊界的內容又不見了

3.目錄亂碼:如果文檔中有目錄,目錄會被加上壹些超鏈接,需要手工處理去掉

4.圖片無法解析:有壹些格式的圖片無法解析,比如EMF,WMF這種類型的

5.批註無法顯示:目前沒有找到批註顯示的地方,暫且算丟失吧,後面在試試

6.。。。其它暫時還沒被發現的問題

POI

poi是apache的壹個開源項目,不多說,直接上官網去下載就可以

官網地址:pile 'fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.xhtml:1.0.5'

那如果妳是eclipse用戶(夥計,趕緊用studio吧)

需要手工引入以下jar包,包括:

poi , poi-ooxml , ooxml-schema,org.apache.poi.xwpf.converter.xhtml,org.apache.poi.xwpf.converter.core

實現代碼如下

{

InputStream is = new FileInputStream(file);

XWPFDocument docx = new

XWPFDocument(is);

OutputStream os = new ByteArrayOutputStream();

String imgDesPath = "/sdcard/img";

File imgFile = new File("/sdcard/img");

this.baseUrl = this.getDir("image", Context.MODE_PRIVATE).toURL().toString();

if (!imgFile.exists()) {

file.mkdirs();

}

poi解析的問題

速度比docx4j要稍快壹點,會有文檔內容解析不全樣式丟失的情況

流程

調用接口將docx轉化為html,然後app中通過webview加載該html即可顯示

轉化代碼如下(我就想問下,這代碼格式到底該怎麽調啊~好煩躁):

try {

InputStream is = new FileInputStream(file);

XWPFDocument docx = new

XWPFDocument(is);

OutputStream os = new ByteArrayOutputStream();

String imgDesPath = "/sdcard/img";

File imgFile = new File("/sdcard/img");

this.baseUrl = this.getDir("image", Context.MODE_PRIVATE).toURL().toString();

if (!imgFile.exists()) {

file.mkdirs();

}

XHTMLOptions options = XHTMLOptions.create().URIResolver(new BasicURIResolver(imgDesPath));

options.setExtractor(new FileImageExtractor(imgFile));

options.setIgnoreStylesIfUnused(false);

options.setFragment(true);

XHTMLConverter.getInstance().convert(docx, os, options);

**os.write("/sdcard/xxx/html文件")**

} catch (Exception e) {

Log.d(TAG, "catch " + e.getMessage());

}

webview 裏面直接load 上面生成的html文件就可以了

  • 上一篇:Delphi Tchart 急急,加分!
  • 下一篇:羊毛被可以曬太陽嗎 羊毛被的晾曬方法和保養方法
  • copyright 2024編程學習大全網