Imagemagick
ImageMagick を使ったPDF帳票方法を説明します。
この方法を使うと以下のメリットがあります。
1. ShellScriptで帳票作成ができる。
帳票作成ライブラリ/フレームワーク不要になり、システムが身軽になります。
帳票サーバが不要で、ターミナル上で実行可能なので動作検証・デバッグが楽です。
2. 並列処理しやすく、高速な帳票作成が可能。
xargsコマンドで並列化することでCPUコアの数だけ高速化出来ます。
ImageMagickのconvertコマンドを実行するだけなので、並列化が容易です。
ImageMagickが多機能なため2回に分け、今回は convertコマンドの使い方を説明し、
次回でPDF帳票を作成します。
Imagemagick をインストールするだけです。
Ubuntu Linuxの場合、パッケージからインストールできます。
$ sudo apt install imagemagick
必要に応じて、日本語フォントを追加インストールします。
(例:Rictyフォントをインストール)
$ sudo apt install fonts-ricty-diminished
まずは簡単な出力を試してみます。
$ convert -font Ricty-Diminished-Regular label:日本語 output.png
引数の最後に指定したファイルに結果画像が出力されます。
(出力結果)
... これだけだと小さくて寂しいですが、以降オプションを増やして見栄えを良くしていきます。
拡張子を png の代わりに pdf を指定すると PDFファイルが作成されます。 他にも jpg, gif, tiff, bmp, ps(PostScript), ... 等、多くの画像フォーマットを指定出来ます。 画像の種類は拡張子で自動的に判断されます。
対応している画像フォーマットは -list format オプションで確認できます。
$ convert -list format
文字と背景色を指定できます。
指定できる色は -list color オプションで確認できます。
$ convert -list color
-font でフォント指定できます。
フォントの一覧も -list font オプションで確認できます。
$ convert -list font
Font: の行に出力されているフォント名が指定できます。
一覧に出てこないフォントを使用したい場合、-font の後にフォントファイルへのパスを指定します。
$ convert -font "$HOME/fonts/RictyDiminished-Regular.ttf" label:日本語 output.png
ここまでの例では label: オプションで出力文字列を指定しましたが、他のオプションもあります。
シンプルな1行単位の文字列出力です。
http://www.imagemagick.org/Usage/text/#label
ワードラップに対応した出力していです。( -sizeオプションで幅を指定しないと label と同じ)
http://www.imagemagick.org/Usage/text/#caption
マークアップ指定出来るようですが、残念ながら手元の ImageMagic 6.8.9-9 ではエラーになりました。 (今後の宿題)
http:// http://www.imagemagick.org/Usage/text/#pango
convertコマンドには上記以外にも多数のオプションがあります。
https://www.imagemagick.org/script/convert.php
帳票作成に関係するオプションを挙げていきます。
-pointsize 文字サイズ
https://www.imagemagick.org/script/command-line-options.php#pointsize
$ convert -font Ricty-Diminished-Regular -pointsize 64 label:日本語 output.png
(結果)
最初の出力より文字が大きくなりました。
-size WxH (幅x高)
https://www.imagemagick.org/script/command-line-options.php#size
$ convert -font Ricty-Diminished-Regular -size 640x320 label:日本語 output.png
横幅だけを指定すると、横幅に合わせてフォントサイズを調整し、キャンバスの高さは自動調整してくれます。
$ convert -font Ricty-Diminished-Regular -size 640 label:日本語 output.png
- page
https://www.imagemagick.org/script/command-line-options.php#page
PDFのみ利用可能です。A0〜A10, B0〜B5, Letter 等が指定できます。
$ convert -font Ricty-Diminished-Regular -page a4 -pointsize 128 caption:日本語 output.pdf
- append
http://www.imagemagick.org/Usage/annotating/
既存の画像ファイルの上に文字列を出力します。
$ convert template.png -font Ricty-Diminished-Regular -pointsize 64 label:"日本語" -append output.png
template.pngという画像ファイル上に、64ptの文字列を描画し、output.png に出力しています。
(template.png)
(結果)
gravityオプションで出力位置を指定できます。
$ convert template.png -font Ricty-Diminished-Regular -pointsize 64 label:"日本語" -gravity Center -append output.png
ここに挙げたもの以外にも、公式サイトにに詳細な使用例が記載されています。
(Examples of ImageMagick Usage)
https://www.imagemagick.org/Usage/
今回はここまで。次回はアノテーションと -draw オプションを駆使してImagemagickで帳票作成を行います。
ラズパイの3.5インチLCDに画像表示を行います。
jinja2を使って、JSONファイルをImagemagick用データに変換します。
Imagegagick を使って、業務に耐えうるレベルのPDF帳票を作成します。