在上一篇導出文檔番外篇中,咱們已經熟悉了怎樣根據json數據導出word的文檔,生成接口文檔,而在這一篇,將對上一篇進行完善補充,增長多種導出方式,實現更加完善的導出功能。javascript
1. 獲取Swagger接口文檔的Json文件html
2. 解析Json文件數據填充到Html的表格中java
3.根據生成的html轉work文檔git
/// <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樣式文檔說明。github
2 .注:搜索關注公衆號【DotNet技術谷】--回覆【文檔生成器】,可獲取本篇Swagger生成文檔文件。web
3. 參考資料:Spire.Doc文件 、Swagger開源地址json
4.源碼下載app