1. WPS是否有SDK For android
wps office官方網站沒有開發這個版本,建議你可以選擇其他的去替換,openoffice等等,具體你選擇吧
2. 如何用android解析docx文檔
android上查閱word類型文檔的方式主要有幾種,下載諸如wps,office等應用,用戶可以直接打開需要查看的word文檔,對於應用開發者來說,如何在自己的應用中集成word文檔查閱功能,使自己的app不受限於第三方應用有沒有安裝,有時候還是需要考慮的。
集成app閱讀word功能也可以通過幾種方式實現,例如購買專門的sdk包,像Aspose等(money啊)或者伺服器端處理成圖片或者html,然後android端去請求訪問等方式。對於大部分個人開發者而言,這兩種方式就顯得比較重量級了。
下面介紹兩種專門解析docx文件的方式:docx4j 以及poi
Docx4j
github地址:https://github.com/plutext/AndroidDocxToHtml
這個是官網demo,基本可以直接使用,解析出來的格式比較全,樣式也比較接近原文檔,就是解析速度令人不敢恭維,手機上測試的話,一般一份兒docx文檔都需要30s以上甚至更多,有時候測試文檔明明就只有幾十k大小而已,對於比較大,比較復雜的文檔,時間就更是讓人崩潰。解析速度不是令人滿意。
解析測試中遇到的bug
1.表格丟失,內容丟失:內嵌表格(表格中還有表格的這種)的內容和樣式會有部分丟失現象
2.表格(又是我?)樣式:假如文檔中的表格在word文檔中排版時超出了該文檔的邊界線,你會發現超出邊界的內容又不見了
3.目錄亂碼:如果文檔中有目錄,目錄會被加上一些超鏈接,需要手工處理去掉
4.圖片無法解析:有一些格式的圖片無法解析,比如EMF,WMF這種類型的
5.批註無法顯示:目前沒有找到批註顯示的地方,暫且算丟失吧,後面在試試
6.。。。其它暫時還沒被發現的問題
POI
poi是apache的一個開源項目,不多說,直接上官網去下載就可以
官網地址:http://poi.apache.org/
如果你是android studio用戶:那就很簡單了
只需要引入依賴(版本號不一定哦,gradle會自己把相關依賴包下載到位):
compile '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文件就可以了