基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)
前言
在上一篇番外篇中,我们已经熟悉了怎样根据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开源地址

浙公网安备 33010602011771号