Web API Swagger文档导出为PDF

13
根据文档(http://swagger.io/open-source-integrations/),有用于将Swagger文档导出为PDF的Java插件,我看了看文档,但没有关于.NET的任何内容。
我的问题是:是否有类似于Java插件swagger2markup、swagger2markup-gradle-plugin的.NET插件或其他方法可以从WEB API中导出PDF文档?
谢谢。

可能是从Swagger API文档生成PDF的重复问题。 - Helen
1个回答

8
我在进行中的项目中实现了相同的内容。我们可以下载所有API的PDF文档。我使用Rapi-Pdf插件完成了这个操作,通过它我们可以生成swagger Json的PDF。该项目是基于Dotnet core 2.1实现的。

enter image description here

这是我的代码,我们需要在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索引页面的头部区域。
以下是我在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文档。

希望这能帮助有需要的人集成相同的功能。


1
非常感谢,我能够使用相同的步骤在 .NET Core 3.1 中生成 PDF。 - Raj
1
你能描述一下Custom.js是做什么的吗?在哪里以及如何引用它?这是Swagger的一部分吗? - Matt
你是怎样在项目中集成 Rapi-PDF 的?它似乎没有在 NuGet 中。你使用了 Yarn 吗? - Chris Nevill
我使用Visual Studio的Add-Client Side Library功能添加了它。然后从unpkg请求rapipdf@2.2.1 - Chris Nevill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接