从Swagger API文档生成PDF

我使用了Swagger UI来显示我的REST Web服务并将其托pipe在服务器上。

但是,这个Swagger服务只能在特定的服务器上访问。 如果我想脱机工作,是否有人知道如何使用Swagger UI创build静态PDF并使用它? 另外,PDF很容易与没有访问服务器的人共享。

非常感谢!

您可以修改您的REST项目,以便在构build项目时生成所需的静态文档(html,pdf等)。

如果你有一个Java Maven项目,你可以使用下面的pom片段。 它使用一系列插件来生成pdf和html文档(项目的REST资源)。

  1. rest-api – > swagger.json:swagger-maven-plugin
  2. swagger.json – > Asciidoc:swagger2markup-maven-plugin
  3. Asciidoc – > PDF:asciidoctor-maven-plugin

请注意,执行顺序很重要,因为一个插件的输出成为下一个插件的input:

<plugin> <groupId>com.github.kongchen</groupId> <artifactId>swagger-maven-plugin</artifactId> <version>3.1.3</version> <configuration> <apiSources> <apiSource> <springmvc>false</springmvc> <locations>some.package</locations> <basePath>/api</basePath> <info> <title>Put your REST service's name here</title> <description>Add some description</description> <version>v1</version> </info> <swaggerDirectory>${project.build.directory}/api</swaggerDirectory> <attachSwaggerArtifact>true</attachSwaggerArtifact> </apiSource> </apiSources> </configuration> <executions> <execution> <phase>${phase.generate-documentation}</phase> <!-- fx process-classes phase --> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>io.github.robwin</groupId> <artifactId>swagger2markup-maven-plugin</artifactId> <version>0.9.3</version> <configuration> <inputDirectory>${project.build.directory}/api</inputDirectory> <outputDirectory>${generated.asciidoc.directory}</outputDirectory> <!-- specify location to place asciidoc files --> <markupLanguage>asciidoc</markupLanguage> </configuration> <executions> <execution> <phase>${phase.generate-documentation}</phase> <goals> <goal>process-swagger</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>1.5.3</version> <dependencies> <dependency> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctorj-pdf</artifactId> <version>1.5.0-alpha.11</version> </dependency> <dependency> <groupId>org.jruby</groupId> <artifactId>jruby-complete</artifactId> <version>1.7.21</version> </dependency> </dependencies> <configuration> <sourceDirectory>${asciidoctor.input.directory}</sourceDirectory> <!-- You will need to create an .adoc file. This is the input to this plugin --> <sourceDocumentName>swagger.adoc</sourceDocumentName> <attributes> <doctype>book</doctype> <toc>left</toc> <toclevels>2</toclevels> <generated>${generated.asciidoc.directory}</generated> <!-- this path is referenced in swagger.adoc file. The given file will simply point to the previously create adoc files/assemble them. --> </attributes> </configuration> <executions> <execution> <id>asciidoc-to-html</id> <phase>${phase.generate-documentation}</phase> <goals> <goal>process-asciidoc</goal> </goals> <configuration> <backend>html5</backend> <outputDirectory>${generated.html.directory}</outputDirectory> <!-- specify location to place html file --> </configuration> </execution> <execution> <id>asciidoc-to-pdf</id> <phase>${phase.generate-documentation}</phase> <goals> <goal>process-asciidoc</goal> </goals> <configuration> <backend>pdf</backend> <outputDirectory>${generated.pdf.directory}</outputDirectory> <!-- specify location to place pdf file --> </configuration> </execution> </executions> </plugin> 

asciidoctor插件假设存在一个.adoc文件来处理。 您可以创build一个只收集由swagger2markup插件创build的一个:

 include::{generated}/overview.adoc[] include::{generated}/paths.adoc[] include::{generated}/definitions.adoc[] 

如果您希望生成的html文档成为war文件的一部分,则必须确保它位于顶层,否则将不会提供WEB-INF文件夹中的静态文件。 你可以在maven-war-plugin中做到这一点:

 <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> <webResources> <resource> <directory>${generated.html.directory}</directory> <!-- Add swagger.pdf to WAR file, so as to make it available as static content. --> </resource> <resource> <directory>${generated.pdf.directory}</directory> <!-- Add swagger.html to WAR file, so as to make it available as static content. --> </resource> </webResources> </configuration> </plugin> 

战争插件工作在生成的文档 – 因此,你必须确保这些插件已经在早期阶段执行。

方便的方法: 使用浏览器打印/预览

  1. 隐藏编辑器窗格
  2. 打印预览(我用过Firefox,别人也没事)
  3. 更改其页面设置并打印到PDF

在这里输入图像说明

虽然阿曼·穆罕默德的解决scheme看起来可以工作,但有一个更简单的方法来做到这一点。 看看swagger2markup-cli 。