1. 程式人生 > >動態生成Word文件

動態生成Word文件

在某些情況下,使用者想動態生成一個內容無法預知的公文,換句話說,就是無法事先準備一個固定格式的模板,這種情況就需要開發人員完全用編碼實現從零到圖文並茂的Word文件的動態生成功能了。這裡的“零”指的就是Word空白文件。

那如何實現Word文件的從無到有呢,下面我就把自己實現這一功能的過程介紹一下。

例如,我想開啟一個Word文件,裡面的內容為:標題(粗體、黑體、字型大小為20、居中顯示)、第一段內容(內容(略)、字型傾斜、字型大小為10、中文“楷體”、英文“Times New Roman”、紅色、最小行間距、左對齊、首行縮排)、第二段內容(內容(略)、字型大小為12、黑體、1.5倍行間距、左對齊、首行縮排、插入圖片)、第三段內容(內容(略)、字型大小為14、華文彩雲、2倍行間距、左對齊、首行縮排)

核心程式碼:

PageOffice.WordWriter.WordDocument doc = new PageOffice.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.wdLineSpace1pt5;
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;

PageOfficeCtrl1.SetWriter(doc);
PageOfficeCtrl1.ServerPage = "pageoffice/server.aspx";
PageOfficeCtrl1.SaveFilePage = "savedoc.aspx";
PageOfficeCtrl1.WebOpen(Server.MapPath("doc/blank.doc"), PageOffice.OpenModeType.docNormalEdit, "張佚名");

請參考PageOffice產品開發包中Samples4示例的演示:
三、7、完全程式設計實現動態生成Word檔案(專業版、企業版)

總結:
PageOffice元件不但可以控制Word中的文字內容,還可以控制文字的大小、顏色、字型名稱、粗體、斜體,段落的行間距、首行縮排、對齊方式等,也可以程式設計插入圖片或其他Word文件。學校教育機構也經常遇到這一需求,比如在出考試卷時,利用PageOffice開發平臺的Word內容動態填充功能,實現隨機抽取題庫,內容從無到有,可以很容易的製作和生成試卷。