利用Aspose.Words打印word文档

          Aspose.Words是一款先进的类库,可以直接在各个应用程序中执行各种文档处理,即使在没有Microsoft word

的情况下,仍然可以生成,更改,转换,渲染和打印word文档,并且支持DOC,PDF等其他格式。

         下面就以  Aspose.Words如何实现打印word文档为例做一个小demo。

1·制作word模板

      在word模板中,在需要插入的地方选择插入--文档部件--域--域名是MergeField--域名是字段名,例如name,点击确定即可。

利用Aspose.Words打印word文档_第1张图片

效果图如下:

利用Aspose.Words打印word文档_第2张图片

2 实现代码:

        由于我是加入MVC框架的,所以在controller中接收的是来自view的实体,不用再经过数据库查找相应的数据,如果在纯三层或几层中实现,直接调用D层,通过D层访问数据库获得即可。

        简单一句话来说,就是一个赋参数的一个过程,然后直接调用该类库下的方法即可。方法有很多,具体的可以参考Aspose.Word的API文档。

      

#region 初婚未育调查报告 +  void FirstMarriageReport(FamilyPlanInfoViewModel enFamilyInfo)   贾丽敏  2015/9/3
        /// <summary>
        /// 初婚未育调查报告
        /// </summary>
        /// <param name="enFamilyInfo">FamilyPlanInfoViewModel</param>
        public void FirstMarriageReport(FamilyPlanInfoViewModel enFamilyInfo)
        {

            if (Session["userID"] != null)//判断登陆时用户ID是否为空,为空则跳转登陆页面
            {
                //获取模板的路径
                var path = Server.MapPath("../Document/2初婚未育调查报告.doc");
                #region 初婚未育调查报告中各参数赋值
                string strUserID = Session["userID"].ToString();
                while (strUserID.Length < 4)
                {
                    strUserID = "0" + strUserID;
                }
                //获取信函编号
                string strCardNo = numberInfo.GetNumber();
                while (strCardNo.Length < 4)
                {
                    strCardNo = "0" + strCardNo;
                }
                //获取documentID参数
                string strDocumentID = "LFRC" + strUserID + "No." + strCardNo;
                //赋值
                string name = enFamilyInfo.name;//姓名
                string sex = enFamilyInfo.sex;//性别
                string spouseWorkplace = enFamilyInfo.spouseworkplace;//配偶工作地
                string spousename = enFamilyInfo.spousename;//配偶姓名
                string year, month, date;
                if (enFamilyInfo.idNumber == null)
                {
                    year = "";
                    month = "";
                    date = "";
                }
                else
                {
                    year = enFamilyInfo.idNumber.Substring(6, 4);//出生年份
                    month = enFamilyInfo.idNumber.Substring(10, 2);//出生月份
                    date = enFamilyInfo.idNumber.Substring(12, 2);//出生日
                }

                string marryyear, marrymonth, marrydate;
                if (enFamilyInfo.marriageregistrationdate1 == null)
                {
                    marryyear = "";//结婚登记年份
                    marrymonth = " ";//结婚登记月份
                    marrydate = " ";//结婚登记日
                }
                else
                {
                    marryyear = enFamilyInfo.marriageregistrationdate1.Substring(0, 4);
                    marrymonth = enFamilyInfo.marriageregistrationdate1.Substring(5, 1);
                    marrydate = enFamilyInfo.marriageregistrationdate1.Substring(7, 2);

                }
                #endregion
                string fileName = "初婚未育调查报告.doc";
                //获取模板中设定好的字段
                String[] fieldNames = new String[] { "documentID", "name", "sex", "year", "month", "date", "marryyear", "marrymonth", "marrydate", "spouseworkplace", "spousename" };
                //给模版中参数赋值
                Object[] fieldValues = new Object[] { strDocumentID, name, sex, year, month, date, marryyear, marrymonth, marrydate, spouseWorkplace, spousename };
                Print(path, fileName, fieldNames, fieldValues);//调用封装好的print方法,在下方。

              
            }
            else
            { //跳转到登陆界面
                this.Response.Write("<script type='text/javascript'> goIndex(); function goIndex(){window.location.href='../Login/Login';}</script>");
            }
        }
        #endregion

封装好的print方法:

#region 封装信函打印 +  void Print(string path, String[] fieldNames, Object[] fieldValues)  贾丽敏 2015/9/3
        /// <summary>
        /// 封装信函打印
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="fieldNames">参数数组</param>
        /// <param name="fieldValues">参数值数组</param>
        public void Print(string path, string fileName, String[] fieldNames, Object[] fieldValues)
        {
            //string fileName = path.Substring(path.LastIndexOf("\\") + 1);//获取文件名
            var ouputPath = Server.MapPath("../Document/");
            Document doc = new Document(path);

            //合并模版,相当于页面的渲染
            doc.MailMerge.Execute(fieldNames, fieldValues);
            ouputPath = ouputPath + fileName;
            //保存合并后的文档,生成的文档存放到服务器硬盘上
            doc.Save(ouputPath);
            //通过response对象,执行下载操作
            System.IO.FileInfo file = new System.IO.FileInfo(ouputPath);
            if (file.Exists)//判断文件是否存在
            {
                Response.Clear();
                Response.ClearHeaders();
                Response.Buffer = false;
                Response.AddHeader("content-disposition", "attachment;filename=" + file.Name);
                Response.AddHeader("cintent_length", "attachment;filename=" + HttpUtility.UrlDecode(file.Name));
                Response.AddHeader("cintent_length", file.Length.ToString());
                //设定输入文件的类型
                Response.ContentType = "application.vnd.ms-word";
                Response.WriteFile(file.FullName);
                Response.Flush();
                Response.End();
                //从服务器硬盘中删除刚生成的Word文件
                System.IO.File.Delete(ouputPath);
            }
        }
        #endregion
      最后效果图如下:

利用Aspose.Words打印word文档_第3张图片

        实现word打印的方式不仅仅是这一种,这只是其中的一个demo而已,最好的了解方式就是Aspose.Words的api文档。而且这一点需求在实际业务用处很大。




你可能感兴趣的:(api,word,文档,aspose.words,打印word)