基于.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]FPGA/CPLD 设计流程步骤及步骤概念

EDA&#xff08;以 FPGA/CPLD 设计为例&#xff09;流程步骤 1.设计输入 2.全程编译 3.仿真验证 4.编程下载 5.硬件测试 设计输入 原理图/HDL文本编辑或其他输入方式把电路系统输入到EDA平台中。 综合编译 EDA综合器把设计输入描述的电路系统从高层级转换为低层级的电路网表&am…

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

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

给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)

给出TREE_INSERT过程的非递归版本&#xff08;算法导论第三版12.3-1&#xff09; template<typename T> void insert_recursive(BinaryTree<T>& tree,BinaryTreeNode<T>* root, BinaryTreeNode<T>* node) {if(tree.root nullptr){tree.root nod…

[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;可以借此进行更加便捷的沟通交流。可是总…

[EDA] 第1章 EDA技术概述-潘松版

第1章 EDA技术概述 知识点&#xff1a; 1.1 EDA技术及其发展 名称概念&#xff1a; EDA&#xff1a;Electronic Design Automation&#xff0c;即电子设计自动化&#xff0c;是指是以计算机为平台&#xff0c;使用通用软件包&#xff0c;开展电子电路设计、电子电路仿真、PCB设…

lua实现stack(lua程序设计21.7 练习21.1题)

lua实现stack&#xff08;lua程序设计21.7 练习21.1题&#xff09; Stack {} function Stack:new(o)o o or {}self.__index selfsetmetatable(o,self)return o end function Stack:push(v)table.insert(self,v) end function Stack:pop()local v self[#self]table.remove(…

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

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

[EDA] 2.2 简单PLD结构原理-潘松版

2.2 简单PLD结构原理 知识点&#xff1a; 2.1 PLD概述 名称概念&#xff1a; PLD&#xff1a;Programmable Logic Device&#xff0c;可编程器件 PLD的分类&#xff1a;1、按集成度分&#xff0c;可分为简单PLD和复杂PLD&#xff1b;2、按器件结构分类&#xff0c;可分为 “乘…

lua实现继承(lua程序设计21.7 练习21.2题)

lua实现继承&#xff08;lua程序设计21.7 练习21.2题&#xff09; StackQueue Stack:new() function StackQueue:insertBottom(v)table.insert(self,1,v) endlocal stack2 StackQueue:new() for i 1, 10 dostack2:push(i) end stack2:insertBottom(11)while not stack2:ise…

【复杂系统迁移 .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…

使用对偶表示重新实现Stack(lua程序设计21.7练习21.3题)

使用对偶表示重新实现Stack&#xff08;lua程序设计21.7练习21.3题&#xff09; local data {} DualStack {} function DualStack:new(o)o o or {}self.__index selfsetmetatable(o,self)data[o] {}return o end function DualStack:push(v)table.insert(data[self],v) en…

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

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

用空代理实现account(lua程序设计21.7练习21.4题)

用空代理实现account&#xff08;lua程序设计21.7练习21.4题&#xff09; function createAccount()local proxy {}local mt {balance 0}mt.withdraw function(v) mt.balance mt.balance - v endmt.deposit function(v) mt.balance mt.balance v endmt.getBalance fu…

Istio 中的多集群部署与管理

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

lua URL解码

lua URL解码 local function unescape(s)s string.gsub(s,""," ")s string.gsub(s,"%%(%x%x)",function(h)return string.char(tonumber(h,16))end)return s endlocal cgi {} local function decode(s)for name,value in string.gmatch(s,&q…

认证授权方案之授权初识

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