• 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     }
  • 相关阅读:
    【Codeforces 340D】Bubble Sort Graph
    在写EF 时把时间格式化的做法
    判断早八点晚八点内做事情的方法
    EF分组后把查询的字段具体映射到指定类里面的写法
    MYSQL 之SET GLOBAL innodb_buffer_pool_size =n
    指定类型的成员XX”不支持实体LINQ。只有初始化,成员单位,和实体导航性能的支持。
    MVC中某个页面不需要引用母版页的正确写法
    新建一个controller并指定为默认的方法
    如果有反向代理的情况下,获取最原始的IP的办法
    解决MVC运行controller的时候只有有参构造函数但是程序一定要走无参构造函数的方法
  • 原文地址:https://www.cnblogs.com/linsu/p/4607781.html
Copyright © 2020-2023  润新知