接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用word,提交打印机,把word文档的内容都打印出来。 批量导出 ...
接下来是批量导出
word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用word,提交打印机,把word文档的内容都打印出来。
相关后台代码如下:
1 #region 压缩文件及文件夹 2 /// <summary> 3 /// 压缩文件及文件夹 4 /// </summary> 5 public class CompressFileZip 6 { 7 private ZipOutputStream zos = null; 8 private get='_blank'>string strBaseDir = ""; 9 10 #region 临时文件夹名称 11 /// <summary> 12 /// 临时文件夹名称 13 /// </summary> 14 /// <param name="name">学生名称</param> 15 /// <param name="value">学生卡号</param> 16 /// <returns></returns> 17 public string FolderName(string name, string value) 18 { 19 string tempName = ""; 20 if (!string.IsNullOrEmpty(name)) 21 { 22 tempName = name; 23 if (!string.IsNullOrEmpty(value)) 24 tempName += "_" + value; 25 tempName += "_" + DateTime.Now.ToString("yyyyMMddHHmm"); 26 } 27 else 28 { 29 tempName = DateTime.Now.ToString("yyyyMMddHHmmss"); //临时文件夹名称 30 } 31 return tempName; 32 } 33 #endregion 34 35 #region 创建临时文件夹 36 /// <summary> 37 /// 创建临时文件夹 38 /// </summary> 39 /// <param name="name">学生名称</param> 40 /// <param name="value">学生卡号</param> 41 /// <returns></returns> 42 public string CreateTempFolder(string name, string value = null) 43 { 44 //遍历服务器指定文件夹下的所有文件 45 string path = "UploadFile"; 46 string serverPath = WordFilePath.GetFilePath(path); 47 string tempName = ""; 48 if (!string.IsNullOrEmpty(value)) 49 tempName = FolderName(name, value); 50 else 51 tempName = name; 52 string tempFolder = Path.Combine(serverPath, tempName); 53 Directory.CreateDirectory(tempFolder); //创建临时文件夹 54 //DirectoryInfo folder = new DirectoryInfo(serverPath); 55 return tempFolder + "\\"; 56 } 57 #endregion 58 59 #region 添加文件到压缩文件中 60 /// <summary> 61 /// 添加文件到压缩文件中 62 /// </summary> 63 /// <param name="PathStr">路径</param> 64 public void addZipEntry(string PathStr) 65 { 66 DirectoryInfo di = new DirectoryInfo(PathStr); 67 foreach (DirectoryInfo item in di.GetDirectories()) 68 { 69 addZipEntry(item.FullName); 70 } 71 foreach (FileInfo item in di.GetFiles()) 72 { 73 FileStream fs = System.IO.File.OpenRead(item.FullName); 74 byte[] buffer = new byte[fs.Length]; 75 fs.Read(buffer, 0, buffer.Length); 76 string strEntryName = item.FullName.Replace(strBaseDir, ""); 77 ZipEntry entry = new ZipEntry(strEntryName); 78 zos.PutNextEntry(entry); 79 zos.Write(buffer, 0, buffer.Length); 80 fs.Close(); 81 } 82 } 83 #endregion 84 85 #region 输出下载压缩包 86 /// <summary> 87 /// 输出下载压缩包 88 /// </summary> 89 /// <param name="response">页面响应</param> 90 /// <param name="strPath">文件所在的路径</param> 91 /// <param name="strFileName">压缩文件名</param> 92 /// <param name="strExt">压缩文件的扩展名</param> 93 public void dlZipDir(HttpResponseBase response, string strPath, string strFileName, string strExt = null) 94 { 95 if (string.IsNullOrEmpty(strExt)) 96 strExt = ".zip"; //默认压缩文件扩展名 97 MemoryStream ms = null; 98 response.ContentType = "application/octet-stream"; 99 strFileName = HttpUtility.UrlEncode(strFileName).Replace('+', ' ');100 response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName + strExt);101 ms = new MemoryStream();102 zos = new ZipOutputStream(ms);103 strBaseDir = strPath + "\\";104 addZipEntry(strBaseDir);105 zos.Finish();106 zos.Close();107 response.Clear();108 response.BinaryWrite(ms.ToArray());109 //删除临时目录下的所有文件110 DeleteTempFiles(strPath);111 //删除空目录112 Directory.Delete(strPath);113 response.End();114 }115 #endregion116 117 #region 保存文件到临时文件夹中118 /// <summary>119 /// 保存文件到临时文件夹中120 /// </summary>121 /// <param name="content">将流内容写入字节组</param>122 /// <param name="SaveName">保存的文件名</param>123 /// /// <param name="dirPath">保存路径</param>124 /// <param name="fileExtend">保存的文件扩展名</param>125 /// <returns></returns>126 public void SaveFile(byte[] content, string SaveName, string dirPath, string fileExtend = null)127 {128 129 if (string.IsNullOrEmpty(fileExtend))130 fileExtend = ".doc"; //文件扩展名默认是word文档131 try132 {133 DateTime dt = DateTime.Now;134 //设置文件夹路径135 //directory = CreateTempFolder(strName, strCode);136 //文件保存完整路径137 string path = dirPath + SaveName + fileExtend;138 //验证文件夹是否存在 不存在则创建139 if (!Directory.Exists(dirPath))140 {141 Directory.CreateDirectory(dirPath);142 }143 //以创建文件的方式写入内容144 FileStream fs = new FileStream(path, FileMode.CreateNew, FileAccess.Write);145 BinaryWriter w = new BinaryWriter(fs);146 w.Write(content);147 w.Close();148 fs.Close();149 }150 catch (Exception ex)151 {152 throw new System.IO.FileNotFoundException("目录:" + dirPath + "没有找到!");153 }154 }155 #endregion156 157 #region 删除临时目录下的所有文件158 /// <summary>159 /// 删除临时目录下的所有文件160 /// </summary>161 /// <param name="tempPath">临时目录路径</param>162 private void DeleteTempFiles(string tempPath)163 {164 DirectoryInfo directory = new DirectoryInfo(tempPath);165 try166 {167 foreach (FileInfo file in directory.GetFiles())168 {169 if (file.Attributes.ToString().IndexOf("ReadOnly") != -1)170 {171 file.Attributes = FileAttributes.Normal;172 }173 System.IO.File.Delete(file.FullName);174 }175 }176 catch (Exception)177 {178 throw;179 }180 }181 #endregion182 183 #region 获取指定文件夹下的所有文件184 /// <summary>185 /// 获取指定文件夹下的所有文件186 /// </summary>187 /// <param name="Folder">文件夹名称</param>188 /// <param name="strName">文件夹下所包含指定文件名的文件</param>189 /// <returns></returns>190 public List<string> GetFileList(string Folder, string strName = null)191 {192 List<string> lsFile = new List<string>();193 if (!string.IsNullOrEmpty(Folder))194 {195 Folder = WordFilePath.GetFilePath("UploadFile", Folder + "\\");196 DirectoryInfo di = new DirectoryInfo(Folder);197 foreach (FileInfo item in di.GetFiles())198 {199 if (!string.IsNullOrEmpty(strName))200 {201 if (item.FullName.Contains(strName))202 lsFile.Add(item.FullName);203 }204 else205 lsFile.Add(item.FullName);206 }207 }208 return lsFile;209 } 210 #endregion211 212 }213 #endregion 214 215 #region 插入文档216 public class InsertFile217 {218 #region 在书签位置插入另一个文档的内容219 /// <summary>220 /// 使用DocumentBuilder对象插入一些文档对象,如插入书签,插入文本框,插入复选框221 /// 插入一个段落,插入空白页,追加或另一个word文件的内容等。222 /// </summary>223 /// <param name="doc">载入模板</param>224 /// <param name="tempFile"></param>225 /// <param name="mark">载入模版名称</param>226 /// <param name="lsFile"></param>227 public static void InsertDoc(Document doc, string mark, List<string> lsFile, string SaveName = null)228 {229 string savePath = "";230 var builder = new DocumentBuilder(doc);231 if (!string.IsNullOrEmpty(SaveName))232 SaveName = SaveName.Substring(0, SaveName.LastIndexOf("_"));233 Document doc1;234 for (int i = 0; i < lsFile.Count; i++)235 {236 if (i == 0)237 savePath = lsFile[i].Substring(0, lsFile[i].LastIndexOf('\\') + 1);238 doc1 = new Document(lsFile[i]);//新文档239 var bookmark = doc.Range.Bookmarks[mark];240 //清空书签的文本241 //bookmark.Text = "";242 //定位到指定位置进行插入操作243 builder.MoveToBookmark(mark, false, false);244 InsertDocument(bookmark.BookmarkStart.ParentNode, doc1);245 //doc.FirstSection.PageSetup.SectionStart = SectionStart.NewPage;246 //doc1.AppendDocument(doc, ImportFormatMode.KeepSourceFormatting);247 248 System.IO.File.Delete(lsFile[i]); //删除已经插入的文件 249 }250 if (!string.IsNullOrEmpty(SaveName))251 doc.Save(savePath + SaveName + ".doc");252 }253 #endregion254 255 #region 插入文档256 /// <summary>257 /// 插入文档258 /// </summary>259 /// <param name="insertAfterNode">节点在目标文件中的内容后插入。这个节点应该是一个块级节点(段落或表格)。</param>260 /// <param name="srcDoc">插入文档</param>261 private static void InsertDocument(Node insertAfterNode, Document srcDoc)262 {263 // 确保插入点是一个段落或表格。264 if ((!insertAfterNode.NodeType.Equals(NodeType.Paragraph)) &265 (!insertAfterNode.NodeType.Equals(NodeType.Table)))266 throw new ArgumentException("插入的目的节点应该是一个段落或表格。");267 268 // 插入到目标段落269 CompositeNode dstStory = insertAfterNode.ParentNode;270 NodeImporter importer = new NodeImporter(srcDoc, insertAfterNode.Document, ImportFormatMode.KeepSourceFormatting);271 272 //在源文件中循环273 foreach (Section srcSection in srcDoc.Sections)274 {275 foreach (Node srcNode in srcSection.Body)276 {277 // 跳过空节点278 if (srcNode.NodeType.Equals(NodeType.Paragraph))279 {280 Paragraph para = (Paragraph)srcNode;281 if (para.IsEndOfSection && !para.HasChildNodes)282 continue;283 }284 // 插入到目标文档285 Node newNode = importer.ImportNode(srcNode, true);286 // 参考节点后插入新节点287 dstStory.InsertAfter(newNode, insertAfterNode);288 insertAfterNode = newNode;289 }290 }291 }292 #endregion293 }294 #endregion
同一人的首先生成单个文件
循环生成 下一个人的单个文档
打印的效果如下图: 将所有人的有关文档都生成单个文件
原标题:C# 导出word文档及批量导出word文档(4)
关键词:C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。