前言

  在上一篇番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能。

回顾

  1. 获取swagger接口文档的json文件

  2. 解析json文件数据填充到html的表格中

  3.根据生成的html转work文档

功能

 

开始

 根据生成的html转work文档

        /// <summary>
        /// 静态页面转文件
        /// </summary>
        /// <param name="html">静态页面html</param>
        /// <param name="type">文件类型</param>
        /// <param name="contenttype">上下文类型</param>
        /// <returns></returns>
        public stream swaggerconvershtml(string html, string type, out string contenttype)
        {
            string filename = guid.newguid().tostring() + type;
            //文件存放路径
            string webrootpath = _hostingenvironment.webrootpath;
            string path = webrootpath + @"\files\tempfiles\";
            var addrurl = path + $"{filename}";
            filestream filestream = null;
            var provider = new fileextensioncontenttypeprovider();
            contenttype = provider.mappings[type];
            try
            {
                if (!directory.exists(path))
                {
                    directory.createdirectory(path);
                }
                var data = encoding.default.getbytes(html);
                var stream = bytehelper.bytestostream(data);
                //创建document实例
                document document = new document();
                //加载html文档
                document.loadfromstream(stream, fileformat.html, xhtmlvalidationtype.none);

                switch (type)
                {
                    case ".docx":
                        document.savetofile(addrurl, fileformat.docx);
                        break;
                    case ".pdf":
                        document.savetofile(addrurl, fileformat.pdf);
                        break;
                    case ".html":
                        //document.savetofile(addrurl, fileformat.html);
                        //当然了,html 如果不用spire,也可以直接生成
                        filestream fs = new filestream(addrurl, filemode.append, fileaccess.write, fileshare.none);//html直接写入不用spire.doc
                        streamwriter sw = new streamwriter(fs); // 创建写入流
                        sw.writeline(html); // 写入hello world
                        sw.close(); //关闭文件
                        fs.close();
                        break;
                    case ".xml":
                        document.savetofile(addrurl, fileformat.xml);
                        break;
                    case ".svg":
                        document.savetofile(addrurl, fileformat.svg);
                        break;
                    default:
                        //保存为word
                        document.savetofile(addrurl, fileformat.docx);
                        break;
                }
                document.close();
                filestream = file.open(addrurl, filemode.openorcreate);
                var filedata = bytehelper.streamtobytes(filestream);
                var outdata = bytehelper.bytestostream(filedata);
                return outdata;
            }
            catch (exception)
            {
                throw;
            }
            finally
            {
                if (filestream != null)
                    filestream.close();
                if (file.exists(addrurl))
                    file.delete(addrurl);//删掉文件
            }
        }

增加导出按钮

//加载自定义导出按钮
function loadexportapiwordbtn() {
    $(".information-container").height(240);
    $(".topbar").height(35);
    var btnexport = "<div class='selectbox' style='position: absolute;margin: 0;padding: 0;margin-left: 1432px;top: 2.5px;'>" +
        "<span><a href='javascript:void(0);'>导出离线文档</a></span>" +
        "<div class='drop'>" +
        "<ul style='margin: 0;padding: 0;'>" +
        "<li>" +
        "<a href='javascript:void(0);' onclick='exportapiword(1)'>导出 word</a>" +
        "</li>" +
        "<li>" +
        "<a href='javascript:void(0);' onclick='exportapiword(2)'>导出 pdf</a>" +
        "</li>" +
        "<li>" +
        "<a href='javascript:void(0);' onclick='exportapiword(3)'>导出 html</a>" +
        "</li >" +
        "<li>" +
        "<a href='javascript:void(0);' onclick='exportapiword(4)'>导出 xml</a>" +
        "</li >" +
        "<li>" +
        "<a href='javascript:void(0);' onclick='exportapiword(5)'>导出 svg</a>" +
        "</li >" +
        "</ul >" +
        "</div >" +
        "</div >";
    //information-container这个元素是swagger后期动态渲染出来的,所有这里要加个循环判断。
    //第一次进来如果有这个class直接加载按钮退出
    if ($("*").hasclass("information-container")) {
        $(".information-container").append(btnexport);
        return;
    }
    //没有元素等待元素出现在加载按钮
    timerloadexportbtn = setinterval(function () {
        if ($("*").hasclass("information-container")) {
            $(".information-container").append(btnexport);
            console.log("load ok");
            window.clearinterval(timerloadexportbtn);
            return;
        }
        console.log("loading");
    }, 788);
}

效果

总结

 1. 通过swagger 导出各类的说明文档,可以根据自己的html模板生成各式的word样式文档说明。

 2 .注:搜索关注公众号【dotnet技术谷】–回复【文档生成器】,可获取本篇swagger生成文档文件。

 3. 参考资料:spire.doc文件 、swagger开源地址

 4.源码下载