/// <summary>
/// 生产word 文档
/// </summary>
public class GenerateWord
{
/// <summary>
///模板地址
/// </summary>
public string TempPath { get; set; } /// <summary>
/// 保存地址
/// </summary>
public string SavePath { get; set; } /// <summary>
/// 页眉数据
/// </summary>
public Hashtable HsHeads { get; set; } /// <summary>
/// 页脚数据
/// </summary>
public Hashtable HsFoots { get; set; } /// <summary>
/// 书签数据
/// </summary>
public Hashtable HsBookMark { get; set; } /// <summary>
/// 文档内容
/// </summary>
public DataSet DsBody { get; set; } /// <summary>
/// 文档名称
/// </summary>
public string FileName { get; set; }
public string EmptyLogo { get; set; }
private Thread thread; public void SaveTemplate()
{
DocX document = DocX.Load(TempPath); #region 生成页面页脚 Formatting f = new Formatting();
f.FontColor = Color.FromArgb(, , );
f.Size = ;
f.Bold = true;
f.FontFamily = new FontFamily("Helvetica"); Formatting ffoot = new Formatting();
ffoot.FontColor = Color.Black;
ffoot.Size = ;
ffoot.FontFamily = new FontFamily("Helvetica"); document.AddHeaders(); //添加所有页眉
Headers heads = document.Headers; //获取该文档所有的页眉
Header hfirst = heads.first;
Header head1 = heads.even;
Header head2 = heads.odd; hfirst.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction = Direction.RightToLeft;
head1.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction=Direction.RightToLeft;
head2.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction=Direction.RightToLeft; document.AddFooters();//添加所有的页脚
Footers footers = document.Footers; //获取该文档所有的页脚
Footer ffirst = footers.first;
Footer feven = footers.even;
Footer fodd = footers.odd; document.DifferentFirstPage = true;
document.DifferentOddAndEvenPages = true; Paragraph pf = ffirst.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
Paragraph pfeven = feven.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
Paragraph pfodd = fodd.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot); //添加logo
Novacode.Image img;
MemoryStream stmMemory = new MemoryStream(); Paragraph p = head1.InsertParagraph("", false);
if (HsHeads["LogoUrl"] == null || HsHeads["LogoUrl"].ToString() == "")
{ System.Drawing.Image myimg = System.Drawing.Image.FromFile(EmptyLogo);
myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
stmMemory.Seek(, SeekOrigin.Begin);
img = document.AddImage(stmMemory);
}
else
{
System.Net.WebRequest webreq = System.Net.WebRequest.Create(HsHeads["LogoUrl"].ToString());//"http://www.bc.ccoo.cn/logo/logo.gif"
System.Net.WebResponse webres = webreq.GetResponse();
Stream stream = webres.GetResponseStream();
System.Drawing.Image myimg = System.Drawing.Image.FromStream(stream);
myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
stmMemory.Seek(, SeekOrigin.Begin);
img = document.AddImage(stmMemory);
stream.Close();
} string footmark = string.Format("地址:{0} 电话:{1} QQ:{2}", HsFoots["address"].ToString(), HsFoots["tel"].ToString(), HsFoots["qq"].ToString());
//将图像插入到段落后面
Picture pic = img.CreatePicture(); //选择图像,并修改图像尺寸
pic.Rotation = ;
pic.Width = ;
pic.Height = ; //设置图片形状,并水平翻转图片
pic.SetPictureShape(BasicShapes.cube);
pic.FlipHorizontal = false; pf.InsertPicture(pic, );
pf.Direction = Direction.RightToLeft;
pf.InsertParagraphAfterSelf(footmark, false, ffoot); pfeven.InsertPicture(pic);
pfeven.Direction = Direction.RightToLeft;
pfeven.InsertParagraphAfterSelf(footmark, false, ffoot); pfodd.InsertPicture(pic);
pfodd.Direction = Direction.RightToLeft;
pfodd.InsertParagraphAfterSelf(footmark, false, ffoot); #endregion #region 替换文本 document.ReplaceText("$ReportTitle$", HsBookMark["MerchantName"].ToString());
document.ReplaceText("$r_year$", DateTime.Now .Year.ToString());
document.ReplaceText("$r_month$", DateTime.Now.Month.ToString());
document.ReplaceText("$Report_head$", HsBookMark["OperatingCommissioner"].ToString()); document.ReplaceText("$IP$", HsBookMark["IPNUM"].ToString());
document.ReplaceText("$PV$", HsBookMark["PVNUM"].ToString());
document.ReplaceText("$FK$", HsBookMark["FKNUM"].ToString()); document.ReplaceText("$UserFeedBack$", HsBookMark["UserFeedback"].ToString());
document.ReplaceText("$ThinkingMonth$", HsBookMark["ThinkingMonth"].ToString());
document.ReplaceText("$ThinkingNextMonth$", HsBookMark["ThinkingNextMonth"].ToString()); #endregion #region 替换表格数据
Table t = document.Tables[];
if (t != null)
{
//生成Pv流量
if (DsBody.Tables.Count > && DsBody.Tables[].Rows.Count > )
{
List<Cell> listcell = t.Rows[].Cells;
listcell[].Paragraphs[].Append(DsBody.Tables[].Columns[].ColumnName.ToString()).Alignment = Alignment.center;
listcell[].Paragraphs[].Append(DsBody.Tables[].Columns[].ColumnName.ToString()).Alignment = Alignment.center;
listcell[].Paragraphs[].Append(DsBody.Tables[].Columns[].ColumnName.ToString()).Alignment = Alignment.center; for (int i = ; i < t.Rows.Count; i++)
{
listcell = t.Rows[i].Cells;
for (int j = ; j < ; j++)
{
listcell[j + ].Paragraphs[].Append(DsBody.Tables[].Rows[i - ][j].ToString()).Alignment = Alignment.center;
}
}
}
} #endregion #region 动态生成表格
//生成运维日志
if (DsBody.Tables.Count > && DsBody.Tables[].Rows.Count > )
{
for (int i = ; i < DsBody.Tables[].Rows.Count; i++)
{
CreateAndInsertTableAfter(ref document, DsBody.Tables[].Rows[i], Convert.ToString(i + ), HsBookMark["OperatingCommissioner"].ToString());
}
}
#endregion
//声明内存流
MemoryStream ms = new MemoryStream();
//文件保存到内存流
document.SaveAs(ms);
document.Dispose();
#region 更新数据库 //更新数据库
//发送到远处服务器进行保存
#endregion
} private static Table CreateAndInsertTableAfter(ref DocX document,DataRow dr,string indexnum,string head)
{
#region 定义字体颜色
Formatting f1 = new Formatting();
f1.FontColor = Color.White;
f1.Size = ;
f1.Bold = true;
f1.FontFamily = new FontFamily("Helvetica"); Formatting f2 = new Formatting();
f2.FontColor = Color.FromArgb(, , );
f2.Size = ;
f2.Bold = true;
f2.FontFamily = new FontFamily("Helvetica"); Formatting f3 = new Formatting();
f3.FontColor = Color.FromArgb(, , );
f3.Size = ;
f3.Bold = true;
f3.FontFamily = new FontFamily("Helvetica"); Formatting f4 = new Formatting();
f4.FontColor = Color.FromArgb(, , );
f4.Size = ;
f4.Bold = true;
f4.FontFamily = new FontFamily("Helvetica"); Formatting f5 = new Formatting();
f5.FontColor = Color.FromArgb(, , );
f5.Size = ;
f5.Bold = true;
f5.FontFamily = new FontFamily("Helvetica"); Formatting f6 = new Formatting();
f5.FontColor = Color.FromArgb(, , );
f5.Size = ;
f5.FontFamily = new FontFamily("Helvetica");
#endregion Table table = document.InsertTable(, ); table.AutoFit = AutoFit.ColumnWidth; #region Table title table.Rows[].Height = ; List<Cell> listtable = table.Rows[].Cells;
listtable[].Paragraphs[].InsertText(indexnum, false, f1);
listtable[].MarginTop = ;
listtable[].FillColor = Color.FromArgb(, , );
listtable[].Width = ;
listtable[].Paragraphs[].Alignment = Alignment.center; listtable[].FillColor = Color.FromArgb(, , );
listtable[].Paragraphs[].InsertText(dr["systime"].ToString() + "/" + (dr["OpMan"].ToString() == "" ? head : dr["OpMan"].ToString()), false, f6);
listtable[].Paragraphs[].Alignment = Alignment.right;
listtable[].Width = ; List<Cell> listtable1 = table.Rows[].Cells;
listtable1[].Paragraphs[].InsertText("行动", false, f2);
listtable1[].Width = ;
listtable1[].Paragraphs[].Alignment = Alignment.center; listtable1[].Paragraphs[].InsertText(dr["dowhat"].ToString(), false, f6);
listtable1[].Paragraphs[].Alignment = Alignment.left; List<Cell> listtable2 = table.Rows[].Cells;
listtable2[].Paragraphs[].InsertText("原因", false, f3);
listtable2[].Width = ;
listtable2[].Paragraphs[].Alignment = Alignment.center; listtable2[].Paragraphs[].InsertText(dr["reason"].ToString(), false, f6);
listtable2[].Paragraphs[].Alignment = Alignment.left; List<Cell> listtable3 = table.Rows[].Cells;
listtable3[].Paragraphs[].InsertText("作用", false, f4);
listtable3[].Width = ;
listtable3[].Paragraphs[].Alignment = Alignment.center; listtable3[].Paragraphs[].InsertText(dr["effect"].ToString(), false, f6);
listtable3[].Paragraphs[].Alignment = Alignment.left; List<Cell> listtable4 = table.Rows[].Cells;
listtable4[].Paragraphs[].InsertText("结果", false, f5);
listtable4[].Width = ; listtable4[].Paragraphs[].Alignment = Alignment.center;
Novacode.Image img;
MemoryStream stmMemory = new MemoryStream();
if (dr["PicUrl"] != null && dr["PicUrl"].ToString() != "")
{
System.Net.WebRequest webreq = System.Net.WebRequest.Create(dr["PicUrl"].ToString());
System.Net.WebResponse webres = webreq.GetResponse();
Stream stream = webres.GetResponseStream();
System.Drawing.Image myimg = System.Drawing.Image.FromStream(stream);
myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
stmMemory.Seek(, SeekOrigin.Begin);
img = document.AddImage(stmMemory);
stream.Close();
listtable4[].Paragraphs[].InsertPicture(img.CreatePicture(, ));
}
else
{
var hrefresult = Regex.Match(dr["result"].ToString(), @"(?<=[\s+]?href[\s+]?=[\s+]?('|"")?)[^(""|')>]+?(?=""|')");
if (hrefresult.ToString() != "")
{
Hyperlink link = document.AddHyperlink("点击查看结果", new Uri(hrefresult.ToString()));
listtable4[].Paragraphs[].AppendHyperlink(link);
}
else
{
hrefresult = Regex.Match(dr["result"].ToString(), @"http://www.*");
if (hrefresult.ToString() != "")
{
Hyperlink link = document.AddHyperlink("点击查看结果", new Uri(hrefresult.ToString()));
listtable4[].Paragraphs[].AppendHyperlink(link);
}
else
{
listtable4[].Paragraphs[].Append(dr["result"].ToString());
}
}
} listtable4[].Paragraphs[].Alignment = Alignment.left; #endregion table.Alignment = Alignment.center;
table.InsertParagraphAfterSelf("",false).AppendLine().AppendLine();
return table;
}
public GenerateWord(string TempPath, string FileName, string EmptyLogo, string SavePath, Hashtable HsHeads, Hashtable HsFoots, Hashtable HsBookMark, DataSet DsBody)
{
this.TempPath = TempPath;
this.SavePath = SavePath;
this.EmptyLogo = EmptyLogo;
this.HsHeads = HsHeads;
this.HsFoots = HsFoots;
this.HsBookMark = HsBookMark;
this.FileName = FileName;
this.DsBody = DsBody;
thread = new Thread(new ThreadStart(SaveTemplate));
}
public void Start()
{
if (thread != null)
{
thread.Start();
}
}
}

