基于.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":
javascript void 0 是什么意思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);
}
总结

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。