基於.NetCore3.1系列 —— 使用Swagger導出文檔 (補充篇)

前言

  在上一篇導出文檔番外篇中,咱們已經熟悉了怎樣根據json數據導出word的文檔,生成接口文檔,而在這一篇,將對上一篇進行完善補充,增長多種導出方式,實現更加完善的導出功能。javascript

回顧

  1. 獲取Swagger接口文檔的Json文件html

  2. 解析Json文件數據填充到Html的表格中java

  3.根據生成的html轉work文檔git

功能

 

開始

 根據生成的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樣式文檔說明。github

 2 .注:搜索關注公衆號【DotNet技術谷】--回覆【文檔生成器】,可獲取本篇Swagger生成文檔文件。web

 3. 參考資料:Spire.Doc文件 、Swagger開源地址json

 4.源碼下載app

相關文章
相關標籤/搜索