利用Aspose.Words.dll导出Word代替NPOI
许久没来写博客了,已至于登录博客园的密码都忘却了。
时间过的真快,最近再做一个招聘管理系统,其中用到了导出Word文档的功能,尝试了各种方法,遇到了各种问题。不过最后还是解决了导出Word的问题。
一、针对导出Word文档的功能,采用的几个方案:
1.预置好Word文档模板,采用加载替换文档内容标签的方式实现。
采用这种方案可以借助两个第三方组件来实现,分别如下:
(1)、借助Microsoft.Office.Interop.Word组件实现。
(2)、借助NPOI实现。
(3)、借助Aspose.Words实现。
2.绘制方案,即利用第三方组件现实Word文件的绘制。
绘制方案的难点如下:
(1)、段落、表格的处理。
(2)、样式的处理。
二、实现
方案选择:最终权衡利弊,还是采用替换的方式更为合理,由于导出功能的使用量并不大,而且并发导出的情况也极少发生。所以在可行性方面,该方案可行。
1.首先采用的是借助Microsoft.Office.Interop.Word组件实现。
采用此方案实现的相关代码网上有很多很多,大家可以搜下。利用此方法我实现了替换导出,但是问题来了,由于服务器上由于盗版审查,不允许安装盗版软件,而且Microsoft.Office.Interop.Word是需要在服务器上安装Office的,所以被系统管理员Pass,经多方沟通后,还是不允许安装。无奈只能另想办法。
2.借NPOI实现。
NPOI是开源的框架,免费,但是由于对.net开发来说,NPOI对Excel的支持那是相当的强大的,唯独对Word的支持还不是那么强大,而且最新NPOI2.1的说明文档和案例又少之又少。不过还是硬着头皮利用NPOI分别实现了下模板标签替换和word绘制,最终都以失败告终。替换后导出的word怎么也打不找,提示错误。绘制的方法成功的导出的Word,但是样式实在是整不了。
3.借助Aspose.Words实现
在经过上述尝试和实现后,思维陷入了崩溃的境地,好在同事提醒,说有个Aspose.Words可以一试。查了下Aspose.Words,发现了收费的,可然在还是有破解版的。考虑到是内部用的,而且不是商业用途,所以试着实现了下。
利用Aspose.Words实现官网上有相关的案例,支持各种输出。大家可以百度下。
我这里要强调的是模板的制做,我采用的是替换 “文档部件”来实现的。
具体操作见图:
(1).模板制做
插入文档部件,仔细看,你会在图的最右侧看到 “文档部件”
选择“域”项
域名选择“MergeField”
域名置为"UserName"。
上图就是模板的效果,当然,你可以自己美化和调整,到此我们的模板就制做完成了,接下来就是写程序执行替换了。
(2).替换
private void ExportByAsPose(string vouchId) { try { //模板路径 string tempPath = ConfigurationManager.AppSettings["RmaApplyTemplate"]; string outputPath = "D:/招聘需求申请表.doc"; var doc = new Document(tempPath); //载入模板 //提供数据源 String[] fieldNames = new String[] { "UserName" }; Object[] fieldValues = new Object[] { "Jerry" }; //合并模版,相当于页面的渲染 doc.MailMerge.Execute(fieldNames, fieldValues); //保存合并后的文档 //doc.Save(outputPath); //在WebForm中,保存文档到流中,使用Response. BinaryWrite输出该文件 var docStream = new MemoryStream(); doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc)); Response.ContentType = "application/msword"; Response.AddHeader("content-disposition", "attachment; filename=招聘需求申请表.doc"); Response.BinaryWrite(docStream.ToArray()); Response.End(); //File.Delete("D:/招聘需求申请表.docx"); //清除服务端生成的word文件 } catch (Exception e) { Response.Write(e.Message + " 请联系管理员!"); } }
好了,到此完成了Word文档的导出。 给自己留个印象,特此小记。
希望对大家有所帮助。