不少狀況下,軟件開發者須要從數據庫讀取數據,而後將數據動態填充到手工預先準備好的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」。ide
第三步:在網站中建立頁面WordParagraph.aspx。在工具箱中拖動一個PageOfficeCtrl控件到頁面上(PageOfficeCtrl控件位於工具箱最下方)。工具
第四步:在WordParagraph.aspx頁面中,爲PageOfficeCtrl控件所在的層(<div></div>)設置控件顯示區域的大小。在WordParagraph.aspx.cs中編寫代碼對Word文檔內容進行填充並排版,部分代碼以下:字體
PageOffice.WordWriter.WordDocument doc = newPageOffice.WordWriter.WordDocument();網站
//設置內容標題spa
//建立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");
//插入圖片(格式爲:[p_w_picpath]圖片路徑[/p_w_picpath]),注意圖片路徑不要弄錯
body4.Value = "[p_w_picpath]p_w_picpaths/logo.png[/p_w_picpath]";
//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內容動態填充功能,實現隨機抽取題庫,內容從無到有,拼合生成模擬試卷,能夠很容易的製做標準模擬試題。