Chiharu の日記

絵描き C/C++ プログラマーの日記です。

年賀状作成ツールと PDF ファイル編集

先日、とあるクラウドサービスで年賀状を作成した相方から「このツールはク〇なのか」と、レイアウトの崩れた PDF ファイルを見せられました。年賀状の通信欄デザインに張り付けた iPhone 写真がいずれも編集画面とは異なる角度で配置されており、何とかしてほしいというので PDF ファイルを修正することにしました。
まずバイナリーエディターで PDF ファイルを開いて、ファイル末尾の相互参照テーブル直前のトレーラー辞書の以前と以降でファイルを分割しました。そのうえで、Deflate 圧縮されたコンテンツストリームを別ファイルに切り出して zlib 展開して、その中から画像の配置命令である Do オペレーターを探し、その手前のクリッピング命令である W オペレーターをコメントアウトして(この命令は完全に余分だった)、さらにその手前の変形行列の乗算命令である cm オペレーターの回転角度とオフセットを修正しました。(cos, sin, -sin, cos, x, y) * (w 0 0 -h 0 0) ですね。編集した命令列を無圧縮のコンテンツストリームとしてまとめなおし、先の分割ファイルの間に挟んでバイナリー連結し、相互参照テーブルのコンテンツストリームに対するオフセット情報を書き換えて、線形化 PDF 由来のファイル冒頭のトレーラー辞書の /Prev もあわせて書き換えて、PDF ファイルの修正を完了しました。終わったときには日付が変わっていました。
相方は私が別のデザインツールで何とかすると思っていて、テキストばかりの画面で三角関数を計算する姿に違和感を覚えたそうですが、私が普段どんな仕事をするのか分かったような気がすると言っていました。ともあれ、年賀状が完成して良かったです :-)