無料で PDF ファイルが編集できる強力ツール「PDFtk」について

PDF の編集にはお金がかかると思っていませんか?

確かに,たとえば Adobe Acrobat のような有料のソフトウェアも出回っています.しかし, PDF なんて中身はただ /Type /Page とか /Font << /F3 212 0 R >> とか書かれてるだけのファイルに過ぎないのですから,無料の編集ソフトが存在しないわけがありません.そこで今回紹介するのが, PDFtk という無料ソフトです. PDF の結合や分割,重ね合わせなどができます.

インストール方法

ここから,自分の OS に合ったインストーラをダウンロードします*1(Windows 10 は存在しないので代わりに Windows XP/Vista/7/8 を選択します).インストーラを起動して,言われるがままに「Next」を押し続けると……あれ?インストールが完了したのに PDFtk が起動しないし,デスクトップを見てもそれらしいアイコンがありません.どうしたのでしょう.

実は, PDFtk はコマンドラインツールです(GUI のものは有料です). Mac/Linux ならターミナル, Windows なら PowerShell を起動して,

$ pdftk --version

と打ち込んでみましょう(最初の「$」は,シェルが入力を受け付けていることを表すもので,あなたが入力するのは「pdftk」以降です.環境によっては「$」ではなく「>」だったり「%」だったりするかもしれません).インストールに成功していれば,ここで

pdftk 2.02 a Handy Tool for Manipulating PDF Documents
Copyright (c) 2003-13 Steward and Lee, LLC - Please Visit: pdftk.com
This is free software; see the source code for copying conditions. There is
NO warranty, not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

のようなメッセージが出力されるはずです.もしここで

用語 'pdftk' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。

command not found: pdftk

といったエラーが出力されていれば,インストールに失敗しています.

パソコンの中にある PDF ファイルをコマンドラインから見る方法

シェルの扱いに慣れていない人のための項目です,普段から使っている人は読み飛ばしてください.

シェルには,カレントディレクトリという概念が存在します.コンピュータの中にはファイルの階層構造が形成されていて,たとえば Pictures というディレクトリ(フォルダともいいます)の中に写真が入っていたり, Downloads というディレクトリの中にダウンロードしたファイルが入っていたりします.シェルを使うとき,あなたは常に,何らかのディレクトリを基点として,その中や外にあるファイルを操作することになります.今操作の基点となっているディレクトリのことを,カレントディレクトリといいます.

今あなたがどのディレクトリにいるのかは,

$ pwd

と入力することで知ることができます(繰り返します,「$」自体は入力しないでください). Windows であれば「C:」, Mac/Linux であれば「/」から始まるパスが表示されたはずです.そこがあなたが今いる場所です.

PDF ファイルを操作するときには,そのファイルが含まれるディレクトリまで移動したい(カレントディレクトリを移動させたい)です.これには 2 つの方法があります.

まず 1 つ目(この方法は Windows の場合しか知らないのですが,他でも多分可能です). Windows ではフォルダをクリックするとエクスプローラが開き,フォルダ内のファイル一覧が表示されると思います.その状態で,左上の「ファイル」から「Windows PowerShell を開く」をクリックすると, PowerShell が開くでしょう.その状態で $ pwd と打つと,今度はエクスプローラで開いていたディレクトリがカレントディレクトリになっているはずです.

2 つ目は, cd を使う方法です.たとえば,カレントディレクトリ直下にある Documents というディレクトリに移動したければ,

$ cd Documents

と打つと移動できます.また, C:\Users\example\Documents\ というディレクトリに移動したければ,

$ cd C:\Users\example\Documents\

と打っても移動できます.

さて,こうして 2 通りのやり方のいずれかでカレントディレクトリを移動できたら,

$ ls

と打ってみてください.ディレクトリ直下にあるファイルの一覧が表示されるはずです.この一覧の中にあなたが編集したい PDF ファイルが含まれているかどうかを,

$ ls (ファイル名)

で確認しましょう.

PDFtk の使用例

まずはいくつか例を紹介します. a.pdf と b.pdf を結合して c.pdf にしたければ

$ pdftk a.pdf b.pdf cat output c.pdf

とします.逆に, 100 ページある a.pdf を 1 ページの PDF ファイル 100 個に分割したければ,

$ pdftk a.pdf burst output bursted_

とします(bursted_pg_0001.pdf から bursted_pg_0100.pdf までのファイルが作られます).

PDFtk の詳細な用法は少々複雑ですが,たいていは

$ pdftk (入力元ファイル) (操作) output (出力先ファイル)

だけで事足ります.上の 2 つの例では,「(操作)」の部分がそれぞれ「cat」,「burst」だったわけです.

cat

