コマンドラインでThinreportsのレイアウトファイルからPDFを生成するツールを作ったメモ

[Thinreports Templete CLI](https://github.com/mh61503891/thinreports-template-cli)というコマンドラインツールをつくりました。

**コマンドライン**でThinreportsの帳簿レイアウトからPDFを生成するツールです。Wordで手入力したりするのがつらい人々向けのツールです。

## Step 0: 分かる人向けのお試しコマンド

```shell-session
$ wget https://raw.githubusercontent.com/mh61503891/thinreports-template-cli/master/test/fixtures/card.tlf
$ gem install thinreports-template-cli
$ thinreports-template-cli ./card.tlf --help
thinreports-template-cli tlf [options]

Basic Options
        --format=table|csv|json|pdf

Thinreports Layout File Options
        --name=[NAME]                本名またはハンドルネームを記載してください。
        --twitter=[TWITTER]          Twitterのアカウントをお持ちのかたはIDを記載してください。
        --desc=[DESC]                自己紹介の説明文を記入してください。
$ thinreports-template-cli ./card.tlf --name="M. Higashino" --twitter=61503891 --desc="猫です。" --format=pdf > ./card.pdf && open ./card.pdf
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/32894/7fe11e0b-02b8-7704-ba7b-48165063b566.png)

完🎉

## Step 1: 帳簿レイアウトの作成

ここから少し詳しい説明です。例として、[Thinreports Editor](http://www.thinreports.org/features/editor/)で下図のような帳簿レイアウトを作成して `card.tlf` として保存します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/32894/4e094b59-6758-6687-93c3-897eaae6a2cd.png)

このファイルは [card.tlf](https://raw.githubusercontent.com/mh61503891/thinreports-template-cli/master/test/fixtures/card.tlf) からダウンロードできます。必要な方は以下のコマンドでダウンロードしてください。

```shell-session
$ wget https://raw.githubusercontent.com/mh61503891/thinreports-template-cli/master/test/fixtures/card.tlf
```

## Step 2: Thinreports Templete CLIのインストール

以下のコマンドでインストールします。

```shell-session
$ gem install thinreports-template-cli
```

## Step 3: テキストブロックをコマンドラインオプションで見る。

`thinreports-template-cli` コマンドに、先ほど作成した帳簿レイアウトのファイル（`card.tlf`）を指定して `--help` を指定するとテキストブロックのIDがコマンドラインオプションにマッピングされて表示されます。

```shell-session
$ thinreports-template-cli ./card.tlf --help
thinreports-template-cli tlf [options]

Basic Options
        --format=table|csv|json|pdf

Thinreports Layout File Options
        --name=[NAME]                本名またはハンドルネームを記載してください。
        --twitter=[TWITTER]          Twitterのアカウントをお持ちのかたはIDを記載してください。
        --desc=[DESC]                自己紹介の説明文を記入してください。
```

## Step 4: テキストブロックのテーブル表示

こんな感じでテキストブロックが一覧表示されます。

```shell-session
$ thinreports-template-cli ./card.tlf
+-------+------+-------+--------+-------------+------------+----------+--------+--------+---------+---------------------------------------------------------+
|id     |ref_id|display|multiple|default_value|option_value|real_value|fmt_base|fmt_type|fmt_value|desc                                                     |
+-------+------+-------+--------+-------------+------------+----------+--------+--------+---------+---------------------------------------------------------+
|name   |      |true   |true    |             |            |          |        |        |         |本名またはハンドルネームを記載してください。             |
|twitter|      |true   |false   |             |            |          |@{value}|        |         |Twitterのアカウントをお持ちのかたはIDを記載してください。|
|desc   |      |true   |true    |             |            |          |        |        |         |自己紹介の説明文を記入してください。                     |
+-------+------+-------+--------+-------------+------------+----------+--------+--------+---------+---------------------------------------------------------+
```

## Step 5: オプションの指定

テキストブロックのIDはコマンドラインオプションになっているので適当に指定してあげます。値に関する項目の意味は下記の通りです。

* default_value: 帳簿レイアウトで指定されているデフォルト値
* option_value: コマンドラインオプションで指定した値
* real_value : 実際に出力される値

```shell-session
$ thinreports-template-cli ./card.tlf --name="M. Higashino" --twitter=61503891 --desc="猫です。"
+-------+------+-------+--------+-------------+--------------------+--------------------+--------+--------+---------+---------------------------------------------------------+
|id     |ref_id|display|multiple|default_value|option_value        |real_value          |fmt_base|fmt_type|fmt_value|desc                                                     |
+-------+------+-------+--------+-------------+--------------------+--------------------+--------+--------+---------+---------------------------------------------------------+
|name   |      |true   |true    |             |M. Higashino  |M. Higashino  |        |        |         |本名またはハンドルネームを記載してください。             |
|twitter|      |true   |false   |             |61503891            |@61503891           |@{value}|        |         |Twitterのアカウントをお持ちのかたはIDを記載してください。|
|desc   |      |true   |true    |             |猫です。|猫です。|        |        |         |自己紹介の説明文を記入してください。                     |
+-------+------+-------+--------+-------------+--------------------+--------------------+--------+--------+---------+---------------------------------------------------------+
```

## Step 6: PDFファイルの生成

`--format=pdf` とオプションを指定してあげれば標準出力にPDFファイルが出力されますのであとはリダイレクトするなりパイプでつないで `lpr` でプリンタへ投げるなりします。

```shell-session
$ thinreports-template-cli ./card.tlf --name="M. Higashino" --twitter=61503891 --desc="猫です。" --format=pdf > ./card.pdf && open ./card.pdf
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32894/7fe11e0b-02b8-7704-ba7b-48165063b566.png)

まぁまぁこれで元気がでてきました。