Java 后台创建word 文档
---恢复内容开始---
Java 后台创建 word 文档
自己总结 网上查阅的文档
分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6
方式一、(正常创建 适合短文本 无格式要求Word文档)
1 XWPFDocument doc = new XWPFDocument(); //创建word文件 2 XWPFParagraph p1 = doc.createParagraph(); //创建段落 3 XWPFRun r1 = p1.createRun(); //创建段落文本 4 r1.setText("hello world"); //设置文本 5 FileOutputStream out = new FileOutputStream("D:\\simple.docx"); //创建输出流 6 doc.write(out); //输出 7 out.close(); //关闭输出流
方式二、(适合有格式要求的Word文档。)
Demo code is my Working code 这段code 是文件下载功能 对选中的项 进行数据读取 并且生成word文档 并且压缩成zip格式 下载
//1、创建临时文件夹是否存在 File zipFolder = new File("F:\\压缩word"); if(!zipFolder.exists()){ zipFolder.mkdirs(); } File wordFolder = new File("F:\\测试word"); if(!wordFolder.exists()){ wordFolder.mkdirs(); } //2、声明变量 String splitSymbol = "\\"; byte[] byt = new byte[1024]; int count = 0; //编写压缩后文件 流 FileOutputStream zipOut = new FileOutputStream(zipFolder+splitSymbol+"myfigs.zip"); //获得 zip的file对象 File fileZip = new File(zipFolder+splitSymbol+"myfigs.zip"); //3、判断用户选择是1个还是多个 //获得类型 String[] libList = request.getParameter("libSource").split(","); //迭代ID String[] idArray = request.getParameter("hidFavId").split(","); for(int i = 0;i<idArray.length;i++){ //4、根据收藏类型 区分 访问数据库 获得word正文内容数据 String wordText = getTextData(request,idArray[i],libList[i]); //3、新创建个word StringBuffer buffer = new StringBuffer(); //因为必须符合HTML格式 所以 必须添加html头 buffer.append("<html><head><body>"); buffer.append(wordText); buffer.append("</body></head></html>"); //生成个文件名 UUID uuid = UUID.randomUUID(); File outFile = new File(wordFolder+splitSymbol+uuid.toString()+".doc"); //将数据转成字节数组 byte[] contentBytes = buffer.toString().getBytes(); ByteArrayInputStream byteStream = new ByteArrayInputStream(contentBytes); //创建word文档 POIFSFileSystem poifSystem = new POIFSFileSystem(); //暂时不知道什么意思 DirectoryNode root = poifSystem.getRoot(); //同上 root.createDocument("WordDocument",byteStream); //这个WordDocument 不可以进行修改 否则乱码 FileOutputStream outStream = new FileOutputStream(outFile); poifSystem.writeFilesystem(outStream); //将流 输出到word文档上 byteStream.close(); outStream.close(); } //5、利用压缩流 对 进行压缩 ZipOutputStream zipOutStream = new ZipOutputStream(new BufferedOutputStream(zipOut)); //创建个压缩流 对应文件输出流 文件名及路径 // 获得要压缩的文件夹 File file = new File(wordFolder+splitSymbol); String[] fileList = file.list(); for(String fileName : fileList){ //迭代要压缩文件夹 子内容 FileInputStream inputStream = new FileInputStream(file+splitSymbol+fileName); //设置压缩文件打开后 显示每一项的名字 ZipEntry zipentry = new ZipEntry(fileName); zipOutStream.putNextEntry(zipentry); //将压缩流和自项关联上 while((count=inputStream.read(byt, 0, 1024))!=-1){ zipOutStream.write(byt, 0, count); } inputStream.close(); } zipOutStream.close(); //7、文件下载 response.reset(); String fileName = new String("aggregate.zip".getBytes("UTF-8"),"iso-8859-1"); response.setHeader("Content-Disposition", "attachment; filename="+fileName); //文件名 response.setContentType("application/octet-stream; charset=utf-8"); response.setHeader("Content-Length", Long.valueOf(fileZip.length()).toString()); //页面下载框文件后面()大小 response.setCharacterEncoding("UTF-8"); ServletOutputStream outputStream = response.getOutputStream(); byte[] byteArray = FileUtils.readFileToByteArray(fileZip); //获得要下载的文件字节数组 //8、下载之前 将临时目录删除 File[] zipFiles = zipFolder.listFiles(); File[] wordFiles = wordFolder.listFiles(); for(File zip : zipFiles){ zip.delete(); } for(File word : wordFiles){ word.delete(); } zipFolder.delete(); wordFolder.delete(); outputStream.write(byteArray); //利用输出流 输出 outputStream.flush();
---恢复内容结束---