基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)
程序员文章站
2022-04-15 16:27:48
前言 在上一篇导出文档番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能。 回顾 1. 获取Swagger接口文档的Json文件 2. 解析Json文件数据填充到Html的表格中 3.根据生成的h ......
前言
在上一篇番外篇中,我们已经熟悉了怎样根据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.源码下载