OpenAPI の YAML および JSON から PDF を生成

はじめに

OpenAPI の YAMLJSON から、openapi-generator-cli を使って、リファレンスを HTML や Markdown を出力したりしている。

ただ、リファレンスを PDF で配りたいという要望もあり、どうしたものかと思案中。

openapi-generator-cli だけでは、直接 PDF は出力できないけど、いったん AsciiDocに出力することで、AsciiDoc から PDF を作れそうだった。

OpenAPI Spec から AsciiDoc

OpenAPI サンプルの定番、Petstore の YAML から AsciiDoc を出力。

openapi-generator-cli generate -i petstore.yaml -g asciidoc -o dest

AsciiDoc から PDF

AsciiDoc から PDF を作成するには、asciidoctor-pdf を使う。Ruby の gem なので、Ruby の環境が必要。

Windows なら、Ruby Installer でインストールするのが手っ取り早い。

rubyinstaller.org

そして asciidoctor-pdf もインストール。執筆時のバージョンは 2.0.17 だった。

gem install asciidoctor
gem install asciidoctor-pdf

組み込みの日本語フォントでよければ、次のコマンドで日本語の PDF を生成できた。

asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font dest\\index.adoc -o petstore.pdf

おわりに

10MB 超あるお化け swagger.json でも試してみたところ、メモリ 1GB 弱使いながら、かなりの時間をかけて、なんとか PDF 出力できた。

本格的に体裁を整えるとしたら、asciidoc ジェネレーターのカスタムテンプレートと asciidoctor-pdf のテーマを作ることになるだろうな。やりたくない。