基於Android的Word文檔閱讀器

來源:互聯網
上載者:User

        隨著android系統的發展,android已經得到廣泛的認可,作為一名普通的大學生,真的希望自己能在android系統上做一個可以讓大家使用、方便大家工作的一個軟體,最後決定做一個基於andriod的Word格式閱讀器。

        經過一些尋找工作,終於找到了可以在android系統上使用的用於讀取Word格式文檔的開源包--POI(The Java API For Microsoft Documents)。:http://poi.apache.org/

       POI是Apache的一個子項目,其目的是提供對基於OOXML(Microsoft Office Open XML)和OLE2(Object Linking and Embedding)的各種文檔操作的Java APIs包。該項目分為幾個組件,其中包括一個叫做HWPF的組件,它只能操作Word檔案。這就是我將要使用的組件。HWPF的全稱是Horrible Word Processor Format。翻譯成中文是“可怕的文檔處理格式”,利用HWPF,開發人員可以用純Java代碼實現在Android系統是讀取Word文檔。HWPF組件是POI項目中用來實現Word文檔讀取的一個重要組件,以下是該組件中幾個重要的類:

(1)Range:是所有HWPF物件模型的核心類,Word文檔中字元的所有屬性都是繼承這個類得到的。

(2)HWPFDocument:檔案類。任何形式的Word文檔的最終表現形式都是對該對象進行一些屬性的定製。

(3)Paragraph:是Word文檔中基本的組成部分,每個文檔都被劃分成一個一個的段落,所有的段落最終組成一個Word文檔。

(4)Picture:Word文檔中嵌入的每張圖片都是由Picture對象來表示的,它包括了圖片的大小、內容等一系列屬性。

(5)Table:Word文檔中嵌入的每張表格都是有Table對象來表示的,它包括了表格中每行的TableRow對象和行數等屬性。

       其他的類檔案對以上核心的類進行功能補充,最終完成了Word 文檔的讀取。

       由於Word格式文檔中有圖片、表格和字串,為了能在android系統上全部進行顯示,選擇使用WebView進行顯示。首先將Word格式文檔中的內容讀取出來,加上對應的HTML標籤,然後寫入HTML檔案中,最後直接使用WebView進行讀取HTML檔案的內容。

判斷當前段落是表格、圖片還是一段文字的代碼:

public void writeParagraphContent(Paragraph paragraph){Paragraph p = paragraph;int pnumCharacterRuns = p.numCharacterRuns();for( int j = 0; j < pnumCharacterRuns; j++){CharacterRun run = p.getCharacterRun(j);if(run.getPicOffset() == 0 || run.getPicOffset() >= 1000){if(presentPicture < pictures.size()){writePicture();}}else{try{String text = run.text();if(text.length() >= 2 && pnumCharacterRuns < 2){output.write(text.getBytes());}else{              int size = run.getFontSize();        int color = run.getColor();        String fontSizeBegin = "<font size=\"" + decideSize(size) + "\">";        String fontColorBegin = "<font color=\"" + decideColor(color) + "\">";        String fontEnd = "</font>";        String boldBegin = "<b>";        String boldEnd = "</b>";        String islaBegin = "<i>";        String islaEnd = "</i>";        output.write(fontSizeBegin.getBytes());        output.write(fontColorBegin.getBytes());        if(run.isBold()){        output.write(boldBegin.getBytes());        }        if(run.isItalic()){        output.write(islaBegin.getBytes());        }         output.write(text.getBytes());        if(run.isBold()){        output.write(boldEnd.getBytes());        }        if(run.isItalic()){        output.write(islaEnd.getBytes());        }         output.write(fontEnd.getBytes());        output.write(fontEnd.getBytes());       }}catch(Exception e){System.out.println("Write File Exception");}}}}

在SDCARD上建立一個圖片的代碼:

public void writePicture(){Picture picture = (Picture)pictures.get(presentPicture);byte[] pictureBytes = picture.getContent();Bitmap bitmap = BitmapFactory.decodeByteArray(pictureBytes, 0, pictureBytes.length);makePictureFile();presentPicture++;File myPicture = new File(picturePath);try{FileOutputStream outputPicture = new FileOutputStream(myPicture);outputPicture.write(pictureBytes);outputPicture.close();}catch(Exception e){System.out.println("outputPicture Exception");}String imageString = "<img src=\"" + picturePath + "\"";if(bitmap.getWidth() > screenWidth){imageString = imageString + " " + "width=\"" + screenWidth + "\"";}imageString = imageString + ">";try{output.write(imageString.getBytes());}catch(Exception e){System.out.println("output Exception");}}

運行效果:

讀取圖片和文字:

讀取表格和文字:

原始碼及測試Word文檔打包:

http://download.csdn.net/source/3432624

本文系“暑期大學生部落格大賽-2011 Android成長篇“參賽文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.