C#第三方Aspose.Words.dll导出Word(书签模板)方式说明

项目有遇到需要导出Word,在别人写好的基础上去修改样式,导出后发现样式不正确不整齐,于是采用模板的方式重新导出

1.模板word文件的制作,本人用office2013,在设计好需要的整个表格之后,在你需要替换的位置"插入"--书签 并命名,此命名需要在程序中进行替换

将做好的模板word文件放在程序目录下

2.引用Aspose.Words.dll

3.新建类WordOpAp.cs

  1  public class WordOpAp
  2     {
  3
  4         static public object syncseed = new object();
  5
  6         /// <summary>
  7         /// 导出Word
  8         /// </summary>
  9         private Document WordDoc;
 10         private bool isOpened = false;//判断word模版是否被占用
 11         public void SaveAs(string strFileName, bool isReplace)
 12         {
 13             if (isReplace && File.Exists(strFileName))
 14             {
 15                 File.Delete(strFileName);
 16             }
 17             WordDoc.Save(strFileName);
 18         }
 19
 20         //基于模版新建Word文件
 21         public void OpenTempelte(string strTemppath)
 22         {
 23             WordDoc = new Document(strTemppath);
 24
 25         }
 26         public void FillLable(string LabelId, string Content)
 27         {
 28
 29             //打开Word模版
 30             object bkmC = LabelId;
 31             if (WordDoc.Range.Bookmarks[LabelId] != null)
 32             {
 33                 WordDoc.Range.Bookmarks[LabelId].Text = Content;
 34             }
 35         }
 36         public void ResponseOut(string filename)
 37         {
 38             WordDoc.Save(System.Web.HttpContext.Current.Response, filename, ContentDisposition.Attachment, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
 39         }
 40
 41         public void OpenWebInline(string filename)
 42         {
 43
 44             WordDoc.Save(System.Web.HttpContext.Current.Response, filename, ContentDisposition.Inline, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
 45         }
 46
 47         /// <summary>
 48         /// 设置打开密码
 49         /// </summary>
 50         /// <param name="pwd"></param>
 51         public void SetPassword(string pwd)
 52         {
 53             WordDoc.Protect(ProtectionType.ReadOnly, pwd);
 54         }
 55
 56         /// <summary>
 57         /// 不可编辑受保护,需输入密码
 58         /// </summary>
 59         /// <param name="Password"></param>
 60         public void NoEdit(string Password)
 61         {
 62             WordDoc.Protect(ProtectionType.ReadOnly, Password);
 63         }
 64
 65         public void ExportWord(string fileName, string wordname)
 66         {
 67             //输出word
 68             System.IO.FileInfo file = new System.IO.FileInfo(fileName);
 69             System.Web.HttpContext.Current.Response.Clear();
 70             System.Web.HttpContext.Current.Response.Charset = "GB2312";
 71             System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
 72             // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
 73             System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(wordname, System.Text.Encoding.UTF8));
 74             // 添加头信息,指定文件大小,让浏览器能够显示下载进度
 75             System.Web.HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
 76             // 指定返回的是一个不能被客户端读取的流,必须被下载
 77             System.Web.HttpContext.Current.Response.ContentType = "application/ms-word";
 78             // 把文件流发送到客户端
 79             System.Web.HttpContext.Current.Response.WriteFile(file.FullName);
 80             // 停止页面的执行
 81             System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
 82
 83         }
 84
 85         public void ChangWordStyle(string markName, string content)
 86         {
 87             DocumentBuilder builder = new DocumentBuilder(this.WordDoc);
 88             builder.MoveToBookmark(markName);
 89             char[] chs = content.ToCharArray();
 90             int index = 0;
 91             while (true)
 92             {
 93                 if (index >= content.Length)
 94                 {
 95                     break;
 96                 }
 97                 if (chs[index] == ‘<‘)
 98                 {
 99                     if (content.Length > index + 3 && content.Substring(index + 1, 2).ToUpper() == "/P")
100                     {
101                         builder.Writeln();
102                     }
103                     else if (content.Length > index + 7 && content.Substring(index + 1, 6).ToUpper() == "STRONG")
104                     {
105                         builder.Font.Bold = true;
106                     }
107                     else if (content.Length > index + 8 && content.Substring(index + 1, 7).ToUpper() == "/STRONG")
108                     {
109                         builder.Font.Bold = false;
110                     }
111                     else if (content.Length > index + 5 && content.Substring(index + 1, 4).ToUpper() == "BR /")
112                     {
113                         builder.Writeln();
114                     }
115                     else if (content.Length > index + 3 && content.Substring(index + 1, 2).ToUpper() == "BR")
116                     {
117                         builder.Writeln();
118                     }
119                     index = content.IndexOf(">", index) + 1;
120
121                 }
122                 else
123                 {
124                     if (content.IndexOf("<", index) == -1)
125                     {
126                         string text = content.Substring(index);
127                         builder.Write(HttpUtility.HtmlDecode(text));
128                         index += text.Length;
129                     }
130                     else
131                     {
132                         string text = content.Substring(index, content.IndexOf("<", index) - index);
133                         builder.Write(HttpUtility.HtmlDecode(text));
134                         index += text.Length;
135                     }
136                 }
137             }
138
139         }
140
141     }

WordOpAp

4.导出word方法

  

 1  try
 2             {
 3
 4                 string path = Server.MapPath("../Generate/ExcelModel/"); //目录地址
 5                 string templatePath = path + "zxprint.doc";  //自己做好的word
 6                 wop.OpenTempelte(templatePath); //打开模板文件
 7                 //以下为添加内容到Word
 8                 ProjectSubmmit obj = (ProjectSubmmit)Session["ProjectSubmmit"];//此行是自己的实体层,用于获取数据
 9
10                 string FileName = "";
11                 if (obj != null)
12                 {
13                     FileName = string.Format("{0}.doc", obj.ProjectNo);
14                     wop.FillLable("ProjectNo", obj.ProjectNo); //替换word中指定书签的位置
15                     wop.FillLable("GroupNo", obj.Party_Index);
16                     wop.FillLable("CreateTime", obj.MeetingTime.ToString("yyyy年M月d日"));
17                     wop.ChangWordStyle("Description", obj.Description); //改变内容的格式,
18                 }
19                 wop.ResponseOut(FileName); //传入的是导出文档的文件名,导出文件
20             }
21             catch
22             {
23
24             }

5.附上一段清除html格式的方法

  

 1    public static string NoHTML(string Htmlstring)
 2         {
 3             if (Htmlstring.Length > 0)
 4             {
 5                 //删除脚本
 6                 Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
 7                 //删除HTML
 8                 Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
 9                 Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
10                 Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
11                 Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
12                 Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
13                 Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
14                 Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
15                 Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
16                 Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
17                 Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
18                 Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
19                 Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
20                 Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
21                 Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);
22                 Htmlstring = Regex.Replace(Htmlstring, @"&ldquo;", "\"", RegexOptions.IgnoreCase);//保留【 “ 】的标点符合
23                 Htmlstring = Regex.Replace(Htmlstring, @"&rdquo;", "\"", RegexOptions.IgnoreCase);//保留【 ” 】的标点符合
24                 Htmlstring.Replace("<", "");
25                 Htmlstring.Replace(">", "");
26                 Htmlstring.Replace("\r\n", "");
27                 Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
28             }
29             return Htmlstring;
30         }

  

