很多情況下,軟件開發者需要從數據庫讀取數據,然後將數據動態填充到手工預先準備好的Word模板文檔裏,這對於大批量生成擁有相同格式排版的正式文件非常有用,這個功能應用PageOffice的基本動態填充功能即可實現。但若是用戶想動態生成一個沒有固定模版的公文時,換句話說,沒有辦法事先準備一個固定格式的模板時,就需要開發人員在後臺用代碼實現Word文檔的從零到圖文並茂的動態生成功能了。這裏的“零”指的是Word空白文檔。
那如何實現Word文檔的從無到有呢,下面我就把自己實現這一功能的過程介紹一下。
例如,我想打開一個Word文檔,裏面的內容爲:標題(粗體、黑體、字體大小爲20、居中顯示)、第一段內容(內容(略)、字體傾斜、字體大小爲10、中文“楷體”、英文“Times New Roman”、紅色、最小行間距、左對齊、首行縮進)、第二段內容(內容(略)、字體大小爲12、黑體、1.5倍行間距、左對齊、首行縮進、插入圖片)、第三段內容(內容(略)、字體大小爲14、華文彩雲、2倍行間距、左對齊、首行縮進)
第一步:請先安裝PageOffice的服務器端的安裝程序,之後在你的網站根目錄下添加pageoffice文件夾(在PageOffice官方
網站的“下載中心”中可下載相應的壓縮包,解壓之後直接將PageOffice實例代碼裏的pageoffice文件夾拷貝到根目錄下就可以了)。
第二步:在網站中添加文件夾存放word模板文件,我習慣命名爲“doc”,將要打開的文件拷貝到該文件夾下,我要打開的文件爲“template.doc”。
第三步:在網站中創建頁面WordParagraph.aspx。在工具箱中拖動一個PageOfficeCtrl控件到頁面上(PageOfficeCtrl控件位於工具箱最下方)。
第四步:在WordParagraph.aspx頁面中,爲PageOfficeCtrl控件所在的層(<div></div>)設置控件顯示區域的大小。在WordParagraph.aspx.cs中編寫代碼對Word文檔內容進行填充並排版,部分代碼如下:
PageOffice.WordWriter.WordDocument doc = newPageOffice.WordWriter.WordDocument();
//設置內容標題
//創建DataRegion對象,PO_title爲自動添加的書籤名稱,書籤名稱需以“PO_”爲前綴,切書籤名稱不能重複
//三個參數分別爲要新插入書籤的名稱、新書籤的插入位置、相關聯的書籤名稱(“[home]”代表Word文檔的第一個位置)
PageOffice.WordWriter.DataRegion title = doc.CreateDataRegion("PO_title", PageOffice.WordWriter.DataRegionInsertType.After, "[home]");
//給DataRegion對象賦值
title.Value = "C#中Socket多線程編程實例\n";
//設置字體:粗細、大小、字體名稱、是否是斜體
title.Font.Bold = true;
title.Font.Size = 20;
title.Font.Name = "黑體";
title.Font.Italic = false;
//定義段落對象
PageOffice.WordWriter.ParagraphFormat titlePara = title.ParagraphFormat;
//設置段落對齊方式
titlePara.Alignment =PageOffice.WordWriter.WdParagraphAlignment.wdAlignParagraphCenter;
//設置段落行間距
titlePara.LineSpacingRule =PageOffice.WordWriter.WdLineSpacing.wdLineSpaceMultiple;
//設置內容
//第一段
//創建DataRegion對象,PO_body爲自動添加的書籤名稱
PageOffice.WordWriter.DataRegion body = doc.CreateDataRegion("PO_body", PageOffice.WordWriter.DataRegionInsertType.After, "PO_title");
//設置字體:粗細、是否是斜體、大小、字體名稱、字體顏色
body.Font.Bold = false;
body.Font.Italic = true;
body.Font.Size = 10;
//設置中文字體名稱
body.Font.Name = "楷體";
//設置英文字體名稱
body.Font.NameAscii = "Times New Roman";
body.Font.Color = Color.Red;
//給DataRegion對象賦值
body.Value = "是微軟隨着VS.net新推出的一門語言。它作爲一門新興的語言,有着C++的強健,又有着VB等的RAD特性。而且,微軟推出C#主要的目的是爲了對抗Sun公司的Java。大家都知道Java語言的強大功能,尤其在網絡編程方面。於是,C#在網絡編程方面也自然不甘落後於人。本文就向大家介紹一下C#下實現套接字(Sockets)編程的一些基本知識,以期能使大家對此有個大致瞭解。首先,我向大家介紹一下套接字的概念。\n";
//創建ParagraphFormat對象
PageOffice.WordWriter.ParagraphFormat bodyPara = body.ParagraphFormat;
//設置段落的行間距、對齊方式、首行縮進
bodyPara.LineSpacingRule =PageOffice.WordWriter.WdLineSpacing.wdLineSpaceAtLeast;
bodyPara.Alignment =PageOffice.WordWriter.WdParagraphAlignment.wdAlignParagraphLeft;
bodyPara.FirstLineIndent = 21;
//第二段
PageOffice.WordWriter.DataRegion body2 = doc.CreateDataRegion("PO_body2", PageOffice.WordWriter.DataRegionInsertType.After, "PO_body");
body2.Font.Bold = false;
body2.Font.Size = 12;
body2.Font.Name = "黑體";
body2.Value = "套接字是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元。可以將套接字看作不同主機間的進程進行雙向通信的端點,它構成了單個主機內及整個網絡間的編程界面。套接字存在於通信域中,通信域是爲了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序)。各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。\n";
PageOffice.WordWriter.ParagraphFormat bodyPara2 = body2.ParagraphFormat;
bodyPara2.LineSpacingRule =PageOffice.WordWriter.WdLineSpacing.wdLineSpace1px5;
bodyPara2.Alignment =PageOffice.WordWriter.WdParagraphAlignment.wdAlignParagraphLeft;
bodyPara2.FirstLineIndent = 21;
//第三段
PageOffice.WordWriter.DataRegion body3 = doc.CreateDataRegion("PO_body3", PageOffice.WordWriter.DataRegionInsertType.After, "PO_body2");
body3.Font.Bold = false;
body3.Font.Color = Color.FromArgb(0, 128, 128);
body3.Font.Size = 14;
body3.Font.Name = "華文彩雲";
body3.Value = "套接字可以根據通信性質分類,這種性質對於用戶是可見的。應用程序一般僅在同一類的套接字間進行通信。不過只要底層的通信協議允許,不同類型的套接字間也照樣可以通信。套接字有兩種不同的類型:流套接字和數據報套接字。\n";
PageOffice.WordWriter.ParagraphFormat bodyPara3 = body3.ParagraphFormat;
bodyPara3.LineSpacingRule =PageOffice.WordWriter.WdLineSpacing.wdLineSpaceDouble;
bodyPara3.Alignment =PageOffice.WordWriter.WdParagraphAlignment.wdAlignParagraphLeft;
bodyPara3.FirstLineIndent = 21;
//第四段
PageOffice.WordWriter.DataRegion body4 = doc.CreateDataRegion("PO_body4", PageOffice.WordWriter.DataRegionInsertType.After, "PO_body3");
//插入圖片(格式爲:[image]圖片路徑[/image]),注意圖片路徑不要弄錯
body4.Value = "[image]images/logo.png[/image]";
//body4.Value= "[word]doc/1.doc[/word]";//還可嵌入其他Word文件
PageOffice.WordWriter.ParagraphFormat bodyPara4 = body4.ParagraphFormat;
bodyPara4.Alignment =PageOffice.WordWriter.WdParagraphAlignment.wdAlignParagraphCenter;
//PageOffice組件的使用
string fileName = "template.doc";
PageOfficeCtrl1.ServerPage = "pageoffice/server.aspx";
//隱藏自定義工具欄
PageOfficeCtrl1.CustomToolbar = false;
PageOfficeCtrl1.SaveFilePage = "savedoc.aspx";
PageOfficeCtrl1.SetWriter(doc);
PageOfficeCtrl1.WebOpen(Server.MapPath("doc/")+ fileName, PageOffice.OpenModeType.docNormalEdit,"張佚名");
直接打開文件,就能生成圖文並茂的Word文檔了。
方案總結:
利用PageOffice組件實現Word後臺對Word文檔內容的編輯排版是非常簡單、容易的,它完美的封裝了微軟的VBA開發接口。它既能在線對文檔內容進行排版,又能在後臺修改內容(可實現內容的動態填充,具體編寫過程可參考卓正網站的下載中心上的示例),實現Word文檔內容的從無到有。其中,Word文檔內容既可以添加文字(可修改文字的大小、顏色、字體名稱、粗體、斜體,段落的行間距、首行縮進、對齊方式等),也可以插入圖片、其他Word文檔(詳細過程可參考卓正網站上的PageOffice學院中的熱門教程裏的教程--“如何把服務器上的多個文檔整理到一個模版文檔中”)。
另外,學校教育機構也經常遇到這一問題,如在出考試卷時,利用PageOffice開發平臺的Word內容動態填充功能,實現隨機抽取題庫,內容從無到有,拼合生成模擬試卷,可以很容易的製作標準模擬試題。