zoukankan      html  css  js  c++  java
  • .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。

  • 相关阅读:
    Vertica 业务用户指定资源池加载数据
    Vertica 数据库知识汇总篇
    Oracle OCP 1Z0-053 Exam Topics
    Oracle 11gR2 RAC修改监听默认端口
    Oracle 11.2.0.4 RAC安装最新PSU补丁
    Openfiler配置RAC共享存储
    ORACLE 11gR2 DG(Physical Standby)日常维护01
    oracle 存储过程 返回结果集
    exception javax.crypto.BadPaddingException: Given final block not properly padded
    plsql 连接oracle数据库的2种方式
  • 原文地址:https://www.cnblogs.com/jixiaosa/p/10322364.html
Copyright © 2011-2022 走看看