[原創]Java動態填充word文檔並上傳到服務器


一、 需求背景

  在一些特殊應用場合,客戶希望在服務器上生成文檔的同時並填充數據,客戶端的頁面不顯示打開文檔,但是服務器上生成文檔對服務器壓力很大,目前服務器上生成文檔第一種就是方式是jacob, 但是局限於windows平台,往往許多JAVA程序運行於其他操作系統,在此不討論該方案。二是POI。 但是它的excel處理還湊合, word模塊還局限於讀取word的文本內容,寫word文件的功能就更弱;還有一個要命的地方,處理doc格式和處理docx格式的類幾乎完全不同,要分開針對不同的格式寫不同的代碼,這就意味着用戶上傳的docx格式文件如果使用了doc的擴展名,程序馬上崩潰。而且個人認為poi結構混亂,編碼比較復雜,開發過程非常消耗時間和精力。PageOffice提供了FileMakerCtrl組件,FileMakerCtrl是在客戶端生成文檔並上傳到服務器,但是不會在Web網頁里顯示word文檔,因此采用FileMakerCtrl生成word文件有兩個優點:1. 在客戶端生成word文檔,不會對服務器造成任何壓力;2. 生成的文檔屬於標准的word文檔格式。

二、 核心代碼

  1.制作模板,打開word模板文件,在文件中插入書簽:PO_company、PO_year、PO_number,如下圖所示:

  

  2. 動態填充word文檔並上傳到服務器

    FileMakerCtrl fmCtrl = new FileMakerCtrl(request);
    //設置PageOffice的服務頁面
    fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz");    
    WordDocument doc = new WordDocument();
    //給數據區域賦值,即把數據填充到模板中相應的位置
    doc.openDataRegion("PO_company").setValue("北京某某軟件有限公司  ");
    doc.openDataRegion("PO_year").setValue("2018");
    doc.openDataRegion("PO_number").setValue("008");
    fmCtrl.setWriter(doc);
    //設置用來接收生成的文檔的action方法或RequestMapping方法
    fmCtrl.setSaveFilePage("/SaveFile"); 
    fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word);

  3. 編寫SaveFilePage指向的action或RequestMapping方法的代碼,接收客戶端上傳的文件流

    FileSaver fs = new FileSaver(request, response);
    String fileName = "myfile.doc" ;
    fs.saveToFile(request.getSession().getServletContext().getRealPath("/") +"/"+ fileName);
    fs.close();

  4. 生成的word文件效果。

  

三、 相關下載

  訪問下面的地址下載PageOffice for Java 開發包,部署Samples4示例之后參考示例:二、13、FileMaker轉換單個文檔(以Word為例)

  http://www.zhuozhengsoft.com/dowm/


免責聲明!

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



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