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
阅读全文
0 0
- Android使用模板生成Word文档并查看
- Android 使用模板生成Word文档,支持手机直接查看word
- Android 使用模板生成Word文档,支持手机直接查看word
- 【Java】使用模板生成word文档到服务器,并下载
- POI 使用word模板生成word文档
- 使用freemaker模板生成word文档
- java 编码填充 word 模板生成 word合同,并将word合同转成pdf 文档
- 使用百度JS模板引擎生成PDF和Word文档
- 关于使用模板velicity或者其他工具生成word文档
- word模板生成word报表文档
- 使用VS.NET生成word文档并直接下载
- 使用VS.NET生成word文档并直接下载
- 使用VS.NET生成word文档并直接下载
- 使用VS.NET生成word文档并直接下载
- 使用VS.NET生成word文档并直接下载
- 使用Asp.Net生成Word文档并直接下载
- 使用ASP.NET生成Word文档并直接下载
- Asp.net或C#使用word模板生成替换后的Word和pdf文档-总结
- svn的merge使用例子
- SpringMVC的静态资源拦截
- IIS错误信息:HTTP 错误 401.3
- Qt中 QDockWidget的自定义标题栏 以及 tab页的位置
- 浅谈group by和order by的用法和区别
- Android使用模板生成Word文档并查看
- Maven – 外部依赖
- MLS移动最小二乘法
- Jupyter Notebook 的快捷键
- E
- TensorFlow学习日记16
- 习题5.1
- IIS运行一段时间不响应的解决方法
- A New Start