zoukankan      html  css  js  c++  java
  • 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();

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

  • 相关阅读:
    程序员你写的代码,被爆出黑产了!
    .NET面试题系列之面向对象
    .NET必问的面试题系列之基本概念和语法
    xamarin开发android收集的一些工具
    C#爬虫使用代理刷csdn文章浏览量
    我们必须要知道的RESTful服务最佳实践
    MVP架构在xamarin android中的简单使用
    使用Xamarin实现跨平台移动应用开发(转载)
    博客园app for xamarin android一款简洁阅读的博客园android客户端
    vs2019企业版密钥
  • 原文地址:https://www.cnblogs.com/yi1036943655/p/5292850.html
Copyright © 2011-2022 走看看