コンタクトシートってのは、画像(写真)のサムネイルを一覧にして1枚のシート(あるいは1ページ)に並べたもののこと。説明するまでもないか。
とにかく、コンタクトシートを作る必要ができて方法を調べてみたら、Windows の標準機能でできることを知った。ところが、確かに簡単に PDF に出力できるんだけど、どういうわけかファイル名の順に並んでくれない。用が足りないわけじゃないんだけどなんとも気持ちが悪い。
なので、ツールを自作することにした。最近は Python を使うことが多いので今回も Python で、と思って PDF の作り方を調べている途中で、そういえば以前、ディレクトリ内の画像をサムネイルのリストを表示する html ファイルを作るツールを作ったな、と思い出した。↓これ。
Go 言語だった。
そういうわけで、久しぶり(最後のコミットは2019年の2月、なんと3年半前だ)に Go を書いて、自分でも忘れてたツールを機能拡張することにした。
方針はこうだ。
mkphotoindex
コマンドに --contactsheet
オプションを追加して、指定したディレクトリに含まれる画像のサムネイルとファイル名を並べた PDF ファイルを出力する。
PDF を出力できるパッケージを探してみると、github.com/signintech/gopdf というのが見つかった。おおまかな使い方は、ページを追加し、テキストや画像を配置、PDF に出力する、というシンプルなもの。あるいは原始的ともいう。
もう少し楽にできそうなのはないかと探して見つけたのが、github.com/mikeshimura/goreport。これは内部では github.com/signintech/gopdf を使っているけど、帳票を作るのに便利なように作られている。決まったフォーマットの PDF を作るにはちょうどよさそうだと思って、これを使って実装を始めた。参考にしたページは以下。
ところが、なかなか思うようにはいかなかった。Qiita の記事を読むと、結構複雑な帳票も簡単にできるように思えるんだけど、サムネイルを例えば 4列×5行とかに並べるのがうまくできない。多分理解が足りないだけで、いいやり方があるんだと思うんだけど。
で、結局のところ、A4 のページにサムネイル(とファイル名)を並べたいだけだと思いなおして、github.com/signintech/gopdf を直接使うことにした。サムネイルのサイズや位置の調整に時間をとられたけど、とりあえず用は足りるものはできた。
とはいえ問題が一つ残った。github.com/signintech/gopdf は ttf フォントを読み込んで使える(もちろん日本語も)ので、IPAex フォントをダウンロードして使ったんだけど、現状の実装ではカレントディレクトリに フォントファイル ipaex.ttf を置いておく必要がある。これは結構面倒だ。今回に限っては Windows で実行するのが前提なので Windows に標準でついているフォントファイルのパスをコードに埋め込んでしまえば回避できる。でも、ほかの OS でも使うことを考えるとそれは避けたい。コマンドラインオプションでフォントファイルを指定してやることも考えたけど、デフォルトのフォントがあったほうがいい。OS ごとにデフォルトのフォントを決めてやるにはどうしたらいいんだろうか。