標籤:eal on() 運行 產生 soft end make str href
一、 需求背景
在一些特殊應用場合,客戶希望在伺服器上產生文檔的同時並填充資料,用戶端的頁面不顯示開啟文檔,但是伺服器上產生文檔對伺服器壓力很大,目前伺服器上產生文檔第一種就是方式是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/
[轉載]Java動態填充word文檔並上傳到伺服器