DocX.dll(无需安装OFFICE操作word文档)

先制作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
              //表格
              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"));
                }
                        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

下载
  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();
                    }

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值