Docx 生成word文档二的更多相关文章

  1. Docx 生成word文档

    1.生成word代码 /// <summary> /// 生成word文档 /// </summary> /// <param name="tempPath&q ...

  2. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  3. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

  4. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  5. C#开源组件DocX处理Word文档基本操作(二)

    上一篇 C#开源组件DocX处理Word文档基本操作(一) 介绍了DocX的段落.表格及图片的处理,本篇介绍页眉页脚的处理. 示例代码所用DocX版本为:1.3.0.0.关于版本的区别,请参见上篇,而 ...

  6. 将HTML导出生成word文档

    前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...

  7. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  8. Android根据word模板文档将表单数据生成word文档的方案整理

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: 参考资料:<Fre ...

  9. Aspose.Words简单生成word文档

    Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...

随机推荐

  1. MFC入门--显示静态图片及调用本地软件

    MFC是微软开发的基础类库,主要用来开发图形界面应用程序,在学习中,我们要验证算法好坏,一般需要对结果进行可视化. OpenCV是计算机视觉中的开源算法库,集成了很多先进算法,现在想将MFC与Open ...

  2. 《Practices of an Agile Developer:Woring in the Real World》读书笔记 PB16110698(~3.22)第三周

    <Practices of an Agile Developer:Woring in the Real World>读书笔记  本周我阅读了<高效程序员的45个习惯:敏捷开发修炼之道 ...

  3. 第三方下载控件 用起来还是不错的偶!Aria

    本文主要介绍开源项目Aria的使用. 先在项目里的build 中配置compile 'com.arialyy.aria:Aria:3.1.1' //下载 开始下载 Aria.download(this ...

  4. WJMZBMR打osu! / Easy

    WJMZBMR打osu! / Easy 有一个由o,x,?组成的长度为n的序列,?等概率变为o,x,定义序列权值为连续o的长度o的平方之和,询问权值的期望, 解 注意到权值不是简单的累加关系,存在平方 ...

  5. Entity Framework 学习记录

    msdn  :https://msdn.microsoft.com/zh-cn/data/ee712907.aspx code first 入门: https://msdn.microsoft.com ...

  6. csps模拟69chess,array,70木板,打扫卫生题解

    题面:https://www.cnblogs.com/Juve/articles/11663898.html 69: 本以为T2傻逼题结果爆零了...T3原题虽然打的不是正解复杂度但是都不记得做过这道 ...

  7. webpack引入jQuery

    1. 本地文件引入 配置 const webpack=require('webpack'); module.exports={ resolve:{ alias:{ //绝对路径 jQuery:path ...

  8. git 命令行(四)-推送分支到远程

    在本地新建一个分支: git branch newBranch 切换到你的新分支: git checkout newBranch 创建并切换到新分支: git checkout -b newBranc ...

  9. C# FTP上传下载(支持断点续传)

    <pre class="csharp" name="code"><pre class="csharp" name=&quo ...

  10. 杂项-VOD:VOD(视频点播)

    ylbtech-杂项-VOD:VOD(视频点播) 视频点播是二十世纪90年代在国外发展起来的,英文称为“Video on Demand”,所以也称为“VOD”.顾名思义,就是根据观众的要求播放节目的视 ...