在一些特殊應用場合,客戶但願在服務器上生成文檔的同時並填充數據,客戶端的頁面不顯示打開文檔。設計模式
目前服務器上生成文檔的方案就是採用SharePoint或VSTO,SharePoint高昂的價格使人望而生畏,在此不討論該方案。因爲歷史遺留問題,Office原本是設計與COM協同工做的,這就使得從一開始VSTO就有點"水土不服"。.net代碼經過封裝COM與Office通訊,可是有時這種配合卻並不協調,Office對象模型並不老是遵循.net設計所採用的命名規則和設計模式,並且服務器上生成文檔對服務器壓力很大,編碼比較複雜,開發過程很是消耗時間和精力。服務器
因此針對這一系列的問題,PageOffice開發出來了FileMakerCtrl組件,該組件徹底符合PageOffice的架構設計,FileMakerCtrl在客戶端生成Office或PDF文檔並上傳到服務器,可是並不在Web網頁裏顯示Office文檔。架構
FileMakerCtrl 類是PageOffice開發平臺中的核心類。和PageOfficeCtrl控件不一樣,FileMakerCtrl在Web網頁裏不顯示Office文檔,而是直接在線生成Office文檔或將Office文檔轉換成PDF文檔,或動態生成PDF文檔。函數
注:如下代碼以word爲例編碼
1.動態填充word文檔並上傳到服務器spa
請參考PageOffice產品開發包中Samples4的示例:
2、1三、FileMaker轉換單個文檔(以Word爲例)(專業版、企業版).net
PageOffice.WordWriter.WordDocument doc = new PageOffice.WordWriter.WordDocument(); //給數據區域賦值,即把數據填充到模板中相應的位置 doc.OpenDataRegion("PO_company").Value = "北京卓正志遠軟件有限公司" ; FileMakerCtrl1.SetWriter(doc); FileMakerCtrl1.ServerPage = Request.ApplicationPath + "/pageoffice/server.aspx"; FileMakerCtrl1.SaveFilePage = "Savemaker.aspx"; //OnProgressComplete爲回調函數,文檔生成以後在頁面裏觸發此js事件。 //若是您須要響應此事件,您須要在當前 JSP 頁面裏定義一個 JavaScript 函數。 FileMakerCtrl1.JsFunction_OnProgressComplete = "OnProgressComplete()"; FileMakerCtrl1.FillDocument(Server.MapPath("doc/template.doc"), PageOffice.DocumentOpenType.Word);
OnProgressComplete的使用: 好比須要實現文件生成後彈出另存爲對話框,讓用戶保存文件到本地電腦,那麼js能夠這樣寫:架構設計
function OnProgressComplete() { document.getElementById("FileMakerCtrl1").ShowDialog(2); //彈出另存對話框 }
2.動態將word文檔轉換爲pdf文檔並上傳到服務器設計
請參考PageOffice產品開發包中Samples4的示例:
2、3四、FileMaker轉換單個文檔爲PDF(以Word爲例) (專業版、企業版)code
PageOffice.WordWriter.WordDocument doc = new PageOffice.WordWriter.WordDocument(); //給數據區域賦值,即把數據填充到模板中相應的位置 doc.OpenDataRegion("PO_company").Value = "北京卓正志遠軟件有限公司" ; FileMakerCtrl1.SetWriter(doc); FileMakerCtrl1.ServerPage = Request.ApplicationPath + "/pageoffice/server.aspx"; FileMakerCtrl1.SaveFilePage = "Savemaker.aspx"; //OnProgressComplete爲回調函數,文檔生成以後在頁面裏觸發此js事件。 //若是您須要響應此事件,您須要在當前 JSP 頁面裏定義一個 JavaScript 函數。 FileMakerCtrl1.JsFunction_OnProgressComplete = "OnProgressComplete()"; FileMakerCtrl1.FillDocumentAsPDF(Server.MapPath("doc/template.doc"), PageOffice.DocumentOpenType.Word, "a.pdf");
3.批量生成文檔並上傳到服務器
請參考PageOffice產品開發包中Samples4的示例:
3、一、FileMaker批量轉換文檔(以Word爲例)(專業版、企業版)
批量生成文檔就是基於FileMaker轉換單個文檔所使用的技術,在OnProgressComplete事件中執行js方法刷新頁面中的iframe頁面循環的加載生成不一樣的文件。
FileMakerCtrl本質上就是一個沒有界面的PageOfficeCtrl,也是調用客戶端Office程序處理文件的,均可以實現對文檔進行動態填充、動態轉PDF等功能,惟一的區別就是FileMakerCtrl在線打開填充和轉換文檔的時候客戶端頁面不顯示打開的文檔內容,而PageOfficeCtrl顯示打開的文檔內容。