基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)

前言

  在上一篇导出文档番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能。

回顾

  1. 获取Swagger接口文档的Json文件

  2. 解析Json文件数据填充到Html的表格中

  3.根据生成的html转work文档

功能

开始

 根据生成的htmlwork文档

        /// <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.docStreamWriter sw = new StreamWriter(fs); // 创建写入流sw.WriteLine(html); // 写入Hello Worldsw.Close(); //关闭文件fs.Close();break;case ".xml":document.SaveToFile(addrUrl, FileFormat.Xml);break;case ".svg":document.SaveToFile(addrUrl, FileFormat.SVG);break;default://保存为Worddocument.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开源地址

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[EDA] 给出一个双进程状态机,请把它改为单进程状态机。

给出一个双进程状态机&#xff0c;请把它改为单进程状态机。 解答&#xff1a;

[EDA] 给出一个状态机,请把它的组合进程分为2个,分别命名为COM1和COM2,其中:COM1实现对外的控制信号输出,COM2实现状态译码。

给出一个状态机&#xff0c;请把它的组合进程分为2个&#xff0c;分别命名为COM1和COM2&#xff0c;其中&#xff1a;COM1实现对外的控制信号输出&#xff0c;COM2实现状态译码。 解答&#xff1a;

基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (番外篇)

前言回顾之前的两篇Swagger做Api接口文档&#xff0c;我们大体上学会了如何在net core3.1的项目基础上&#xff0c;搭建一套自动生产API接口说明文档的框架。本来在Swagger的基础上&#xff0c;前后端开发人员在开发生产期间&#xff0c;可以借此进行更加便捷的沟通交流。可是总…

遵守这些原则让你开发效率提高一倍

一、概述在园子里面有很多关于各种技术细节的研究文章&#xff0c;都是比较牛逼的框架研究&#xff1b;但是一直没有看到关于怎么样提高开发效率的文章&#xff0c;大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的&#xff0c;而不是开发中的一些小技巧&#xff1…

【复杂系统迁移 .NET Core平台系列】之调度服务改造

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

C++实现AOE网中的关键路径算法及机动时间计算算法(邻接表存储)

代码如下: #include <iostream> #include <stack> using namespace std; const int N 100;typedef struct Node {int adj;int w;Node *next;}Node;typedef struct VNode {int in;int v;Node *first;VNode(){first nullptr;} }VNode;class AOE { private:VNode a…

.NET 开源项目 StreamJsonRpc 介绍[中篇]

阅读本文大概需要 11 分钟。上一篇介绍了一些预备知识&#xff0c;包括 JSON-RPC 介绍和实现了 JSON-RPC 的 StreamJsonRpc 介绍&#xff0c;讲到了 StreamJsonRpc 可以通过 .NET 的 Stream 类和 WebSocket 类实现 JSON-RPC 协议的通信。本篇就先选择其中的 Stream 类来讲解&am…

Istio 中的多集群部署与管理

本文节选自ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实战》&#xff0c;作者钟华&#xff0c;来自腾讯云。Istio 在 1.1 后提供了两类多集群的连通的部署模式&#xff1a;1. 多控制面2. 单控制面&#xff0c;也称为 “共享控制面” 模式多控制…

认证授权方案之授权初识

1.前言回顾&#xff1a;认证授权方案之JwtBearer认证在上一篇中&#xff0c;我们通过JwtBearer的方式认证&#xff0c;了解在认证时&#xff0c;都是基于Claim的&#xff0c;因此我们可以通过用户令牌获取到用户的Claims&#xff0c;在授权过程中对这些Claims进行验证&#xff…

[数据结构]树、森林与二叉树之间的相互转换方法

树、二叉树与森林的相互转换 本文只给出树、森林与二叉树之间的转换方法&#xff0c;而详细的证明过程不在本文讨论范围之内。 树 → 二叉树 在所有兄弟结点之间加一连线。 对每个结点&#xff0c;除了保留与其长子的连线外&#xff0c;去掉该结点与其它孩子的连线。 二叉树 …

Blazor.Server以正确的方式集成Ids4

&#xff08;一个真正的以后端形式来集成认证中心的方案&#xff09;❤本文导读首先特别感谢张善友老师提供技术指导&#xff0c;源于上周我发了一篇文章《[Mvp.Blazor] 集成Ids4&#xff0c;实现统一授权认证》&#xff0c;我本来是想通过像vue框架那样&#xff0c;通过引oidc…

作为一个有理想的程序员,必读的书都有哪些?

很多程序员朋友问我&#xff1a;“哪本最具影响力的书&#xff0c;是每个程序员都应该读的&#xff1f;” 笔者从事软件开发15年&#xff0c;看过的计算机相关的书籍不下百本了&#xff0c;如果非要推荐的话&#xff0c;给大家精选以下10本&#xff0c;希望对大家有所帮助&…

认证授权方案之JwtBearer认证

1.前言回顾&#xff1a;认证方案之初步认识JWT在现代Web应用程序中&#xff0c;即分为前端与后端两大部分。当前前后端的趋势日益剧增&#xff0c;前端设备&#xff08;手机、平板、电脑、及其他设备&#xff09;层出不穷。因此&#xff0c;为了方便满足前端设备与后端进行通讯…

使用过滤器模式,让客户关怀中的代码更加干净整洁

一&#xff1a;实际场景介绍我们在给用户做订单催付通知的时候&#xff0c;会有这样的一种场景&#xff0c;用户在系统后台设置一组可以催付的规则&#xff0c;比如说订单金额大于xx元&#xff0c;非黑名单用户&#xff0c;来自哪个地区&#xff0c;已购买过某个商品&#xff0…

C++实现各种排序以及复杂度,稳定性分析

代码如下: #include<iostream> using namespace std;void Bubble_Sort(int *a, int n) {bool flag;int tmp 0;for (int i n - 1; i > 0; i--){flag false;for (int j 0; j < i; j){if (a[j] > a[j 1]){swap(a[j], a[j 1]);flag true;}}if (!flag) break…

Webapi管理和性能测试工具WebBenchmark

WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具&#xff0c;在传统工具中一般管理工具缺乏性能压测能力或有性能压测的缺少管理功能&#xff1b;WebBenchmark的设计目标是就管理和性能测试能力同时具备。接下来介绍一下工具的功能和使用&#xff1a…

Abstract Factory(抽象工厂)--对象创建模式

Abstract Factory &#xff08;抽象工厂&#xff09;–对象创建模式 一、意图 提供一个创建一系列相关或者相互依赖的接口&#xff0c;而无需指定它们具体的类。 二、动机 1.在软件系统中&#xff0c;经常面临着“一系列相互依赖的对象”的创建工 作;同时&#xff0c;由于需求…