Android使用模板生成Word文档并查看

来源:互联网 发布:淘宝一元秒杀网在那 编辑:程序博客网 时间:2024/05/29 10:49

Android想要使用模板生成Word文档需要借助,Apache 公司推出的 Apache POI,这个是官方下载地址:http://poi.apache.org/download.html,这是CSDN的下载地址:http://download.csdn.net/download/zhanglei280/10046152(不知道为什么现在的CSDN无法选择免积分下载,最低就是2积分大家多多谅解呀)。

这里写图片描述

我们需要使用的就是这两个jar包,在这里特殊说明一下这两个jar包是不支持word2007版的它只支持2003版,也就是说它只支持.doc格式而不支持.docx格式,所以请大家把你的word模板做成.doc格式的免得出错。

好了接下来开始我们的编程,程序很简单大家看代码也看的懂。

先给大家看看Word模板的样式,大家一看就知道如何去编写自己的Word模板了
这里写图片描述

以下代码是使用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<String, String> 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<String, String> 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<String, String> map = new HashMap<String, String>();            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文档的代码:

word文档的查看,其实是将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<Picture> 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) {            }        }    }}

这个是效果图,给大家看一下:
这里写图片描述
这里写图片描述

原文参考链接:http://blog.csdn.net/u011916937/article/details/50085441

原创粉丝点击