Docx 生成word文档二

  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     }

 

posted @ 2015-06-29 16:30  sulin  阅读(809)  评论(0编辑  收藏  举报