前言 在上一篇導出文檔番外篇中,我們已經熟悉了怎樣根據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.源碼下載