概述
本教程将介绍从Swagger API文档生成PDF文件的不同方法。若想了解Swagger,请参考我们关于如何使用Spring REST API设置Swagger的教程:设置Swagger 2与Spring REST API。
2. 生成PDF的Maven插件方法
从Swagger API文档生成PDF文件的第一个解决方案是基于一组Maven插件。通过这种方法,我们可以在构建Java项目时获得PDF文件。
生成所需的PDF文件涉及在特定顺序中应用多个插件于Maven构建过程中。这些插件需要配置以选择资源,并将前一阶段的输出作为下一阶段的输入。接下来,我们将逐一了解它们的工作原理。
2.1. swagger-maven-plugin
插件
首先使用的插件是[swagger-maven-plugin](https://mvnrepository.com/artifact/com.github.kongchen/swagger-maven-plugin/3.1.8)
。此插件为我们的REST API生成swagger.json
文件:
<plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>3.1.3</version>
<configuration>
<apiSources>
<apiSource>
<springmvc>false</springmvc>
<locations>com.baeldung.swagger2pdf.controller.UserController</locations>
<basePath>/api</basePath>
<info>
<title>DEMO REST API</title>
<description>A simple DEMO project for REST API documentation</description>
<version>v1</version>
</info>
<swaggerDirectory>${project.build.directory}/api</swaggerDirectory>
<attachSwaggerArtifact>true</attachSwaggerArtifact>
</apiSource>
</apiSources>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
我们需要指定API的位置,并在构建过程中的某个阶段定义插件生成swagger.json
文件。在这里,在execution
标签中,我们已指定它应在package
阶段执行。
2.2. swagger2markup-maven-plugin
插件
第二个必需的插件是[swagger2markup-maven-plugin](https://mvnrepository.com/artifact/io.github.swagger2markup/swagger2markup-maven-plugin/1.3.7)
。它将前一个插件的swagger.json
输出作为输入,生成Asciidoc**:
<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>
<markupLanguage>asciidoc</markupLanguage>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>process-swagger</goal>
</goals>
</execution>
</executions>
</plugin>
在这里,我们指定了inputDirectory
和outputDirectory
标签。同样,我们将定义package
作为为REST API生成Asciidoc的构建阶段。
2.3. asciidoctor-maven-plugin
插件
我们将使用的第三个也是最后一个插件是[asciidoctor-maven-plugin](https://mvnrepository.com/artifact/org.asciidoctor/asciidoctor-maven-plugin/2.2.1)
。作为三个插件中的最后一个,它将Asciidoc(由前一个插件生成)转换为PDF文件:
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>2.2.1</version>
<dependencies>
<dependency>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctorj-pdf</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
<configuration>
<sourceDirectory>${project.build.outputDirectory}/../asciidoc</sourceDirectory>
<sourceDocumentName>overview.adoc</sourceDocumentName>
<attributes>
<doctype>book</doctype>
<toc>left</toc>
<toclevels>2</toclevels>
<generated>${generated.asciidoc.directory}</generated>
</attributes>
</configuration>
<executions>
<execution>
<id>asciidoc-to-pdf</id>
<phase>package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>pdf</backend>
<outputDirectory>${project.build.outputDirectory}/api/pdf</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
我们提供Asciidoc在前一阶段生成的位置,然后定义生成PDF文档的路径,并指定生成PDF的阶段。再次使用package
阶段。
3. 使用SwDoc生成PDF
Swagger to PDF是一个在线工具,可在swdoc.org上找到,它使用提供的swagger.json
规范生成API文档的PDF文件。它依赖于Swagger2Markup转换器和AsciiDoctor。
这个解决方案的原理与前一种类似。首先,Swagger2Markup将swagger.json
转换为Asciidoc文件。然后,Asciidoctor解析这些文件并将其转换为文档模型,最后生成PDF文件。
如果已经拥有Swagger 2 API文档,这种方法非常方便。
我们可以使用两种方式生成PDF:
- 提供指向
swagger.json
文件的URL - 将
swagger.json
文件的内容粘贴到工具的文本框中
我们将使用公开可用的PetStore API文档,可以从Swagger获取:Swagger上的PetStore API文档。
为了演示,我们将复制JSON文件并将其粘贴到文本框中:
点击“生成”按钮后,我们将得到PDF格式的文档:
4. 总结
在这篇简短的教程中,我们讨论了从Swagger API文档生成PDF文件的两种方法。
第一种方法依赖于Maven插件。我们可以使用三个插件,在构建应用程序的同时生成REST API文档。
第二种解决方案描述了使用SwDoc在线工具生成PDF文档。我们可以从swagger.json
链接或直接粘贴JSON文件内容到工具中生成文档。
如往常一样,这些示例的代码可在GitHub上找到。