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

来源:https://www.cnblogs.com/i3yuan/archive/2020/04/12/12682728.html
-Advertisement-
Play Games

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【目錄】 一、綁定方法與非綁定方法 二、非綁定方法 一、綁定方法與非綁定方法 ​ 類中定義的函數分為兩大類:綁定方法和非綁定方法 ​ 其中綁定方法又分為綁定到對象的對象方法和綁定到類的類方法。 ​ 在類中正常定義的函數預設是綁定到對象的,而為某個函數加上裝飾器@classmethod後,該函數就綁定 ...
  • 前言 隨著 Web 2.0 時代的到來,互聯網的網路架構已經從傳統的 架構轉變為更加方便、快捷的 架構,B/S 架構大大簡化了用戶使用網路應用的難度,提高了用戶體驗。 架構帶來了以下兩方面的好處: 客戶端使用統一的瀏覽器( )。由於瀏覽器具有統一性,不需要特殊的配置和網路連接。另外瀏覽器的交互特性使 ...
  • 服務提供者 創建一個名為 的服務提供者項目 POM 該項目下有兩個子模塊,分別是 和 ,前者用於定義介面,後者用於實現介面。 服務提供者介面模塊 在服務提供者項目下創建一個名為 的模塊, 該項目模塊只負責 定義介面 POM 定義一個介面 服務提供者介面實現模塊 創建名為 服務提供者介面的實現模塊,用 ...
  • 什麼是 Nacos Config 在分散式系統中,由於服務數量巨多,為了方便服務 配置文件統一管理 , 實時更新 ,所以需要分散式配置中心組件。 是 的替代方案。 的存儲配置功能為分散式系統中的外部化配置提供伺服器端和客戶端支持,可以在 中集中管理 Spring Cloud 應用的外部屬性配置。 引 ...
  • ASP.NET CORE出現之前我們實現的Controller,MVC都繼承自Controller基類,WebApi的話繼承自ApiController。現在ASP.NET CORE把MVC跟WebApi合併了,已經不再區分MVC或者WebApi。ASP.NET CORE的Controller繼承結... ...
  • 上一章介紹的ColorPicker控制項,是控制項設計的最好示例。因為其行為和可視化外觀是精心分離的,所以其他設計人員可開發動態改變其外觀的新模板。 ColorPicker控制項如此簡單的一個原因是不涉及狀態。換句話說,不根據是否具有焦點、滑鼠是否在它上面懸停、是否禁用等狀態區分其可視化外觀。接下來本章介 ...
  • Navicat is a series of graphical database management and development software produced by PremiumSoft CyberTech Ltd. for MySQL, MariaDB, Oracle, SQLit... ...
  • 昨天大致把思路理清楚了,用one hot的方式把關鍵詞按字拆開編碼,今天嘗試可行性。 目前主流的文本向量化方式主要包括one hot、tf (term frequency)和tf idf (term frequency–inverse document frequency)這三種,越往後準確度應該越 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...