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

1、 需求背景windows

  在一些特殊應用場合,客戶但願在服務器上生成文檔的同時並填充數據,客戶端的頁面不顯示打開文檔,可是服務器上生成文檔對服務器壓力很大,目前服務器上生成文檔第一種就是方式是jacob, 可是侷限於windows平臺,每每許多JAVA程序運行於其餘操做系統,在此不討論該方案。二是POI。 可是它的excel處理還湊合, word模塊還侷限於讀取word的文本內容,寫word文件的功能就更弱;還有一個要命的地方,處理doc格式和處理docx格式的類幾乎徹底不一樣,要分開針對不一樣的格式寫不一樣的代碼,這就意味着用戶上傳的docx格式文件若是使用了doc的擴展名,程序立刻崩潰。並且我的認爲poi結構混亂,編碼比較複雜,開發過程很是消耗時間和精力。PageOffice提供了FileMakerCtrl組件,FileMakerCtrl是在客戶端生成文檔並上傳到服務器,可是不會在Web網頁裏顯示word文檔,所以採用FileMakerCtrl生成word文件有兩個優勢:1. 在客戶端生成word文檔,不會對服務器形成任何壓力;2. 生成的文檔屬於標準的word文檔格式。服務器

2、 核心代碼app

  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方法的代碼,接收客戶端上傳的文件流excel

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

  4. 生成的word文件效果。server

  

3、 相關下載blog

  訪問下面的地址下載PageOffice for Java 開發包,部署Samples4示例以後參考示例:2、1三、FileMaker轉換單個文檔(以Word爲例)開發

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

相關文章
相關標籤/搜索