akishin999の日記

調べた事などを書いて行きます。

PDF ファイル内の文字列を一括置換する

Adobe Acrobat では PDF ファイル内の文字列を一括置換する方法がないようなので、何か他のツールなどはないかと探していたところ、CAM::PDF という CPAN モジュールに付属の changepagestring.pl というスクリプトで出来そう、という情報を発見。

changepagestring.pl - search.cpan.org
http://search.cpan.org/dist/CAM-PDF/bin/changepagestring.pl

検索してみたのですが、実際に使ってみた、といった話があまり見つからなかったので、自分が試した際のメモをまとめてみました。

インストール

  • cpan でのインストール
# cpan -i CAM::PDF
  • ppm でのインストール

Windows の ActivePerl でも以下のようにインストールできます。

>ppm install CAM::PDF

スクリプトは ActivePerlインストールフォルダ\site\bin 以下にインストールされます。

スクリプトの書式は以下になります。

changepagestring.pl [options] infile.pdf search-regex replace-str [outfile.pdf]

使ってみる

以下のような感じで使います。

# changepagestring.pl -o ./example.pdf 'foo' 'bar' example_2.pdf

Windows の場合は changepagestring.bat の方を使えば良いようです。

>changepagestring.bat -o ./example.pdf "foo" "bar" example_2.pdf

また、Windows では置換対象文字列を囲む記号はシングルクォートではなくダブルクォートでないと上手く動作しないようでした。

スペースを含む文字列を置換したい場合は、スペースをバックスペースでエスケープしてあげる必要がありました。

>changepagestring.bat -o ./example.pdf "hello\ world" "HelloWorld" example_2.pdf

その他のスクリプト

CAM::PDF には他にもいくつかスクリプトが付属しています。
例えば、PDF 内のメタデータを置換するためには、changepdfstring.pl(changepdfstring.bat) が使用できます。

以下のようにすることで、PDF 内に貼られたリンクの URL を書き換える事が出来ます。

>changepdfstring.bat -o ./example.pdf "http://example.com/foo" "http://example.com/bar" ./example2.pdf

changepdfstring.pl - search.cpan.org
http://search.cpan.org/~cdolan/CAM-PDF/bin/changepdfstring.pl

まだ軽く試してみただけですが、今のところは問題なく置換後の PDF は表示できています。

一括置換については他に代替ツールなどが無さそうなので、個人的にこのモジュールはかなり嬉しかったです。
Windows 環境でも ActivePerl で簡単に使えるので、同じように PDF の一括置換でお悩みの方は一度試してみる価値はあるかと思います。