cat は実はもう少し高機能です.複数個の PDF ファイルを連結するだけでなく,複数個の PDF ファイルの「好きなページ範囲を」「好きな順番で」連結できます.そのためには, cat の直後に範囲の指定を続けます.

まず, a.pdf が 20 ページの PDF ファイルだったとき,

$ pdftk a.pdf cat 5 output b.pdf

とすると, b.pdf は a.pdf から 5 ページ目を切り出した 1 ページの PDF ファイルになります.

$ pdftk a.pdf cat 5-10 output c.pdf

とすると, c.pdf は a.pdf から 5-10 ページを切り出した 6 ページの PDF ファイルになります.

$ pdftk a.pdf cat 5-10 15-20 output d.pdf

とすると, d.pdf は a.pdf の 5-10 ページと 15-20 ページを連結した計 12 ページの PDF ファイルになります. 20 ページ目は a.pdf の最後のページなので,

$ pdftk a.pdf cat 5-10 15-end output d.pdf

としても同じです.

次に,複数個の PDF ファイルについてこれを行います.このためには,入力元ファイルを指定するときに,一時的に名前を付けてやります.たとえば

$ pdftk A=hoge.pdf B=fuga.pdf C=piyo.pdf (操作) output (出力ファイル)

とすると, 3 つの PDF ファイル hoge.pdf,fuga.pdf,piyo.pdf に対し,それぞれ一時的に A,B,C という名前が付けられ,「(操作)」の部分で用いることができるようになります.

これを使って, hoge.pdf の 1-2 ページ目, fuga.pdf の 3-4 ページ目, piyo.pdf の 5-6 ページ目をつなげて全 6 ページの PDF ファイルを作るには,

$ pdftk A=hoge.pdf B=fuga.pdf C=piyo.pdf cat A1-2 B3-4 C5-6 output out.pdf

とします.

練習問題:100 ページの hoge.pdf と, 1 ページの fuga.pdf があります. hoge.pdf の 30 ページ目を fuga.pdf で差し替え,新たに 100 ページの PDF ファイルを作るにはどうすれば良いでしょうか.

cat には他にもいくつか機能があります.ページ範囲が「10-5」のように逆転していれば,「10 9 8 7 6 5」とページが逆順になります.ページ範囲を指定するところで「5-11odd」や「2-10even」のように odd/even を付けると,奇数ページ目/偶数ページ目だけが選択され,それぞれ「5 7 9 11」と「2 4 6 8 10」のようになります.「1-10south」のように範囲指定の後に north/south/east/west/left/right/down を付けると,ページが回転します*2

burst

burst は, PDF ファイル全体を 1 ページずつに分割します.分割された PDF ファイルの名前は,デフォルトで末尾に pg_(ページ番号).pdf が付きますが, C 言語の printf と同じ形式で指定することもできます.たとえば

$ pdftk a.pdf burst output bursted%02d.pdf

とすると, bursted01.pdf , bursted02.pdf ,…という名前になります.

background/multibackground/stamp/multistamp

これらのコマンドを使うと, 1 つの PDF ファイルの前面/背面に別の PDF ファイルを重ね合わせることができます.

$ pdftk (入力ファイル) background (重ねるファイル) output (出力ファイル)

のように,直後に重ねる PDF ファイルの名前を続ける必要があります.たとえば,全ページにハンコを押さなければいけない書類 a.pdf と,スキャンされたハンコのデータ b.pdf があったとき,

$ pdftk a.pdf stamp b.pdf output c.pdf

とすると,全ページにハンコが押された書類 c.pdf が完成します.

background/multibackground を使うと,重ねるファイルが入力ファイルの背面に置かれます.逆に stamp/multistamp を使うと重ねるファイルが入力ファイルの前面に置かれます.

background/stamp を使うと,重ねるファイルの 1 ページ目が,入力ファイルの全ページに重ねられます.一方 multibackground/multistamp を使うと,重ねるファイルの 1, 2, 3, …ページ目が,それぞれ入力ファイルの 1, 2, 3, …ページ目に重ねられます.

help

以上で大体基本的な使い方は網羅していると思います.もっと詳細な使い方を見るには,

$ pdftk --help

とすると,英語のヘルプが表示されます.

無料でもちゃんとできる!

以上, PDF ファイルを編集できる無料ソフト PDFtk の紹介でした.

この記事が誰かの役に立てればこの上なく幸せです!

*1:Mac/Linux であれば, brew や apt や yum などで pdftk あるいは pdftk-java と打っても入ります.

*2:east/right は右, west/left は左に倒れ, south/down は 180 度回転します. pdftk を 2 回実行して right を 2 回かけると 180 度回転しますが, east は何度かけても右に倒れた状態のままです.すなわち, north/south/east/west は絶対的ですが, left/right/down は相対的です.ページが回転した状態の PDF ファイルは, north で元に戻すことができます.