给web添加一个dll引用:Apose.Words
下载链接:http://yunpan.cn/cA7v6uceM6KVw 提取码 11df
在Global.asax里面的Application_Start方法添加:
License lic = new License(); string licPath = HttpContext.Current.Server.MapPath("/Plugs/Aspose.Words.lic"); lic.SetLicense(licPath);
添加完成后,会报错,把里面的应用换成
using Aspose.Words; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState;
在Web下面添加一个文件夹Plugs,里面有两个文件:
http://yunpan.cn/cfQ6H5VJ7w8DC 提取码 ef95
设置一个按钮:
<input type="button" name="button" id="Report" value="批量打印" />
给按钮绑定事件:
$("#Report").click(function () { window.open("../../Apose/StudentInfo.aspx?studentType=" + $("#selStudentType").val() + "&schoolCode=" + $("#selSchool").val() + "&district=" + $("#selDistrict").val()); });
StudentInfo.aspx 页面就是导出的页面了,后台代码:
protected void Page_Load(object sender, EventArgs e) { string schoolCode = Request.QueryString["schoolCode"].ToString(); string studentType = Request.QueryString["studentType"].ToString(); string district = Request.QueryString["district"].ToString(); print(schoolCode, studentType, district); } DataTable getDs(string schoolCode, string studentType, string district) { string strWhere = " 1=1"; if (!string.IsNullOrEmpty(studentType)) { strWhere += " and TypeCode='" + studentType + "'"; Session["TypeCode"] = studentType; } if (!string.IsNullOrEmpty(schoolCode)) { strWhere += " and PrimarySchoolCode ='" + schoolCode + "'"; } if (!string.IsNullOrEmpty(district)) { strWhere += " and DistrictCode='" + district + "'"; } DataTable dt = new BLL.ObjMethod().GetList("View_CryStudent", strWhere); return dt; } protected void print(string schoolCode, string studentType, string district) { Document doc = new Document(); DocumentBuilder docBuilder = new DocumentBuilder(doc); Document src = null; var dt = getDs(schoolCode, studentType, district); int count = dt.Rows.Count; show.Text = "预备打印学生数量为:"+count; DataRow dr; for (int i = 0; i < dt.Rows.Count; i++) { dr = dt.Rows[i]; if (dr["TypeCode"].ToString() == "10000") { src = new Document(Server.MapPath("/files/1.doc")); } if (dr["TypeCode"].ToString() == "10001") { src = new Document(Server.MapPath("/files/10.doc")); } src.Range.Replace("<Ф1Ф>", dr["Name"].ToString(), false, false); src.Range.Replace("<Ф2Ф>", dr["SexCode"].ToString(), false, false); src.Range.Replace("<Ф3Ф>", dr["Birthday2"].ToString(), false, false); src.Range.Replace("<Ф4Ф>", dr["Nation"].ToString(), false, false); src.Range.Replace("<Ф5Ф>", dr["EduId"].ToString(), false, false); src.Range.Replace("<Ф6Ф>", dr["RollId"].ToString(), false, false); src.Range.Replace("<Ф7Ф>", dr["CardID"].ToString(), false, false); src.Range.Replace("<Ф8Ф>", dr["HuKouName"].ToString() + dr["HukouAddress"].ToString(), false, false); src.Range.Replace("<Ф9Ф>", dr["HuZhuName"].ToString(), false, false); src.Range.Replace("<Ф10Ф>", dr["HuZhuRelationName"].ToString(), false, false); src.Range.Replace("<Ф11Ф>", dr["IsAllFamilyIn"].ToString(), false, false); string relation = dr["IsAllFamilyIn"].ToString(); if (relation == "父户口同在") { src.Range.Replace("<Ф12Ф>", dr["Father"].ToString(), false, false); } else if (relation == "母户口同在") { src.Range.Replace("<Ф12Ф>", dr["Mother"].ToString(), false, false); } else if (relation == "父母户口同在") { src.Range.Replace("<Ф12Ф>", dr["Father"].ToString() + "," + dr["Mother"].ToString(), false, false); } else { src.Range.Replace("<Ф12Ф>","", false, false); } src.Range.Replace("<Ф13Ф>", dr["HouseQuXianAddressName"].ToString() + dr["HouseAddress"].ToString(), false, false); src.Range.Replace("<Ф14Ф>", dr["HouseOwnerName"].ToString(), false, false); src.Range.Replace("<Ф15Ф>", dr["HouseOwnerRelationName"].ToString(), false, false); src.Range.Replace("<Ф16Ф>", dr["HouseOwnerCardID"].ToString(), false, false); src.Range.Replace("<Ф17Ф>", dr["Tenantry"].ToString(), false, false); src.Range.Replace("<Ф18Ф>", dr["GuardianName1"].ToString(), false, false); src.Range.Replace("<Ф19Ф>", dr["GuardianRelationName1"].ToString(), false, false); src.Range.Replace("<Ф20Ф>", dr["GuardianZhengZhi1"].ToString(), false, false); src.Range.Replace("<Ф21Ф>", dr["GuardianEduCode1"].ToString(), false, false); src.Range.Replace("<Ф22Ф>", dr["GuardianCompany1"].ToString(), false, false); src.Range.Replace("<Ф23Ф>", dr["GuardianTelephone1"].ToString(), false, false); src.Range.Replace("<Ф24Ф>", dr["GuardianName2"].ToString(), false, false); src.Range.Replace("<Ф25Ф>", dr["GuardianRelationName2"].ToString(), false, false); src.Range.Replace("<Ф26Ф>", dr["GuardianZhengZhi2"].ToString(), false, false); src.Range.Replace("<Ф27Ф>", dr["GuardianEduCode2"].ToString(), false, false); src.Range.Replace("<Ф28Ф>", dr["GuardianCompany2"].ToString(), false, false); src.Range.Replace("<Ф29Ф>", dr["GuardianTelephone2"].ToString(), false, false); src.Range.Replace("<Ф30Ф>", dr["xh"].ToString(), false, false); src.Range.Replace("<Ф31Ф>", dr["Name"].ToString(), false, false); src.Range.Replace("<Ф32Ф>", dr["TiJiaoNumber"].ToString(), false, false); src.Range.Replace("<Ф33Ф>", dr["PrimarySchoolName"].ToString(), false, false); if (dr["TypeCode"].ToString() == "10001") { src.Range.Replace("<Ф34Ф>", dr["JieDuTypeName"].ToString(), false, false); } InsertDocument(doc.LastSection.Body.LastParagraph, src); docBuilder.MoveToDocumentEnd(); docBuilder.InsertBreak(BreakType.PageBreak); jindu.Text = "已经准备学生数量:"+(i+1); } // string path = "/files/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".pdf"; string path = "/files/" + "啊啊啊" + ".pdf"; doc.Save(Server.MapPath(path), SaveFormat.Pdf); download(path); msg.InnerHtml = "<a href=\""+ path +"\">如果您没有正常打开文件,请点击这里</a>"; } /// <summary> /// Inserts content of the external document after the specified node. /// Section breaks and section formatting of the inserted document are ignored. /// </summary> /// <param name="insertAfterNode">Node in the destination document after which the content /// should be inserted. This node should be a block level node (paragraph or table).</param> /// <param name="srcDoc">The document to insert.</param> static void InsertDocument(Node insertAfterNode, Document srcDoc) { // Make sure that the node is either a paragraph or table. if ((!insertAfterNode.NodeType.Equals(NodeType.Paragraph)) & (!insertAfterNode.NodeType.Equals(NodeType.Table))) throw new ArgumentException("The destination node should be either a paragraph or table."); // We will be inserting into the parent of the destination paragraph. CompositeNode dstStory = insertAfterNode.ParentNode; // This object will be translating styles and lists during the import. NodeImporter importer = new NodeImporter(srcDoc, insertAfterNode.Document, ImportFormatMode.KeepSourceFormatting); // Loop through all sections in the source document. foreach (Section srcSection in srcDoc.Sections) { // Loop through all block level nodes (paragraphs and tables) in the body of the section. foreach (Node srcNode in srcSection.Body) { // Let's skip the node if it is a last empty paragraph in a section. if (srcNode.NodeType.Equals(NodeType.Paragraph)) { Paragraph para = (Paragraph)srcNode; if (para.IsEndOfSection && !para.HasChildNodes) continue; } // This creates a clone of the node, suitable for insertion into the destination document. Node newNode = importer.ImportNode(srcNode, true); // Insert new node after the reference node. dstStory.InsertAfter(newNode, insertAfterNode); insertAfterNode = newNode; } } } private void download(string filePath) { Response.Redirect(filePath); } //private void download(string filePath) //{ // #region default value // //查看方式,作为附件下载还是在浏览器中打开。默认为附件下载。浏览器中打开:viewType="inline"; // string viewType = "attachment"; // //下载完成是否删除,默认不删除。 // bool toDelete = false; // //内容类型,不同文件格式的内容类型不同。 // string contentType = "application/pdf"; // //文件保存时的默认名称。 // string fileName = "print.pdf"; // //要下载的文件 // //string filePath = "/files/student.docx"; // #endregion // //#region Reset value // //HttpRequest httpRequest = HttpContext.Current.Request; // //if (!string.IsNullOrEmpty(httpRequest["viewType"])) // // viewType = httpRequest["viewType"]; // //if (!string.IsNullOrEmpty(httpRequest["toDelete"])) // // toDelete = httpRequest["toDelete"].ToLower() == "true"; // //if (!string.IsNullOrEmpty(httpRequest["filePath"])) // // filePath = httpRequest["filePath"]; // //if (!string.IsNullOrEmpty(httpRequest["fileName"])) // // fileName = httpRequest["fileName"]; // //if (!string.IsNullOrEmpty(httpRequest["contentType"])) // // contentType = httpRequest["contentType"]; // //#endregion // filePath = HttpContext.Current.Server.MapPath(filePath); // Stream fileStream = null; // bool fileExsits = File.Exists(filePath); // if (fileExsits) // fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); // else // return; // HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); // HttpContext.Current.Response.BufferOutput = false; // fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8).Replace('+', ' '); // HttpContext.Current.Response.Clear(); // HttpContext.Current.Response.AppendHeader("Content-Disposition", string.Format("{0};filename=\"{1}\"", viewType, fileName)); // HttpContext.Current.Response.AddHeader("Content-Length", fileStream.Length.ToString()); // HttpContext.Current.Response.ContentType = contentType; // try // { // long dataToRead = fileStream.Length; // byte[] buffer; // const int buffSize = 1024 * 16; // int length = 0; // while (dataToRead > 0) // { // if (HttpContext.Current.Response.IsClientConnected) // { // buffer = new Byte[buffSize]; // length = fileStream.Read(buffer, 0, buffSize); // HttpContext.Current.Response.OutputStream.Write(buffer, 0, length); // dataToRead = dataToRead - length; // } // else // { // dataToRead = -1; // } // } // } // finally // { // fileStream.Close(); // fileStream.Dispose(); // if (toDelete) // { // //new FileInfo(filePath).Attributes = FileAttributes.Normal; // File.Delete(filePath); // } // } // HttpContext.Current.Response.End(); //}
word截图: