你的位置:首页 > 软件开发 > ASP.net > C# 导出word文档及批量导出word文档(4)

C# 导出word文档及批量导出word文档(4)

发布时间:2015-06-28 00:00:22
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用word,提交打印机,把word文档的内容都打印出来。 批量导出 ...
      接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用word,提交打印机,把word文档的内容都打印出来。

     相关后台代码如下: 

C# 导出word文档及批量导出word文档(4)C# 导出word文档及批量导出word文档(4)
 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# 导出word文档及批量导出word文档(4)C# 导出word文档及批量导出word文档(4)    C# 导出word文档及批量导出word文档(4)

       打印的效果如下图:         将所有人的有关文档都生成单个文件 

C# 导出word文档及批量导出word文档(4)

原标题:C# 导出word文档及批量导出word文档(4)

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录