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

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM