web-dev-qa-db-ja.com

Swagger APIドキュメントからPDFを生成します

Swagger UIを使用してREST Webサービスを表示し、サーバーでホストしました。

ただし、Swaggerのこのサービスには、特定のサーバーでのみアクセスできます。オフラインで作業したい場合、Swagger UIを使用して静的PDFを作成して操作する方法を知っている人はいますか?さらに、PDFは、サーバーにアクセスできない人と簡単に共有できます。

どうもありがとう!

67
Aman Mohammed

https://github.com/springfox/springfoxhttps://github.com/RobWin/swagger2markup を使用して方法を見つけました

Swagger 2を使用してドキュメントを実装しました。

30
Aman Mohammed

便利な方法:ブラウザ印刷/プレビューの使用

  1. エディターペインを非表示
  2. 印刷プレビュー(Firefoxを使用しましたが、他のユーザーも問題ありません)
  3. ページ設定を変更してPDFに印刷

enter image description here

30
Osify

RESTプロジェクトを変更して、プロジェクトのビルド時に必要な静的ドキュメント(html、pdfなど)を生成できます。

Java Mavenプロジェクトがある場合は、以下のpomスニペットを使用できます。一連のプラグインを使用して(プロジェクトのREST)リソースのpdfおよびhtmlドキュメントを生成します。

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

1つのプラグインの出力が次のプラグインへの入力になるため、実行順序が重要であることに注意してください。

<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ファイルの存在を前提としています。 swagger2markupプラグインによって作成されたものを単純に収集するものを作成できます。

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>

Warプラグインは、生成されたドキュメントで機能します。そのため、これらのプラグインが前のフェーズで実行されていることを確認する必要があります。

20
Hervian

Amaan Mohammedのソリューションは機能するように見えますが、これを行う簡単な方法があります。 swagger2markup-cli をご覧ください。

6
vishal

私にとって最も簡単な解決策は、swagger(v2)をPostmanにインポートしてからWebビューに移動することでした。そこで、「単一列」ビューを選択し、ブラウザーを使用してpdfに印刷できます。自動化/統合されたソリューションではありませんが、使い捨てに適しています。スクロールバーがコンテンツの一部を非表示にするeditor2.swagger.ioからの印刷よりも、紙の幅をはるかにうまく処理します。

0
Simon