androidwordview
⑴ 如何用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文件就可以了
⑵ Android WebView 在開發過程中有哪些坑
WebView:
(一)、介紹:
android提供了一個內置瀏覽器,該瀏覽器可以查看網站,查看郵件,播放視頻。要使用該內置瀏覽器,要通過WebView組件實現。webView組件式專門用來瀏覽網頁的。
類結構:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AbsoluteLayout
↳ android.webkit.WebView
(二)、webview組件常用方法:
loadUrl()
loadData()
loadDataWithBaseURL()
capturePicture()
goBack()
goForward()
stopLoading()
reload()
(三)、WebView組件顯示url頁面的內容:
1、基本代碼:
webView_main = (WebView) findViewById(R.id.webView_main);
webView_main.loadUrl("http://www.qq.com");
(四)、WebView組件載入html代碼:
1、基本代碼:
webView_main = (WebView) findViewById(R.id.webView_main);
// webView_main.loadData(data, "text/html","utf-8");//這個方法中雖然設置了字元集,但是運行效果中發現依然中文會顯示亂碼。為了解決這個問題,建議使用loadDataWithBaseURL()方法。
webView_main.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
【備註:】MIME【了解】
概念:MIME意為多功能Internet郵件擴展,它設計的最初目的是為了在發送 電子郵件時附加多媒體數據,讓郵件客戶程序能根據其類型進行處理。然而當它被HTTP協議支持之後,它的意義就更為顯著了。它使得HTTP傳輸的不僅是普通的文本,而變得豐富多彩。
每個MIME類型由兩部分組成,前面是數據的大類別,例如聲音audio、圖象image等,後面定義具體的種類。
常見的MIME類型(通用型):
超文本標記語言文本 .html text/html
xml文檔 .xml text/xml
XHTML文檔 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文檔 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG圖像 .png image/png
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二進制數據 application/octet-stream
2、如果載入的html代碼中包含javascript語言,會如何呢?
運行後發現,所有的javascript都不會執行。因為WebView 在默認情況下不支持javascript。如何讓執行javascript呢?
讓WebView支持javascript的兩個步驟:
使用 WebView 組件的WebSettings對象的setJavaScriptEnabled()方法。這種做法是讓 WebView 能支持絕大多數的javascript語言。但是依然不支持alert等警告對話框語句。
使用 WebView 組件的setWebChromeClient()方法。這種做法是讓 WebView 也支持顯示alert等警告對話框。
基本代碼:
webView_main.getSettings().setJavaScriptEnabled(true);// 支持運行javascript
webView_main.setWebChromeClient(new WebChromeClient());// 支持運行特殊的javascript(例如:alert())
webView_main.setWebViewClient(new WebViewClient());// 當點擊超鏈地址後不會新打開瀏覽器來訪問,而是始終在本app中瀏覽頁面
3、如果html中包含有超級鏈接地址,WebView能順利執行嗎?
經過運行後發現,WebView中的超鏈地址在點擊後,會跳出該應用程序,而彈出新的瀏覽器去訪問該網頁。
如果解決呢?調用webview對象的setWebViewClient()方法即可解決。
webView_main.setWebViewClient(new WebViewClient());
(五)、用WebView實現「網頁版天氣預告」
【備註:】調用頁面地址:http://m.weather.com.cn/m/pn12/weather.htm?id=101010100T
webView_main = (WebView) findViewById(R.id.webView_main);
webView_main.getSettings().setJavaScriptEnabled(true);
webView_main.setWebChromeClient(new WebChromeClient());
webView_main.setWebViewClient(new WebViewClient());
webView_main.loadUrl("http://m.weather.com.cn/m/pn12/weather.htm?id=101010100T");
(六)、製作簡單的網頁瀏覽器:
1、核心代碼:
publicclass MainActivity extends Activity {
privateEditText editText_main_url;
privateWebView webView_main;
private String url = "";
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText_main_url = (EditText) findViewById(R.id.editText_main_url);
webView_main = (WebView) findViewById(R.id.webView_main);
// 讓webview對象支持解析javascript語句
webView_main.getSettings().setJavaScriptEnabled(true);
// 讓webview對象支持解析alert()等特殊的javascript語句
webView_main.setWebChromeClient(new WebChromeClient());
// 如果不使用該句代碼,在點擊超鏈地址後,會跳出程序,而彈出瀏覽器訪問網頁。
webView_main.setWebViewClient(new WebViewClient());
}
publicvoid clickButton(View view) {
switch (view.getId()) {
// 瀏覽器中後退鍵監聽
caseR.id.button_main_goback:
webView_main.goBack();
break;
// 瀏覽器前進鍵監聽
caseR.id.button_main_goforward:
webView_main.goForward();
break;
// 當輸入網址後,點擊該按鈕,可以執行訪問
caseR.id.button_main_submit:
url = editText_main_url.getText().toString();
if ((url == null) || url.equals("")) {
Toast.makeText(MainActivity.this, "請輸入url地址!", Toast.LENGTH_LONG).show();
} else {
if (url.indexOf("http://") != 0) {
url = "http://" + url;
}
webView_main.loadUrl(url);
}
break;
// 瀏覽器停止載入鍵監聽
caseR.id.button_main_stop:
webView_main.stopLoading();
break;
// 瀏覽器刷新鍵監聽
default:
break;
}
}
}
⑶ 啟用多進程webview這個有什麼用
主要就是用來載入網頁的,如果你做瀏覽器相關的應用,肯定要使用webview.還有就是,如果你訪問自己的網頁,可以使用Webview,通過webview能與JS互動,這樣你就可以實現手機與網頁的時時互動了。
(3)androidwordview擴展閱讀:
web(World Wide Web)即全球廣域網,也稱為萬維網,它是一種基於超文本和HTTP的、全球性的、動態交互的、跨平台的分布式圖形信息系統。是建立在Internet上的一種網路服務,為瀏覽者在Internet上查找和瀏覽信息提供了圖形化的、易於訪問的直觀界面,其中的文檔及超級鏈接將Internet上的信息節點組織成一個互為關聯的網狀結構。
起源:
1989年CERN(歐洲粒子物理研究所)中由Tim Berners-Lee領導的小組提交了一個針對Internet的新協議和一個使用該協議的文檔系統,該小組將這個新系統命名為Word Wide Web,它的目的在於使全球的科學家能夠利用Internet交流自己的工作文檔。
這個新系統被設計為允許Internet上任意一個用戶都可以從許多文檔服務計算機的資料庫中搜索和獲取文檔。1990年末,這個新系統的基本框架已經在CERN中的一台計算機中開發出來並實現了,1991年該系統移植到了其他計算機平台,並正式發布。
參考資料:網路-web
⑷ android中textview如何限制字數
一開始採用的方法是函數textView:shouldChangeTextInRange:replacementText:來進行判斷:
[c-sharp] view plain
//鍵入Done時,插入換行符,然後執行addBookmark
- (BOOL)textView:(UITextView *)textView
shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
//判斷加上輸入的字元,是否超過界限
NSString *str = [NSString stringWithFormat:@"%@%@", textView.text, text];
if (str.length > BOOKMARK_WORD_LIMIT)
{
textView.text = [textView.text substringToIndex:BOOKMARK_WORD_LIMIT];
return NO;
}
return YES;
}
但在使用中發現該方法在有聯想輸入的時候,根本無法對聯想輸入的詞進行判斷,然後嘗試使用textViewDidChange:,驗證可行:
[cpp] view plain
/*由於聯想輸入的時候,函數textView:shouldChangeTextInRange:replacementText:無法判斷字數,
因此使用textViewDidChange對TextView裡面的字數進行判斷
*/
- (void)textViewDidChange:(UITextView *)textView
{
//該判斷用於聯想輸入
if (textView.text.length > BOOKMARK_WORD_LIMIT)
{
textView.text = [textView.text substringToIndex:BOOKMARK_WORD_LIMIT];
}
⑸ Android開發如何讀取並顯示word和pdf文檔
通過對資料庫的索引,我們還為您准備了:
Android開發如何讀取並顯示word和pdf文檔呢
問:有做過類似項目的朋友講一下么?
答:大家好! 我是個Android新手,最近有個項目,其中有個需求就是在Android應用程序中查看word和pdf格式的文檔(PS:不是用intent調用第三方軟體打開文檔哦~),可惜Android沒有直接顯示word和pdf文檔的view。於是本菜鳥上網查了好久好久好久哇= =...
===========================================
android開發中怎樣讀取一個文件里的內容並把內容顯...
問:我以為和java的讀寫文件一樣的,但他好像有自己的獲取輸入輸出留的方法...
答:基本上都差不多。 一般來說。文件,XML都放在assets這個文件夾下。
===========================================
android怎麼讀取帶有圖片的WORD文檔
問:我以為和java的讀寫文件一樣的,但他好像有自己的獲取輸入輸出留的方法...
答:用Document to go或者quick office這類軟體就可以了。這些軟體在機鋒市場和豌豆莢里一搜就有
===========================================
【Android開發】請問Android怎麼打開word文件?
問:請問Android怎麼打開word文件?網上看了好多,但都不能運行,有的說用PO...
答:用quick ooffice,在網路移動應用上下載quick office(pro版),拷貝到手機,安裝好就行
===========================================
android編程:怎樣讀取txt文件
問:請問Android怎麼打開word文件?網上看了好多,但都不能運行,有的說用PO...
答:StringBuffer buffer = new StringBuffer(); try { FileInputStream fis = new FileInputStream("/sdcard/XXX.txt"); InputStreamReader isr = new InputStreamReader(fis,"GB2312");//文件編碼Unicode,UTF-8,ASCII,GB2312,Big5 Reader in = new...
===========================================
Android開發中讀寫office文件(word,ppt,excel)...
問:最近在寫一個基於android平台的辦公套件,其中設計到對word,ppt,excel...
答:簡單的,可以使用POI處理 想處理復雜和能用的,只有在伺服器端處理,再返回手機android查看
===========================================
Android開發 ,如何讀取AndroidMainfest.xml裡面的...
問:AndroidMainfest.xml文件如下:我想在Androd程序中讀取android:largeHea...
答:largeheap是一個布爾類型的
===========================================
android程序中如何打開並編輯word,excel等文件?
問:我現在已經使用POI包,將內容放在html里,在webview上顯示出來,但是不...
答:word?excel?笑話,微軟都沒有開發基於安卓版本的word,不過最近應該有動作了把。但是,你的軟體和人家的軟體,是屬於兩個APP,最多是給你個介面讓你啟動,但是至於編輯,你得看看人家的應用有沒給你介面
===========================================
android開發中,如何實現讀取pdf格式的文件,並把...
問:最近做關於android開發,讀取pdf格式文件的應用,但是不知道如何下手啊...
答:得嵌入PDF第三方軟體或自己編寫一個類似的打開軟體吧,否則理論上是看不了的。(僅供參考)
⑹ android中TextView中文亂碼的問題
檢測txt文件的編碼方式。用記事本打開後「另存為」,選擇編碼方式為「UTF-8」。
⑺ Android在什麼時候用到自定義View
android應用總的分為兩類:軟體類、游戲類。
軟體一般用不到自定義View,都是使用android自帶控制項做的,因為android自帶控制項已經能滿足一般應用的需求了。
而游戲用android自帶控制項做的話是很雞肋的,因為游戲是多樣化的,各種人物各種道具各種界面各種效果。所以游戲都是用自定義的View或SurfaceView作為畫面內容的。
其實還不太清楚你想問的是不是這個,這樣回答您滿意么?
⑻ 當使用docx4j Android讀取Word文檔面臨以下問題問題,怎麼解決
大家好! 我是個Android新手,最近有個項目,其中有個需求就是在Android應用程序中查看word和pdf格式的文檔(PS:不是用intent調用第三方軟體打開文檔哦~),可惜Android沒有直接顯示word和pdf文檔的view。於是本菜鳥上網查了好久好久好久哇= =。 對於word,很多人說是用poi解析之後,再復寫成html,最後用WebView顯示。 那麼,這個就是最普遍最簡單的方法了么? 我感到很麻煩= = 還有別的方法么? 對於pdf,好像也是Apache旗下的pdfbox解析pdf,難道也要付寫成html? 我下了一個MUPDF閱讀器源碼,好像不是那樣做的。不過也是很麻煩很麻煩。 我是菜鳥嘛,先不提解析源文件和復寫html的難度,就是能復寫成html,我總感覺不保險,能保證和源文檔格式一模一樣么,能保證不會有些內容被遺漏么。。。還有,有人說poi只能解析.doc然後復寫html,針對.docx很難弄成html?可是有人卻說poi解析.docx是持續更新維護的技術,而poi解析.doc那部分組件已經不更新了。我就更迷茫了,如果我下功夫學習poi解析.doc,這個組件健全么,能完全解析正確么? 還有如果.doc解析好了,.docx能用poi解決問題嘛? 我只是不想浪費時間多走彎路,所以在這里請教csdn里的大神們給點建議和方向好么? 查看原帖>>