时间: 2024-10-22 22:24:17

C#第三方Aspose.Words.dll导出Word(书签模板)方式说明的相关文章

利用Aspose.Words.dll导出Word代替NPOI

许久没来写博客了,已至于登录博客园的密码都忘却了. 时间过的真快,最近再做一个招聘管理系统,其中用到了导出Word文档的功能,尝试了各种方法,遇到了各种问题.不过最后还是解决了导出Word的问题. 一.针对导出Word文档的功能,采用的几个方案: 1.预置好Word文档模板,采用加载替换文档内容标签的方式实现.    采用这种方案可以借助两个第三方组件来实现,分别如下: (1).借助Microsoft.Office.Interop.Word组件实现.  (2).借助NPOI实现.  (3).借助

使用Aspose.Cell.dll导出Excel总结

这两天项目上用Aspose导出Excel来着.开始感觉挺简单的,但是实际操作起来还是挺复杂的,调试占的时间很长.主要是动态生成列.合并单元格.调样式占了很长时间,还是总结一下吧. 基础操作: //EXCEL模板路径 var filePath = HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.CurrentPackage.Settings["FilePath"]); //打开模板sheet

[百度空间] [原]DLL导出实例化的模板类

因为模板是在编译的时候根据模板参数实例化的,实例化之后就像一个普通的类(函数),这样才有对应的二进制代码;否则,没有模板参数,那么编译器就不知道怎么生成代码,所以生成的DLL就没有办法导出模板了.但是根据MSDN的描述,可以导出模板类的实例化后的代码(注意:这里不是指实例化模板类的一个对象),比如 template<typename T> class singleton,那么可以导出singleton<MyClass>或者其他已知类型的类代码.详见: http://support.

MFC DLL 导出函数的定义方式

一直在鼓捣DLL,每天的工作都是调试一个一个的DLL,往DLL里面添加自己的代码,但是对于DLL一直不太了解啊!今天一查资料,才发现自己对于DLL编写的一些基本知识也不了解.要学习,这篇文章先总结DLL的导出函数的方法. 1. 首先说一下如何建立一个普通的DLL工程!(以VS2008为例) New Project  -->  Win32 标签 --> 填写工程名称 -->  点 OK,进入创建 Widzard  -->  Next 进入第二步 -->  Application

C++ DLL导出的两种方式和链接的两种方式

第一种 导出方式 extern "C" _declspec(dllexport) int Plus(int x, int y); extern "C" _declspec(dllexport) int Sub(int x, int y); extern "C" _declspec(dllexport) int Mul(int x, int y); extern "C" _declspec(dllexport) int Div(

C# WinForm 导出导入Excel/Doc [使用Aspose.Cells.dll]

参考地址:http://blog.csdn.net/az44yao/article/details/7656074 private void DatatableToExcel(DataTable dgv, string Title) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Execl files (*.xls)|*.xls"; dlg.CheckFileExists = false; dlg.CheckPat

Aspose.Cells.dll引用导入导出Excel

Aspose.Cells 导入导出EXCEL 文章出处:http://hi.baidu.com/leilongbing/item/c11467e1819e5417595dd8c1 修改样式       Workbook workbook = new Workbook(); //工作簿 Worksheet sheet = workbook.Worksheets[0]; //工作表 Cells cells = sheet.Cells;//单元格 //样式2 Aspose.Cells.Style st

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

这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量导出word文档的,通过把文件打包成压缩包,以文件流的方式输出下载.aspose.word.dll最好使用最新版的,14.5或者更高,我使用的是14.5版本,页面是采用mvc的语法.在这里感谢赵某人为我提供的帮助.         首先制作好word模板,使用模板可以避免在代码中对word进行排版,方便简单.

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

aspose.word主要是通过把读取出来的数据放到datatable里,在datable里做相应的格式的调整,再导出到word文档里.mvc和webform最后导出的语句略有不同,在mvc的controller,用的是base.File,对应的是FileContentResult,在webform里用的是Response.写法分别为: //在WebForm中,保存文档到流中,使用Response. BinaryWrite输出该文件 var docStream = new MemoryStrea