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();

 

---恢复内容结束---

posted @ 2016-03-18 17:04  一只奋斗的猪  阅读(6480)  评论(1编辑  收藏  举报