import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.FieldsDocumentPart;
import org.apache.poi.hwpf.usermodel.Field;
import org.apache.poi.hwpf.usermodel.Fields;
import org.apache.poi.hwpf.usermodel.Range;
/**
* word文档操作工具
* Created by lichunlong on 2015/5/6 0006.
*/
public class WordUtil {
/**
* 修改word并另保存在本地
* @param map 需要修改的键值对
*/
public static void writeAndSave(Map<String, String> map) {
try {
//读取word模板
String fileDir = new File("C:\\Users\\Administrator\\Desktop\\file").getCanonicalPath();
FileInputStream inputStream = new FileInputStream(new File(fileDir+"\\template.doc"));
HWPFDocument doc = new HWPFDocument(inputStream);
// Fields fields = doc.getFields();
// Iterator<Field> ite = fields.getFields(FieldsDocumentPart.MAIN).iterator();
// while(ite.hasNext()){
// System.out.println(ite.next().getType());
// }
//读取word文本内容
Range range = doc.getRange();
// System.out.println(range.text());
//替换文本内容
for (Map.Entry<String,String> entry : map.entrySet()) {
range.replaceText(entry.getKey(), entry.getValue());
}
//输出字节流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
String fileName = ""+System.currentTimeMillis();
fileName += ".doc";
FileOutputStream out = new FileOutputStream(fileDir+"\\"+fileName,true);
doc.write(outputStream);
out.write(outputStream.toByteArray());
out.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 修改word并提供下载
* @param request
* @param response
* @param map 需要修改的键值对
* @throws ServletException
* @throws IOException
*/
public static void writeAndPost(HttpServletRequest request, HttpServletResponse response, Map<String, String> map) throws ServletException, IOException{
try {
//读取word模板文件
String fileDir = new File("C:\\Users\\Administrator\\Desktop\\file").getCanonicalPath();
FileInputStream inputStream = new FileInputStream(new File(fileDir+"\\template.doc"));
HWPFDocument doc = new HWPFDocument(inputStream);
//替换读取到的word模板内容的指定字段
Range range = doc.getRange();
for (Map.Entry<String,String> entry : map.entrySet()) {
range.replaceText(entry.getKey(), entry.getValue());
}
//输出word内容文件流,提供下载
response.reset();
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename=\"test.doc\"");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ServletOutputStream servletOutputStream = response.getOutputStream();
doc.write(outputStream);
servletOutputStream.write(outputStream.toByteArray());
servletOutputStream.flush();
servletOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
}
}
}
动态设置文件名,解决中文乱码问题:
response.setCharacterEncoding("utf-8");
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename="+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
分享到:
相关推荐
java apache.poi包容易操作word文档,excel文档等。
java.lang.NullPointerException at org.apache.poi.openxml4j.opc....在linux环境下poi读取word文件产生的NullPointerException,此问题找了两天最终解决。希望有同样问题的人能快速解决问题,所以上传此文档
apach poi 读取word 文档 jar 包。 博文链接:https://wxinpeng.iteye.com/blog/231881
标签:apache、poi、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701
POI是apache提供的可以操作word文档的第三方jar。POI能操作word是使用XWPFDocument对象。
android使用POI操作替换word docx文档,根据 【***】这种标识规则,替换掉docx文档中的内容
Apache POI -3.7下载 POI3.7用于处理word.POI3.7用于处理word、excel、ppt等文档操作
java中读取word文档需要引用apache的poi开源项目包; 官方下载地址:http://poi.apache.org/download.html 为方便下载提供6个jar包,其中包含:poi-3.8.jar;poi-ooxml-3.8.jar;poi-ooxml-schemas-3.8.jar;poi-...
java 使用POI合并两个word文档.docx
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI...
使用POI读写Word doc文件 Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。在hwpf里面我们使用HWPFDocument来表示一个word doc文档
专门用来处理Office(Word、excel、txt、ppt)等的组件。包括6个jar包:xmlbeans-2.3.0、poi-3.10-FINAL-20140208
通过POI将图片插入word文档中,写文字就简单了自己摸索
使用poi将多个word合并,本方法经过测试,目前只支持多个doc格式合并成一个doc,如果是docx格式生成后打不开
资源描述了poi对于word的操作,poi合并word文档,poi设置word页码,内含maven依赖文档和完整代码,是一个完整工程,打开即可用
附件是java poi 3.17的lib库及其依赖库,全部下载引用后,可以进行excel的读写操作,无需引用其他lib库。poi-3.17适用于jdk1.7。 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft ...
poi将word里面的内容转换成html、包括word里面字体的大小、表格的处理、还有图片、段落等等...
POI 是apache的子项目,它提供了一组操纵Windows文档(Excel、word、PowerPoint等)的Java API,本压缩包中包括四部分:poi的全部成型jar包,全部源码、测试用例、以及html版本的文档。 所有资源来自网络,提供给找...
Apache_POI_API.rar;jacob.jar;poi-3.0.2.rar