PDFLang でピクセル単位の比較
取引先から修正版のファイルが届きます。仕事はすでに予定に入り、印刷機も押さえて あります。そして機械が回り出す前に、誰かがひとつの問いに答えなければなりません。 これは承認された文書に修正が入ったものなのか、それとも別の何かなのか。
この問いは、認めたくないほど頻繁に目で答えられています。画面を二つ並べるか、 校正刷りを二枚ライトテーブルに置いて、人がスクロールする。一日のうちで最も時間が かかり、最も当てにならない作業です。
間違ったファイルの代償
Section titled “間違ったファイルの代償”間違ったファイルが機械に乗った瞬間から、その先はすべて無駄になります。紙は使われ ました。インキも使われました。刷版はそのファイル用に作られています。機械の時間は 押さえられ、燃やされ、それを動かす人の時間も同じです。断裁や折りや製本まで進んで いたなら、それも失われます。出荷まで行っていたなら送料がかかります。戻ってくる分 と合わせて二度。
そのうえで仕事全体をもう一度、満額の費用で回します。予算はすでに一度使い切った あとで。
そして戻ってこないのが納期です。シーズンに間に合わなかったカタログ、印刷された 日付より後に届いた販促物、一週間遅れて出た雑誌。刷り直しは物を直しますが、その物 が存在するはずだった瞬間は直せません。
金額の話ですらないものもあります。注意書きが誤った医薬品の表示、数字が誤った法定 公告、前四半期の数値が載った財務文書。これらは高くつく間違いではなく、回収 や規制当局で終わる種類の間違いです。
それに対して、確認にかかるのは数秒です。
なぜ目は不適切な道具なのか
Section titled “なぜ目は不適切な道具なのか”人の注意力は、大きな違いを見つけるのは非常に得意で、小さく一貫した違いを見つける のは非常に苦手です。ほとんど同じ二ページを見せれば、書き直された段落は見つけます。 2 ミリ動いたロゴは見つけません。
量が増えるとさらに悪化します。180 ページ目を 3 ページ目と同じ目で見る人はいません。 物事を捕まえる集中力は序盤で使い果たされ、長い文書の最後の三分の一には、確認では なく一瞥が向けられます。
しかも結果が再現しません。同じ二つのファイルを比べた二人は、違うことを報告します。 同じ人でも別の日の午後には、また違うことを報告します。そして後になって問題になった とき — 誰が何を根拠に承認したのかと問われたとき — 示せるものが何もありません。
機械にとっての「同じ」
Section titled “機械にとっての「同じ」”pdfl pixelcompare は両方のファイルを描画し、見た目をページごとに比べます。
pdfl pixelcompare approved.pdf reprint.pdf変化したページごとに 1 件、ページのどれだけが関係しているか、それが何か所に分かれて いるかとともに報告します。
page 7: 0.51% of the pixels differ, in 29 area(s)これは pdfl compare が答える問いとは別のものです。あちらは文字と構造を見ます。
こちらは見え方を見ます。そして両者は、思っているよりずっと頻繁に食い違います。
2 ミリ動いたロゴ。消えたヘアラインの罫。CMYK の掛け合わせに置き換えられた特色。 三つとも文字は同一なので、文字の比較はファイルが一致すると言います。紙の上では 一致していません。そして紙の上が、意味を持つ場所です。
片方のファイルにあってもう片方にないページは、比べる相手がないので単独の指摘として 報告されます。
変化ではない 1、2 ピクセル
Section titled “変化ではない 1、2 ピクセル”同じ原稿から書き出し直したファイルは、しばしば 1、2 ピクセルずれた位置に着地します。 それを違いとして扱えば、ページ上のすべての文字が「違う」ことになり、本当に変わった ひとつがノイズに埋もれます。
そこで比較はページ全体にわたる単一のずれを探し、見つけたときにはそう伝えます。
page 3: 2.10% of the pixels differ, in 44 area(s) (aligned by 2, -1 px)位置そのものを確かめたいとき — 決まった場所になければならない要素があるとき —
--no-align でこれを切ります。
実際に目で見る場所
Section titled “実際に目で見る場所”百分率はページが変わったことを教えます。その変化が許容できるかは教えません。それ には誰かが見る必要があります。
pdfl pixelcompare approved.pdf reprint.pdf --viewer diff/ページと差分と index.html の入ったフォルダーが書き出されます。サーバーも、
インターネットも、インストールするものもありません。ファイルを開くか、フォルダーを
圧縮して、刷り直しを承認する人に送ってください。
三つのペインが横に並び、つねに同じページを映します。元のファイル、新しいファイル、 そして両方に差分を塗り重ねたもの。
三つすべてに、縦一本と横一本の棒が同じ位置で走ります。棒はポインターに従います — つかむものも、狙う場所もありません。差分のペインでは棒が切れ目になり、縦棒の右と 横棒の下には新しいファイルが、それ以外には元のファイルが出ます。他の二つのペイン では同じ棒が定規になり、ページの同じ桁と同じ行を指すので、切れ目が見せているものを どちらの原本の上でも、目分量で測らずに見つけられます。
差分はページの上に塗られ、その色が種類を示します。
| 色 | 意味 |
|---|---|
| 赤 | 新しいファイルで失われたインキ |
| 緑 | 新しいファイルで増えたインキ |
| 青 | 同じ濃さで、色が違う |
ホイールは三つのペインを同時に、最大 8 倍まで、ポインターの下の点を中心に拡大します。 見ていたものがその場に留まるということです。どちらかのマウスボタンを押したまま動かすと ページ自体を、これも三つ同時に動かせます。拡大したあとで隅に届く方法です。Reset view で拡大も移動も棒も元に戻ります。
そして最も時間を節約する部分。ビューアーは差分のあるページから開きます。三ページが 動いた二百ページの文書で、その三ページこそ開いた理由であり、All で残りが戻って きます。矢印キーはこの絞り込みに従い、隠れているページに止まらず飛び越えます。
意見ではなく関門にする
Section titled “意見ではなく関門にする”終了コードが判定を運ぶので、これは機械の横ではなく手前に置けます。許容した以上に
変わったページがなければ 0、あれば 2、ファイルがそもそも読めなければ 10。
pdfl pixelcompare approved.pdf reprint.pdf --max-diff 0.1 --viewer diff/ || { echo "刷り直しが一致しません — diff/index.html を見てください" exit 1}--max-diff は許容量です。1 ページのどれだけまでの変化を数えないか。--dpi は
どこまで細かく見るかを決めます。高いほど多く見え、時間もかかります。--threshold
と --blur は描画が生む小さなノイズを吸収します。
確認は数秒で終わり、毎回同じ答えを返し、何を比べたのかの記録としてレポートと ビューアーを残します。
次に読むもの
Section titled “次に読むもの”CLI の章に pixelcompare のすべてのオプションと、文字と構造を問う
compare が載っています。実践レシピは両方を完全な流れの中に
置いています — 印刷会社が刷版用ファイルを承認済み校正と突き合わせる場面、出版社が
刷り直しをすでに書店にある版と突き合わせる場面。