SectionReport フォーマットを実装した拡張版 Thinreports の公開

こんにちは、Misoca の日高(@hidakatsuya)です。

Fit Boxing は何度始めても3日坊主になります。

拡張版 Thinreports の公開

Thinreports は、オープンソース のPDF 生成ツールです。Thinreports では、Editor と呼ばれる帳票デザインツールで作成したテンプレートファイルを、RubyGems である Generator を使って読み込み、値の埋め込みなどを行って PDF を作成することができます。

Misoca でも以前から一部の PDF 生成機能で利用していましたが、昨年より、本格的に利用を進めるにあたって、不足した機能の拡張という形で SectionReport フォーマットの実装を進めてきました。

Editor 及び Generator それぞれの実装は下記リポジトリの section-report ブランチで公開し、現在も少しづつ開発を進めています。

github.com

github.com

SectionReport フォーマット

SectionReport フォーマットとは、コミュニティで提案されている Thinreports の新しいレイアウトフォーマット です。公開した拡張版 Thinreports は、この提案に基づいて実装した形です。

このレイアウトフォーマットは、

レイアウト定義時点でページの制約をなくし、出力した結果によってページを決めるレイアウトフォーマット

と、提案の中でも説明されているように、従来のフォーマットのような、ページ単位の固定なレイアウトではなく、レイアウトを「セクション」と呼ばれる単位で分割して定義し、PDF生成処理の中で、それらのセクションを組み合わせたり、カスタマイズすることによって、柔軟なレイアウトを可能にします。

f:id:hidakatsuya:20200629164435p:plain
Example: Basic Usage のレイアウト定義

主な特徴を紹介します。

セクションの高さの自動伸縮

描画した結果、テキストの内容がセクションの高さに収まらないとき、それに応じてセクション自体の高さを自動的に拡張させることができます。また、後述する StackView による自動縮小もサポートしています。詳細は Example: Section Auto Stretch を参照してください。

StackView ツール

図形やテキストを配置できる複数の領域(row)をもつ、Misoca 独自の新しいツールです。

StackView は他の図形同様、セクション内に配置することができます。その row は、動的に非表示にすることができ、その下に続く row は上に詰めて描画されます。また、row はセクション同様、自動伸縮をサポートします。StackView を使うことによって、セクション内のレイアウトを動的かつ柔軟なものにすることができます。詳細は、Example: StackView を参照してください。

その他の機能や実装状況

その他の機能や実装状況など、詳細は下記 README に記載しています。また、StackView ツールなどの Misoca 独自機能についても説明しています。

使い方

それぞれの README を参照してください。

また、いくつかの example も用意しています。各 example には、テンプレートファイルと Ruby のコード、その出力結果PDFが含まれています。こちらも参考にしてください。

なお、Editor は現時点では SectionReport フォーマット専用です。従来のフォーマットを編集することはできません。

今後について

いずれの実装もまだまだ発展途上です。Misoca としても開発を継続しつつ、近く Thinreports コミュニティに pull request を送る形で提案していきます。 そして、活発な議論のもと、より良い形での機能の提案ができればと思っています。その際は、ぜひレビューやコメントをしていただけると嬉しいです。

最後に

拡張版 Thinreports の概要と公開のお知らせを中心にご紹介しました。 今後も、この拡張版 Thinreports について、詳しい使い方や Misoca での具体的な利用例などを引き続きご紹介していきたいと思います。

宣伝

Misocaでは OSS に貢献したいエンジニアを募集しています。

www.wantedly.com