在一些特殊應用場合,客戶但願在服務器上生成文檔的同時並填充數據,客戶端的頁面不顯示打開文檔。windows
目前服務器上生成文檔第一種就是方案是採用Jacob, 可是侷限於windows平臺,每每許多Java程序運行於Linux等其餘操做系統,在此不討論該方案。服務器
第二是POI,可是服務器上生成文檔對服務器壓力很大,並且它的Excel處理勉強能夠, Word模塊還侷限於讀取Word的文本內容,寫Word文件的功能就更弱;另外一個致命的問題是,處理doc格式和處理docx格式的類幾乎徹底不一樣,要分開針對不一樣的格式寫不一樣的代碼,這就意味着用戶上傳的docx格式文件若是使用了doc的擴展名,程序立刻崩潰。並且POI結構混,編碼比較複雜,開發過程很是消耗時間和精力。架構
因此針對這一系列的問題,PageOffice開發出來了FileMakerCtrl組件,該組件徹底符合PageOffice的架構設計,FileMakerCtrl在客戶端生成Office或PDF文檔並上傳到服務器,可是並不在Web網頁裏顯示Office文檔。jsp
FileMakerCtrl 類是PageOffice開發平臺中的核心類。和PageOfficeCtrl控件不一樣,FileMakerCtrl在Web網頁裏不顯示Office文檔,而是直接在線生成Office文檔或將Office文檔轉換成PDF文檔,或動態生成PDF文檔。函數
注:如下代碼以word爲例編碼
1.動態填充word文檔並上傳到服務器spa
請參考PageOffice產品開發包中Samples4的示例:
2、1三、FileMaker轉換單個文檔(以Word爲例)(專業版、企業版)操作系統
FileMakerCtrl fmCtrl = new FileMakerCtrl(request); fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); WordDocument doc = new WordDocument(); //給數據區域賦值,即把數據填充到模板中相應的位置 doc.openDataRegion("PO_company").setValue("北京卓正志遠軟件有限公司"); fmCtrl.setWriter(doc); fmCtrl.setSaveFilePage("SaveMaker.jsp"); //OnProgressComplete爲回調函數,文檔生成以後在頁面裏觸發此js事件。 //若是您須要響應此事件,您須要在當前 JSP 頁面裏定義一個 JavaScript 函數。 fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()"); fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word);
OnProgressComplete的使用: 好比須要實現文件生成後彈出另存爲對話框,讓用戶保存文件到本地電腦,那麼js能夠這樣寫:架構設計
function OnProgressComplete() { document.getElementById("FileMakerCtrl1").ShowDialog(2); //彈出另存對話框 }
2.動態將word文檔轉換爲pdf文檔並上傳到服務器設計
請參考PageOffice產品開發包中Samples4的示例:
2、3四、FileMaker轉換單個文檔爲PDF(以Word爲例) (專業版、企業版)
FileMakerCtrl fmCtrl = new FileMakerCtrl(request); fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); WordDocument doc = new WordDocument(); doc.openDataRegion("PO_company").setValue("北京卓正志遠軟件有限公司"); fmCtrl.setWriter(doc); fmCtrl.setSaveFilePage("SaveMaker.jsp"); fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()"); fmCtrl.fillDocumentAsPDF("doc/template.doc",DocumentOpenType.Word, "a.pdf");
3.批量生成文檔並上傳到服務器
請參考PageOffice產品開發包中Samples4的示例:
3、一、FileMaker批量轉換文檔(以Word爲例)(專業版、企業版)
批量生成文檔就是基於FileMaker轉換單個文檔所使用的技術,在OnProgressComplete事件中執行js方法刷新頁面中的iframe頁面循環的加載生成不一樣的文件。
FileMakerCtrl本質上就是一個沒有界面的PageOfficeCtrl,也是調用客戶端Office程序處理文件的,均可以實現對文檔進行動態填充、動態轉PDF等功能,惟一的區別就是FileMakerCtrl在線打開填充和轉換文檔的時候客戶端頁面不顯示打開的文檔內容,而PageOfficeCtrl顯示打開的文檔內容。