先制作word模板文件,插入书签名称,然后替换
string savePath;
var docPath = Server.MapPath("~\\ExcelFiles\\模板.docx");
string fileName = "***方案.docx";
using (DocX doc = DocX.Load(docPath))
{
doc.ReplaceText("ProjectName", “***”);
doc.ReplaceText("MuJuanMuDi","**");
//图片
string pic =UploadPhysPath + pro.nv_projectimages;
InsertPictureInBookMark(doc, "ProjectImage", pic, 500, 300);//模板中插入书签:ProjectImage
InsertPictureInBookMark(doc, "ProjectImage", pic, 500, 300);//模板中插入书签:ProjectImage
//表格
Table mjTable = doc.Tables[1];
foreach (var item in itemList)
{
Row row = mjTable.InsertRow();
Paragraph paragraph = row.Paragraphs[0];
Uri uri = new Uri(FrontUrlBase+string.Format("/NewsShow/-7/{0}.html",item.newsId));
Hyperlink hLink = doc.AddHyperlink(item.newsTitle,uri);
paragraph.AppendHyperlink(hLink);
paragraph.Color(System.Drawing.Color.Blue);
row.Cells[1].Width = 2.64;
//row.Cells[1].VerticalAlignment = VerticalAlignment.Center;
Paragraph paragraph1 = row.Paragraphs[1];
paragraph1.Append(item.dt_newspublishdate.ToString("yyyy-MM-dd"));
}
foreach (var item in itemList)
{
Row row = mjTable.InsertRow();
Paragraph paragraph = row.Paragraphs[0];
Uri uri = new Uri(FrontUrlBase+string.Format("/NewsShow/-7/{0}.html",item.newsId));
Hyperlink hLink = doc.AddHyperlink(item.newsTitle,uri);
paragraph.AppendHyperlink(hLink);
paragraph.Color(System.Drawing.Color.Blue);
row.Cells[1].Width = 2.64;
//row.Cells[1].VerticalAlignment = VerticalAlignment.Center;
Paragraph paragraph1 = row.Paragraphs[1];
paragraph1.Append(item.dt_newspublishdate.ToString("yyyy-MM-dd"));
}
savePath = UploadPhysPath + "/Doc/" + DateTime.Now.ToString("yyyyMMdd") + "\\" + Guid.NewGuid().ToString() + "\\";
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
savePath = savePath + fileName;
doc.SaveAs(savePath);
}
#region 插入图片
/// <summary>
/// 向书签插入图片
/// </summary>
/// <param name="mDocX">文档</param>
/// <param name="strMarkName">书签名称</param>
/// <param name="strPicPath">图片路径</param>
/// <param name="nWidth">设置宽度</param>
/// <param name="nHeigth">设置高度</param>
/// <returns>是否插入成功</returns>
public bool InsertPictureInBookMark(DocX mDocX, string strMarkName, string strPicPath,int nWidth = -1, int nHeigth = -1)
{
try
{
//遍历书签,找到指定的书签,插入字符
foreach (var paragraph in mDocX.Paragraphs)
{
//获得指定书签
var bookMark = get_BookMarkByName(mDocX, strMarkName);
//向书签插入图片
return InsertPicture(mDocX, bookMark.Paragraph, strPicPath, nWidth, nHeigth);
}
}
catch
{
return false;
}
return false;
}
/// <summary>
/// 根据书签名称获取书签
/// </summary>
/// <param name="mDocX">文档</param>
/// <param name="strMarkName">书签名称</param>
/// <returns></returns>
public Bookmark get_BookMarkByName(DocX mDocX, string strMarkName)
{
//遍历书签,找到指定的书签,插入字符
foreach (var paragraph in mDocX.Paragraphs)
{
//查找指定书签
var bookMark = paragraph.GetBookmarks().FirstOrDefault(x => x.Name == strMarkName);
if (bookMark != null)
{
return bookMark;
}
}
//未找到,则返回null
return null;
}
/// <summary>
/// 向段落插入图片
/// </summary>
/// <param name="mDocX">文档</param>
/// <param name="mParagraph">段落</param>
/// <param name="strPicPath">图片路径</param>
/// <param name="nWidth">图片宽度</param>
/// <param name="nHeigth">图片高度</param>
/// <returns>插入是否成功</returns>
public bool InsertPicture(DocX mDocX, Paragraph mParagraph, string strPicPath, int nWidth = -1, int nHeigth = -1)
{
//如果图片文件不存在
if (!System.IO.File.Exists(strPicPath))
{
return false;
}
try
{
//添加图片
Novacode.Image pImag = mDocX.AddImage(strPicPath);
Picture pPicture = pImag.CreatePicture();
//如果传入宽度小于0,则以原始大小插入
if (nWidth >= 0)
{
pPicture.Width = nWidth;
}
//如果传入高度小于0,则以原始大小插入
if (nHeigth >= 0)
{
pPicture.Height = nHeigth;
}
//将图像插入到段落后面
mParagraph.InsertPicture(pPicture);
return true;
}
catch
{
return false;
}
}
#endregion
/// <summary>
/// 向书签插入图片
/// </summary>
/// <param name="mDocX">文档</param>
/// <param name="strMarkName">书签名称</param>
/// <param name="strPicPath">图片路径</param>
/// <param name="nWidth">设置宽度</param>
/// <param name="nHeigth">设置高度</param>
/// <returns>是否插入成功</returns>
public bool InsertPictureInBookMark(DocX mDocX, string strMarkName, string strPicPath,int nWidth = -1, int nHeigth = -1)
{
try
{
//遍历书签,找到指定的书签,插入字符
foreach (var paragraph in mDocX.Paragraphs)
{
//获得指定书签
var bookMark = get_BookMarkByName(mDocX, strMarkName);
//向书签插入图片
return InsertPicture(mDocX, bookMark.Paragraph, strPicPath, nWidth, nHeigth);
}
}
catch
{
return false;
}
return false;
}
/// <summary>
/// 根据书签名称获取书签
/// </summary>
/// <param name="mDocX">文档</param>
/// <param name="strMarkName">书签名称</param>
/// <returns></returns>
public Bookmark get_BookMarkByName(DocX mDocX, string strMarkName)
{
//遍历书签,找到指定的书签,插入字符
foreach (var paragraph in mDocX.Paragraphs)
{
//查找指定书签
var bookMark = paragraph.GetBookmarks().FirstOrDefault(x => x.Name == strMarkName);
if (bookMark != null)
{
return bookMark;
}
}
//未找到,则返回null
return null;
}
/// <summary>
/// 向段落插入图片
/// </summary>
/// <param name="mDocX">文档</param>
/// <param name="mParagraph">段落</param>
/// <param name="strPicPath">图片路径</param>
/// <param name="nWidth">图片宽度</param>
/// <param name="nHeigth">图片高度</param>
/// <returns>插入是否成功</returns>
public bool InsertPicture(DocX mDocX, Paragraph mParagraph, string strPicPath, int nWidth = -1, int nHeigth = -1)
{
//如果图片文件不存在
if (!System.IO.File.Exists(strPicPath))
{
return false;
}
try
{
//添加图片
Novacode.Image pImag = mDocX.AddImage(strPicPath);
Picture pPicture = pImag.CreatePicture();
//如果传入宽度小于0,则以原始大小插入
if (nWidth >= 0)
{
pPicture.Width = nWidth;
}
//如果传入高度小于0,则以原始大小插入
if (nHeigth >= 0)
{
pPicture.Height = nHeigth;
}
//将图像插入到段落后面
mParagraph.InsertPicture(pPicture);
return true;
}
catch
{
return false;
}
}
#endregion
下载
using (FileStream file = new FileStream(savePath, FileMode.Open))
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.AddHeader("content-length", new System.IO.FileInfo(savePath).Length.ToString());
byte[] bytes = new byte[(int)file.Length];
file.Read(bytes, 0, bytes.Length);
file.Close();
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.AddHeader("content-length", new System.IO.FileInfo(savePath).Length.ToString());
byte[] bytes = new byte[(int)file.Length];
file.Read(bytes, 0, bytes.Length);
file.Close();
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}