PDF-LIB で名刺を作る
去る11月に技術書店15が開催されました。 その際に作った名刺があるのですが、技術書を書くときに使ったPDF-LIBというライブラリを使ってスクリプトで頑張ってみました。 今回はその周りの話を書こうと思います。
出来上がったソースはGitHubにあります。
PDF-LIB を使ってみる
今回はDenoを使って書いたJavaScriptを実行しました。
Denoを用いたPDF-LIBのチュートリアルが公式ページに掲載されていて...とやりたいのですが面倒なので飛ばします。
サンプルがあるのでそれを見つつ、日本の一般的な名刺のサイズを調べて名刺サイズのページを作ります。
ちなみに名刺のサイズは91mmx55mmらしいです。
/** 1mmの大きさ */
const oneMilliMeter = PageSizes.B5[0] / 182;
const omote = pdfDoc.addPage([91 * oneMilliMeter, 55 * oneMilliMeter]);
こんなふうにするとそれっぽいサイズ感のページが出てると思います。たぶん。 あとはなんやかんやして先に示したGitHubのソースのようになって出来上がりです。
ハマったポイント
この名刺を作っていく中で困ったことをいくつか備忘録的に残しておきます。
内部の単位はPt(ポイント)
ハマったポイントだけに!?というわけではありません。
↑で出したソースを見てもらえばわかりますが、最初使い始めたときはあまりの単位のわからなさにプリセットのページサイズから無理やり算出してました。
で、ふと思い立ってoneMilliMeter
をログに出してみて調べたら出たのがPt→mmの変換式でした。
ポイントの定義はまちまちですが、多くの場合 1inch / 72 とされるようです。
つまり 25.4mm / 72 なので、それに気づいたあとはこの値を利用しています。
原点左下から右上に向けて+
普段書いてるwebはだいたい左上原点です...
オブジェクトの左下端が基準点になる
中央揃えなどが大変やりづらいです。
自分はそのあたりが楽になるようにラッパーを用意して書きました。
モノの配置に困るあたりはOpenSCADを思い出しました。
おわりに
この経験を経てエンジニアブログに寄稿しました。
もうちょっと色々使いみちがありそうなので、また何か作ったら書いてみようと思います。
P.S. ブログに書きたいような内容は作業しながらちゃんとメモと写真を撮っておきましょう。