apache.poi包简单操作word文档
2015-05-06 18:08
435 查看
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"));
相关文章推荐
- poi操作word,简单写docx
- 使用poi操作word文档实现套打功能
- Asp.net操作Word文档,原来这么简单啊!
- 利用poi操作word文档(针对docx格式)
- Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包
- 利用poi操作word文档(针对docx格式)
- [POI]Word文档的相关操作
- poi操作word文档表操作
- POI导出word文档的基本操作
- 黄聪:C# web word文档操作,任意指定位置插入图片,表格简单操作
- poi操作word文档(替换,插入图片)
- poi操作word文档总结
- poi操作word文档文件操作
- Java操作Word文档(POI)
- POI操作word文档 (采用mob)
- XWPF POI word文档操作
- apache poi操作office文档---- POI Word DOC格式转Html
- poi操作word文档
- POI操作WORD文档,生成的新文档为空白文档 -- 待解决
- poi操作word文档文件操作