1 /// <summary>
2 /// 生产word 文档
3 /// </summary>
4 public class GenerateWord
5 {
6 /// <summary>
7 ///模板地址
8 /// </summary>
9 public string TempPath { get; set; }
10
11 /// <summary>
12 /// 保存地址
13 /// </summary>
14 public string SavePath { get; set; }
15
16 /// <summary>
17 /// 页眉数据
18 /// </summary>
19 public Hashtable HsHeads { get; set; }
20
21 /// <summary>
22 /// 页脚数据
23 /// </summary>
24 public Hashtable HsFoots { get; set; }
25
26 /// <summary>
27 /// 书签数据
28 /// </summary>
29 public Hashtable HsBookMark { get; set; }
30
31 /// <summary>
32 /// 文档内容
33 /// </summary>
34 public DataSet DsBody { get; set; }
35
36 /// <summary>
37 /// 文档名称
38 /// </summary>
39 public string FileName { get; set; }
40 public string EmptyLogo { get; set; }
41 private Thread thread;
42
43 public void SaveTemplate()
44 {
45 DocX document = DocX.Load(TempPath);
46
47 #region 生成页面页脚
48
49 Formatting f = new Formatting();
50 f.FontColor = Color.FromArgb(50, 153, 205);
51 f.Size = 12;
52 f.Bold = true;
53 f.FontFamily = new FontFamily("Helvetica");
54
55 Formatting ffoot = new Formatting();
56 ffoot.FontColor = Color.Black;
57 ffoot.Size = 8;
58 ffoot.FontFamily = new FontFamily("Helvetica");
59
60 document.AddHeaders(); //添加所有页眉
61 Headers heads = document.Headers; //获取该文档所有的页眉
62 Header hfirst = heads.first;
63 Header head1 = heads.even;
64 Header head2 = heads.odd;
65
66 hfirst.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction = Direction.RightToLeft;
67 head1.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction=Direction.RightToLeft;
68 head2.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction=Direction.RightToLeft;
69
70 document.AddFooters();//添加所有的页脚
71 Footers footers = document.Footers; //获取该文档所有的页脚
72 Footer ffirst = footers.first;
73 Footer feven = footers.even;
74 Footer fodd = footers.odd;
75
76 document.DifferentFirstPage = true;
77 document.DifferentOddAndEvenPages = true;
78
79
80 Paragraph pf = ffirst.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
81 Paragraph pfeven = feven.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
82 Paragraph pfodd = fodd.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
83
84 //添加logo
85 Novacode.Image img;
86 MemoryStream stmMemory = new MemoryStream();
87
88 Paragraph p = head1.InsertParagraph("", false);
89 if (HsHeads["LogoUrl"] == null || HsHeads["LogoUrl"].ToString() == "")
90 {
91
92 System.Drawing.Image myimg = System.Drawing.Image.FromFile(EmptyLogo);
93 myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
94 stmMemory.Seek(0, SeekOrigin.Begin);
95 img = document.AddImage(stmMemory);
96 }
97 else
98 {
99 System.Net.WebRequest webreq = System.Net.WebRequest.Create(HsHeads["LogoUrl"].ToString());//"http://www.bc.ccoo.cn/logo/logo.gif"
100 System.Net.WebResponse webres = webreq.GetResponse();
101 Stream stream = webres.GetResponseStream();
102 System.Drawing.Image myimg = System.Drawing.Image.FromStream(stream);
103 myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
104 stmMemory.Seek(0, SeekOrigin.Begin);
105 img = document.AddImage(stmMemory);
106 stream.Close();
107 }
108
109 string footmark = string.Format("地址:{0} 电话:{1} QQ:{2}", HsFoots["address"].ToString(), HsFoots["tel"].ToString(), HsFoots["qq"].ToString());
110 //将图像插入到段落后面
111 Picture pic = img.CreatePicture();
112
113 //选择图像,并修改图像尺寸
114 pic.Rotation = 0;
115 pic.Width = 111;
116 pic.Height = 39;
117
118 //设置图片形状,并水平翻转图片
119 pic.SetPictureShape(BasicShapes.cube);
120 pic.FlipHorizontal = false;
121
122 pf.InsertPicture(pic, 0);
123 pf.Direction = Direction.RightToLeft;
124 pf.InsertParagraphAfterSelf(footmark, false, ffoot);
125
126 pfeven.InsertPicture(pic);
127 pfeven.Direction = Direction.RightToLeft;
128 pfeven.InsertParagraphAfterSelf(footmark, false, ffoot);
129
130 pfodd.InsertPicture(pic);
131 pfodd.Direction = Direction.RightToLeft;
132 pfodd.InsertParagraphAfterSelf(footmark, false, ffoot);
133
134 #endregion
135
136 #region 替换文本
137
138 document.ReplaceText("$ReportTitle$", HsBookMark["MerchantName"].ToString());
139 document.ReplaceText("$r_year$", DateTime.Now .Year.ToString());
140 document.ReplaceText("$r_month$", DateTime.Now.Month.ToString());
141 document.ReplaceText("$Report_head$", HsBookMark["OperatingCommissioner"].ToString());
142
143 document.ReplaceText("$IP$", HsBookMark["IPNUM"].ToString());
144 document.ReplaceText("$PV$", HsBookMark["PVNUM"].ToString());
145 document.ReplaceText("$FK$", HsBookMark["FKNUM"].ToString());
146
147 document.ReplaceText("$UserFeedBack$", HsBookMark["UserFeedback"].ToString());
148 document.ReplaceText("$ThinkingMonth$", HsBookMark["ThinkingMonth"].ToString());
149 document.ReplaceText("$ThinkingNextMonth$", HsBookMark["ThinkingNextMonth"].ToString());
150
151 #endregion
152
153 #region 替换表格数据
154 Table t = document.Tables[0];
166 if (t != null)
167 {
168 //生成Pv流量
169 if (DsBody.Tables.Count > 0 && DsBody.Tables[0].Rows.Count > 0)
170 {
171 List<Cell> listcell = t.Rows[0].Cells;
172 listcell[1].Paragraphs[0].Append(DsBody.Tables[0].Columns[0].ColumnName.ToString()).Alignment = Alignment.center;
173 listcell[2].Paragraphs[0].Append(DsBody.Tables[0].Columns[1].ColumnName.ToString()).Alignment = Alignment.center;
174 listcell[3].Paragraphs[0].Append(DsBody.Tables[0].Columns[2].ColumnName.ToString()).Alignment = Alignment.center;
175
176 for (int i = 1; i < t.Rows.Count; i++)
177 {
178 listcell = t.Rows[i].Cells;
179 for (int j = 0; j < 3; j++)
180 {
181 listcell[j + 1].Paragraphs[0].Append(DsBody.Tables[0].Rows[i - 1][j].ToString()).Alignment = Alignment.center;
182 }
183 }
184 }
185 }
186
187 #endregion
188
189 #region 动态生成表格
190 //生成运维日志
191 if (DsBody.Tables.Count > 0 && DsBody.Tables[1].Rows.Count > 0)
192 {
193 for (int i = 0; i < DsBody.Tables[1].Rows.Count; i++)
194 {
195 CreateAndInsertTableAfter(ref document, DsBody.Tables[1].Rows[i], Convert.ToString(i + 1), HsBookMark["OperatingCommissioner"].ToString());
196 }
197 }
198 #endregion
199 //声明内存流
200 MemoryStream ms = new MemoryStream();
201 //文件保存到内存流
202 document.SaveAs(ms);
203 document.Dispose();
204 #region 更新数据库
205
206 //更新数据库217
218 //发送到远处服务器进行保存230
231 #endregion
232 }
233
234 private static Table CreateAndInsertTableAfter(ref DocX document,DataRow dr,string indexnum,string head)
235 {
236 #region 定义字体颜色
237 Formatting f1 = new Formatting();
238 f1.FontColor = Color.White;
239 f1.Size = 10;
240 f1.Bold = true;
241 f1.FontFamily = new FontFamily("Helvetica");
242
243 Formatting f2 = new Formatting();
244 f2.FontColor = Color.FromArgb(255, 102, 102);
245 f2.Size = 10;
246 f2.Bold = true;
247 f2.FontFamily = new FontFamily("Helvetica");
248
249 Formatting f3 = new Formatting();
250 f3.FontColor = Color.FromArgb(255, 102, 0);
251 f3.Size = 10;
252 f3.Bold = true;
253 f3.FontFamily = new FontFamily("Helvetica");
254
255 Formatting f4 = new Formatting();
256 f4.FontColor = Color.FromArgb(50, 205, 255);
257 f4.Size = 10;
258 f4.Bold = true;
259 f4.FontFamily = new FontFamily("Helvetica");
260
261 Formatting f5 = new Formatting();
262 f5.FontColor = Color.FromArgb(40, 212, 190);
263 f5.Size = 10;
264 f5.Bold = true;
265 f5.FontFamily = new FontFamily("Helvetica");
266
267
268 Formatting f6 = new Formatting();
269 f5.FontColor = Color.FromArgb(102, 102, 102);
270 f5.Size = 12;
271 f5.FontFamily = new FontFamily("Helvetica");
272 #endregion
273
274 Table table = document.InsertTable(5, 2);
275
276 table.AutoFit = AutoFit.ColumnWidth;
277
278 #region Table title
279
280 table.Rows[0].Height = 36;
281
282 List<Cell> listtable = table.Rows[0].Cells;
283 listtable[0].Paragraphs[0].InsertText(indexnum, false, f1);
284 listtable[0].MarginTop = 5;
285 listtable[0].FillColor = Color.FromArgb(112, 180, 218);
286 listtable[0].Width = 30;
287 listtable[0].Paragraphs[0].Alignment = Alignment.center;
288
289
290 listtable[1].FillColor = Color.FromArgb(232, 243, 249);
291 listtable[1].Paragraphs[0].InsertText(dr["systime"].ToString() + "/" + (dr["OpMan"].ToString() == "" ? head : dr["OpMan"].ToString()), false, f6);
292 listtable[1].Paragraphs[0].Alignment = Alignment.right;
293 listtable[1].Width = 580;
294
295
296 List<Cell> listtable1 = table.Rows[1].Cells;
297 listtable1[0].Paragraphs[0].InsertText("行动", false, f2);
298 listtable1[0].Width = 50;
299 listtable1[0].Paragraphs[0].Alignment = Alignment.center;
300
301 listtable1[1].Paragraphs[0].InsertText(dr["dowhat"].ToString(), false, f6);
302 listtable1[1].Paragraphs[0].Alignment = Alignment.left;
303
304
305 List<Cell> listtable2 = table.Rows[2].Cells;
306 listtable2[0].Paragraphs[0].InsertText("原因", false, f3);
307 listtable2[0].Width = 50;
308 listtable2[0].Paragraphs[0].Alignment = Alignment.center;
309
310 listtable2[1].Paragraphs[0].InsertText(dr["reason"].ToString(), false, f6);
311 listtable2[1].Paragraphs[0].Alignment = Alignment.left;
312
313
314 List<Cell> listtable3 = table.Rows[3].Cells;
315 listtable3[0].Paragraphs[0].InsertText("作用", false, f4);
316 listtable3[0].Width = 50;
317 listtable3[0].Paragraphs[0].Alignment = Alignment.center;
318
319
320 listtable3[1].Paragraphs[0].InsertText(dr["effect"].ToString(), false, f6);
321 listtable3[1].Paragraphs[0].Alignment = Alignment.left;
322
323
324 List<Cell> listtable4 = table.Rows[4].Cells;
325 listtable4[0].Paragraphs[0].InsertText("结果", false, f5);
326 listtable4[0].Width = 50;
327
328
329 listtable4[0].Paragraphs[0].Alignment = Alignment.center;
330 Novacode.Image img;
331 MemoryStream stmMemory = new MemoryStream();
332 if (dr["PicUrl"] != null && dr["PicUrl"].ToString() != "")
333 {
334 System.Net.WebRequest webreq = System.Net.WebRequest.Create(dr["PicUrl"].ToString());
335 System.Net.WebResponse webres = webreq.GetResponse();
336 Stream stream = webres.GetResponseStream();
337 System.Drawing.Image myimg = System.Drawing.Image.FromStream(stream);
338 myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
339 stmMemory.Seek(0, SeekOrigin.Begin);
340 img = document.AddImage(stmMemory);
341 stream.Close();
342 listtable4[1].Paragraphs[0].InsertPicture(img.CreatePicture(330, 530));
343 }
344 else
345 {
346 var hrefresult = Regex.Match(dr["result"].ToString(), @"(?<=[\s+]?href[\s+]?=[\s+]?('|"")?)[^(""|')>]+?(?=""|')");
347 if (hrefresult.ToString() != "")
348 {
349 Hyperlink link = document.AddHyperlink("点击查看结果", new Uri(hrefresult.ToString()));
350 listtable4[1].Paragraphs[0].AppendHyperlink(link);
351 }
352 else
353 {
354 hrefresult = Regex.Match(dr["result"].ToString(), @"http://www.*");
355 if (hrefresult.ToString() != "")
356 {
357 Hyperlink link = document.AddHyperlink("点击查看结果", new Uri(hrefresult.ToString()));
358 listtable4[1].Paragraphs[0].AppendHyperlink(link);
359 }
360 else
361 {
362 listtable4[1].Paragraphs[0].Append(dr["result"].ToString());
363 }
364 }
365 }
366
367 listtable4[1].Paragraphs[0].Alignment = Alignment.left;
368
369 #endregion
370
371 table.Alignment = Alignment.center;
372 table.InsertParagraphAfterSelf("",false).AppendLine().AppendLine();
373 return table;
374 }
375 public GenerateWord(string TempPath, string FileName, string EmptyLogo, string SavePath, Hashtable HsHeads, Hashtable HsFoots, Hashtable HsBookMark, DataSet DsBody)
376 {
377 this.TempPath = TempPath;
378 this.SavePath = SavePath;
379 this.EmptyLogo = EmptyLogo;
380 this.HsHeads = HsHeads;
381 this.HsFoots = HsFoots;
382 this.HsBookMark = HsBookMark;
383 this.FileName = FileName;
384 this.DsBody = DsBody;
385 thread = new Thread(new ThreadStart(SaveTemplate));
386 }
387 public void Start()
388 {
389 if (thread != null)
390 {
391 thread.Start();
392 }
393 }
394 }