印刷するときに,ヘッダーに日付を付けたい時があります。
プリンタのドライバにそういう機能があれば良いのですが,無い場合にめんどくさい。
そこで,Automatorを使って「プリントプラグイン」を作ってみましょう。プリントプラグインなら,OSX標準の印刷機能から呼び出すことができます。
考え方
UNIXのdateコマンドで生成した日付文字列を,「テキストからバナーイメージを作成」で画像ファイルにして,「PDF書類にウォーターマークを描画」する。
完成イメージはこんな感じ↓
大まかな流れ(Automatorアクション)
- "プリントプラグイン"は、プリントシステムからPDFファイルを受け取ります
- 変数の値を設定
- テキストの入力を求める ※日付形式の指定
- シェルスクリプトを実行 ※3.で指定された日付形式でdateコマンド
- テキストからバナーイメージを作成
- 変数の値を取得 ※2.で設定した変数を呼び出す。
- PDF書類にウォーターマークを描画
- Finder項目を開く
以下,解説
1.プリントプラグインの作成
Automatorで「新規」→書類の種類を「プリントプラグイン」。
2.変数の値を設定
プリントプラグインが受け取ったPDFを,適当な変数に格納しておきます。
私の場合,デフォルト値である「ストレージ」を変数名に使いました。
3,4. 日付形式の入力を求め,dateコマンドで文字列を吐き出す。
3.テキストの入力を求める。
プリントプラグイン使用時に日付形式を指定できるようにします。
Automatorアクション「テキストの入力を求める」を設置し,オプション:☑️このアクションの入力を無視
にチェックを入れておきます。(そうしないと,2.の変数に格納したPDFを受け取ってしまう。)
デフォルトの回答
には自分が一番よく使いそうなフォーマットを,UNIX dateコマンドのフォーマット書式で入れておきましょう。
私の場合,yyyy-mm-dd形式が好きなので,%Y-%m-%d印刷版
としています。
4.シェルスクリプトを実行
「入力の引渡し方法:引数として」と設定して,こんな感じ。
date "+$@"
余談:JavaScriptで日付形式決め打ちしてたころの実装
当初は日付形式決め打ちにして,Automatorアクション「JavaScriptを実行」で実装していました。が,日付形式を指定できると良さそうで,だけどJavaScriptは標準ライブラリではDateFormatter的なものが提供されていないので,UNIXコマンドを使うことにしたのです。
旧コードではこんな感じ。
function run(input, parameters) {
// Your script goes here
return ((new Date()).toLocaleDateString("ja-JP",{year:"numeric",month:"2-digit",day:"2-digit"}).split("/").join("-")) + "印刷版";
}
5.テキストからバナーイメージを作成
ダミーファイルを用意しておいて,「名前」と「場所」をダミーファイルと同一に設定し,☑️既存のファイルを置き換える
にチェックしておきます。
書体やカラーやサイズはお好みで。私はHiraMaruPro-W4, Black, 10.5ptです。
(本当は,生成した画像を変数に入れてウォーターマークに使えればダミーファイルは不要なんでしょうけども,「PDFにウォーターマークを描画」アクションがファイル指定を要求するので…。)
6.変数の値を取得
2.で記憶しておいたPDFを召喚して,次のアクションに渡します。
7.PDF書類にウォーターマークを描画
5.で使ったダミーファイルをウォーターマークに指定し,適宜のオフセット,サイズ調整を指定します。
私の場合,オフセット={x:460, y:810, サイズ調整:0.5} でちょうど良かった感じ。
8.Finder項目を開く
7.で日付画像を描画したPDFをプレビュー.appで開きます。
プリントプラグインで出力したPDFはどこにあるか分からないし,印刷プレビューもしたいので,プレビュー.appで開くことにしておけばいろいろ捗るのです。
で,これを「印刷日打刻.workflow」(プリントプラグイン)とでもして保存すれば,標準の印刷画面の左下(「PDF」ドロップダウン)から使えます。便利!