Dot-Net

Web API Swagger 文件導出為 PDF

  • March 19, 2020

根據文件(http://swagger.io/open-source-integrations/),有一些Java外掛可以將 Swagger 文件導出為 PDF,我只是看看文件,但我看不到任何關於**.NET**的內容.

我的問題是:是否有類似於 .NET 中的 Java 外掛swagger2markup、swagger2markup-gradle-plugin或其他從 WEB API 導出 PDF 文件的方式?

謝謝

我在我正在進行的項目中實施了同樣的事情。我們可以下載所有 API 的 PDF 文件。我已經使用了 Rapi-Pdf 外掛,通過它我們可以生成 swagger Json 的 PDF。它在 Dotnet 核心 2.1 中。

在此處輸入圖像描述

這是我需要在 startup.cs 文件中配置的以下程式碼。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
   {
       app.UseStaticFiles();
       app.UseSwagger();
       app.UseSwaggerUI(c =>
       {
           c.SwaggerEndpoint(Configuration["Swagger:swaggerurl"], Configuration["Swagger:swaggertitle"]);
           c.InjectJavascript("/swagger-ui/custom.js");
           c.InjectJavascript("/swagger-ui/rapipdf-min.js");
       });

       if (env.IsDevelopment())
       {
           _logger.LogInformation("Configuring for Development environment");
           app.UseDeveloperExceptionPage();
       }
       else
       {
           _logger.LogInformation("Configuring for Production environment");
           app.UseHsts();
       }
       app.UseAuthentication();
       app.UseMiddleware<ErrorHandlerMiddleware>();
       //removed middleware to handle token, now changed with policies and auth schemes
       //app.UseMiddleware<TokenManagerMiddleware>();
       app.UseHttpsRedirection();
       app.UseMvc();
   }

在上面的程式碼中,我們需要了解的是,我們要注入兩個js文件,一個是自定義js,另一個是外掛,所以它會添加到Swagger UI索引頁面的head部分。

這是我在 Custom.js 中的以下程式碼

window.addEventListener("load", function () {
       customizeSwaggerUI();
   });
function customizeSwaggerUI() {
   setTimeout(function () {        
       var tag = '<rapi-pdf style="display:none" id="thedoc"> </rapi-pdf>';
       var btn = '<button id="btn" style="font-size:16px;padding: 6px 16px;text-align: center;white-space: nowrap;background-color: orangered;color: white;border: 0px solid #333;cursor: pointer;" type="button" onclick="downloadPDF()">Download API Document </button>';
       var oldhtml = document.getElementsByClassName('info')[0].innerHTML;
       document.getElementsByClassName('info')[0].innerHTML = oldhtml + '</br>' + tag + '</br>' + btn;
   }, 1200);
}
function downloadPDF() {
   var client = new XMLHttpRequest();
   client.overrideMimeType("application/json");
   client.open('GET', 'v1/swagger.json');
   var jsonAPI = "";
   client.onreadystatechange = function () {
       if (client.responseText != 'undefined' && client.responseText != "") {
           jsonAPI = client.responseText;
           if (jsonAPI != "") {
               let docEl = document.getElementById("thedoc");
               var key = jsonAPI.replace('\"Authorization: Bearer {token}\"', "");
               let objSpec = JSON.parse(key);
               docEl.generatePdf(objSpec);
           }
       }
   }
   client.send();   
}

就是這樣。現在您可以下載 PDF 格式的 API 文件。

希望這將幫助某人集成相同的功能。

引用自:https://stackoverflow.com/questions/40258287