PDF の作り方:pdftk の活用
さてさて、早速 TeX ユーザの集い 2014 の資料作成時に使用したテクニック紹介第1弾。
今回は資料作成の最終段階という肝心な部分で活躍した pdftk の紹介。
pdftk とは?
TeX Wiki に記述がほとんどなかったので pdftk のページを作成し、説明を書き加えた。それはさておき、以前このブログで一瞬触れたことに気づいただろうか?
僕の知る範囲では
「TeXは、PDFをより大きな文書に安全に取り込むことを可能にする、おそらく唯一のプログラムである」
もちろん、「ある PDF ファイルの何ページ目と何ページ目の間に1ページだけ他の PDF ファイルを挟みたい」とか、「この PDF ファイルの末尾に別の PDF ファイルを結合したい」とかいう場合には(中略)、CUI ツールとして PDFtk (Win, Mac, ...) が存在するので、そちらの方が便利である(Mac 標準のプレビューも使える)。しかし、これらは同じページの中に PDF ファイルをそのまま埋め込むことはできない。
ただし、同じページに PDF ファイルを埋め込むことができる例外が存在する。それが
透かし挿入機能
である。「透かし」とはいうが、特に透明であるという必要はなく、PDF の全ページにロゴを入れるといった作業に利用できる。以下の記事に非常に詳しい。
実際の使いかた
で、今回これをどのように用いたかというと、公開した発表資料の PDF 末尾に書いたとおりで
- 全体的な構成を LaTeX で作成し、PDF 出力:in.pdf
- Inkscape で模様(今回の場合は上下の帯とロゴ)を作図して、PDF 出力:stamp.pdf
- pdftk で透かし挿入機能を用いて2つを組み合わせる。コマンドは
pdftk in.pdf multistamp stamp.pdf output out.pdf
しかも、今回のようなマルチメディア埋め込み PDF でも、pdftk ならマルチメディアを破壊することなく正常に PDF のレイヤーを重ねられるので、透かしを埋め込むことができるのである! これは以前述べた「PDF 操作ツールとしての TeX 活用」の例外で、同じ目的を TeX(特に dvipdfmx)で達成しようと思ってもマルチメディアを埋め込んだ箇所が壊れてしまい、ありのままの PDF を保持することができない。
注意点をいくつか
- 透かしPDFのページ数によって multistamp では
- 1ページだけなら、すべてのページに同じ透かしが入る
- 複数ページなら、対応するページ順に異なる透かしが入り、透かしのページが足りなくなったら残りは最後のページを繰り返す
- マルチメディア埋め込み PDF は stamp.pdf ではなく、in.pdf に指定する必要がある
- オブジェクト同士がページ上で重なった場合にどちらが前面にくるか
やってみないとわからないこともあるが、今のところの経験としては、in.pdf か stamp.pdf のどちらにあるかにかかわらず- U3Dオブジェクトは文字より前面に出る
- ビットマップ画像オブジェクトは文字より前面に出る
- 透かしを挿入するコマンドとしては multistamp のほかに stamp, background, multibackground がある。それぞれの違いは公式マニュアル参照。
この方法を応用すれば(TeX 文書が構造的とはいえなくなるが)\includegraphics の代わりに \hspace や \vspace でスカスカの PDF を出力し、隙間に見合うように Inkscape のような GUI ソフトウェアで画像を配置した PDF とマージするという発想も得られる。
ここでクイズ
さて、すべてネタばらしするつもりもないので、ここで一つクイズ。
今回の発表資料における in.pdf にあたる部分は、一つの TeX ソースファイルからのコンパイルで得た単一の PDF である(サイズは 4.22 MB:ほとんどがムービーの分)。そのうち
- 前半の84ページ分には赤い帯(PDF は 218 kB)
- 85ページ目には赤い帯とゆきだるま*1(PDF は 308 kB)
- 最後の17ページ分は青い帯(PDF は 218 kB)
を透かしとして挿入してある。この作業はいちばん下手なやり方では約 32MB にもなってしまうが、今回は 5.05 MB で済んでいる。さあ、いったいどうやったでしょう?
答えを発表するかどうかは気分しだい。というより、簡単すぎ?
宣伝:ケムステに記事を投稿。ぜひご一読を:
そして、次回は、発表で使用した化学の素材について改めて説明。