.Net MVC+NPOI实现下载自定义的Word文档
下载文件的功能(图片、word文档等)
技术点:MVC、NPOI、Form表单。
1. 引入NPOI的Nuget包,这个相信道友们都不陌生。
2.添加控制器及方法
public class DownloadController : Controller { // GET: Download public ActionResult Index() { return View(); } /// <summary> /// 下载Word /// </summary> /// <returns></returns> public ActionResult ExportWord() { return View(); } }
3.修改ExportWord方法
public ActionResult ExportWord() { // 创建流 MemoryStream ms = new MemoryStream(); // 创建文档对象 XWPFDocument m_Docx = new XWPFDocument(); // 设置页边距 CT_SectPr sectPr = new CT_SectPr(); sectPr.pgMar = new CT_PageMar(); sectPr.pgMar.bottom = "1443"; sectPr.pgMar.top = "1443"; sectPr.pgMar.left = 1801; sectPr.pgMar.right = 1801; m_Docx.Document.body.sectPr = sectPr; //创建段落 XWPFParagraph p1 = m_Docx.CreateParagraph(); p1.Alignment = ParagraphAlignment.CENTER; // 该段落的文字以及样式 XWPFRun runTitle = p1.CreateRun(); runTitle.IsBold = true; runTitle.SetText("下载Word"); runTitle.FontSize = 18; runTitle.SetFontFamily("仿宋", FontCharRange.None);// 字体设置 XWPFParagraph p2 = m_Docx.CreateParagraph(); // 段落格式居中 p2.Alignment = ParagraphAlignment.CENTER; XWPFRun runTitle2 = p2.CreateRun(); runTitle2.FontSize = 18; XWPFParagraph p3 = m_Docx.CreateParagraph(); p3.Alignment = ParagraphAlignment.LEFT; XWPFRun runTitle3 = p3.CreateRun(); runTitle3.IsBold = false; runTitle3.SetText("这里可以写我们文档中的内容,比如数据库中的数据之类的。"); runTitle3.FontSize = 16; runTitle3.SetFontFamily("仿宋", FontCharRange.None);//设置雅黑字体 XWPFParagraph p5 = m_Docx.CreateParagraph(); p5.Alignment = ParagraphAlignment.RIGHT; XWPFRun runTitle5 = p5.CreateRun(); runTitle5.SetText("正所谓死道友莫死贫道"); runTitle5.FontSize = 16; runTitle5.SetFontFamily("仿宋", FontCharRange.None); // 将创建好的文档对象写入流 m_Docx.Write(ms); ms.Flush(); // 将流内容写入字节数据 byte[] data = ms.ToArray(); // 指定文件内容,类型以及文件名并返回 return File(data, "application/octet-stream", "自定义Word.docx"); }
4.创建下载页面
现在后台方法有了,我们还需要一个页面来触发这个方法。创建控制器的时候有一个默认的Index方法,贫道在这里就用它了。
添加完视图之后,修改里面的代码,创建一个表单,一个sumbit按钮,嗯。贫道就用这提交表单的方式来触发ExportWord方法。
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <form method="post" action="/Download/ExportWord" target="_blank"> <input type="submit" value="下载Word" /> </form> </div> </body> </html>
打开页面之后就是这个样子,虽然有点Low。。。但是贫道只是起了一个演示作用,就无所谓了。
点一下,处罚后台的方法,然后下载文件。 浏览器底部已显示下载完成。
打开这个Word 看看内容是不是和我们在后台写一样
完美收功!最后放一张gif。