Androidテンプレートを使ってWord文書を作成して表示します.

22862 ワード

Androidがテンプレートを使ってWord文書を作成するには、Apache社が発売したApache POIを借りる必要があります.これは公式ダウンロードアドレスです.http://poi.apache.org/download.htmlこれはCSDNのダウンロードアドレスです.http://download.csdn.net/download/zhanglei280/10046152(なぜ現在のCSDNはポイントフリーダウンロードができないのか分かりません.最低は2ポイントです.ご了承ください.).
Android使用模板生成Word文档并查看_第1张图片
私たちが使用したいのはこの二つのjarパッケージです.ここで特に説明します.この二つのjarパッケージはword 2007版をサポートしていないので、2003版だけをサポートしています.つまり、docフォーマットだけがサポートしています.docxフォーマットはサポートしていません.だから、wordテンプレートを作ってください.docフォーマットの間違いがないようにしてください.
じゃ、これから私たちのプログラミングを始めます.プログラムは簡単です.コードを見ても分かります.
まずWordテンプレートのスタイルを見せます.みんなは自分のWordテンプレートをどうやって作成するか分かります.Android使用模板生成Word文档并查看_第2张图片.
以下のコードはWordテンプレートを使ってword文書を作成します.
package com.zl.zhifa.ui.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;

import com.zl.zhifa.R;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public class InputDataActivity extends Activity {
    //          
    private static final String newPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/doc/test.doc";
    private static final String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/doc";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input_data);

    }

    /**
     * newFile     
     * map       
     */
    public void writeDoc(InputStream in, File newFile, Map map) {
        try {

            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
            }

            HWPFDocument hdt = new HWPFDocument(in);
            // Fields fields = hdt.getFields();
            //   word    
            Range range = hdt.getRange();
            // System.out.println(range.text());

            //       
            for (Map.Entry entry : map.entrySet()) {
                range.replaceText(entry.getKey(), entry.getValue());
            }
            ByteArrayOutputStream ostream = new ByteArrayOutputStream();
            FileOutputStream out = new FileOutputStream(newFile, true);
            hdt.write(ostream);
            //      
            out.write(ostream.toByteArray());
            out.close();
            ostream.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 /**
     *    Button     
     * @param view
     */
    public void Save(View view) {
        try {
             // assets     Word  
            InputStream is = getAssets().open("Name.doc");
            //       
            File newFile = new File(newPath);
            Map map = new HashMap();
            map.put("$Name$", "  ");
            map.put("$Sex$", " ");
            map.put("$Address$", "      xx xx ");
            writeDoc(is, newFile, map);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void Open(View view) {
        startActivity(new Intent(InputDataActivity.this, WebViewActivity.class));
    }

}
これはどうやってWord文書のコードを調べますか?
ワードドキュメントの表示は、ワードドキュメントをHtmlに変換してWebViewを使って展示しています.
package com.zl.zhifa.ui.activity;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.webkit.WebSettings;
import android.webkit.WebView;

import com.zl.zhifa.R;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.w3c.dom.Document;

import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class WebViewActivity extends Activity {
    //      
    private String docPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/doc/";
    //    
    private String docName = "test.doc";
    //html      
    private String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/doc/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        String name = docName.substring(0, docName.indexOf("."));
        try {
            convert2Html(docPath + docName, savePath + name + ".html");
        } catch (Exception e) {
            e.printStackTrace();
        }
        //WebView      html  
        WebView webView = (WebView) this.findViewById(R.id.office);
        WebSettings webSettings = webView.getSettings();
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
        //       ,     Html       “file:///”   
        webView.loadUrl("file:///" + savePath + name + ".html");
    }

    /**
     * word    html  
     */
    public void convert2Html(String fileName, String outPutFile) {
        HWPFDocument wordDocument = null;
        try {
            wordDocument = new HWPFDocument(new FileInputStream(fileName));
            WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
                    DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
            //      
            wordToHtmlConverter.setPicturesManager(new PicturesManager() {
                public String savePicture(byte[] content,
                                          PictureType pictureType, String suggestedName,
                                          float widthInches, float heightInches) {
                    String name = docName.substring(0, docName.indexOf("."));
                    return name + "/" + suggestedName;
                }
            });
            //    
            List pics = wordDocument.getPicturesTable().getAllPictures();
            if (pics != null) {
                for (int i = 0; i < pics.size(); i++) {
                    Picture pic = (Picture) pics.get(i);
                    System.out.println(pic.suggestFullFileName());
                    try {
                        String name = docName.substring(0, docName.indexOf("."));
                        String file = savePath + name + "/"
                                + pic.suggestFullFileName();
                        File mFile = new File(file);
                        if (mFile.exists()) {
                            mFile.delete();
                        }
                        mFile.mkdirs();
                        pic.writeImageContent(new FileOutputStream(file));
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }
            wordToHtmlConverter.processDocument(wordDocument);
            Document htmlDocument = wordToHtmlConverter.getDocument();
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            DOMSource domSource = new DOMSource(htmlDocument);
            StreamResult streamResult = new StreamResult(out);

            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer serializer = tf.newTransformer();
            serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
            serializer.setOutputProperty(OutputKeys.INDENT, "yes");
            serializer.setOutputProperty(OutputKeys.METHOD, "html");
            serializer.transform(domSource, streamResult);
            out.close();
            //  html  
            writeFile(new String(out.toByteArray()), outPutFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *  html     sd 
     */
    public void writeFile(String content, String path) {
        FileOutputStream fos = null;
        BufferedWriter bw = null;
        try {
            File file = new File(path);
            if (!file.exists()) {
                file.createNewFile();
            }
            fos = new FileOutputStream(file);
            bw = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"));
            bw.write(content);
        } catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            try {
                if (bw != null)
                    bw.close();
                if (fos != null)
                    fos.close();
            } catch (IOException ie) {
            }
        }
    }
}
これは効果図です.見せてください.Android使用模板生成Word文档并查看_第3张图片 Android使用模板生成Word文档并查看_第4张图片.
原文参照リンク:http://blog.csdn.net/u011916937/article/details/50085441