Perl で PDF ファイルを分割、テキスト抽出する


Perl で さくっと PDF ファイルを分割、テキスト抽出する方法が無いかなあ?というざっくり調査の結果を紹介します。
CPAN モジュールを探したのだが、結論から言うとどれも一長一短でした。

PDF::Extract

http://search.cpan.org/~nsharrock/PDF-Extract-3.03/

その名の通り、指定ページをPDFから抽出するだけのシンプルモジュール。

PDF::Extract でページ分割

use PDF::Extract;
my $pdf = new PDF::Extract( PDFDoc=>’mypdf.pdf’ );

my $pageno=5;
#$pageno=$pdf->getVars(“PDFPageCount”); #これで取れるはず?だがうまくいかない

my $i=1;
#2ページずつPDFファイル分割
while($i <=$pageno){
my ($pagelist);
if ($pageno != $i){ #最終ページ以外
$pagelist = sprintf(‘%d %d’, $i, $i+1);
} else { #最終ページ
$pagelist = “$i”;
}
$pdf->savePDFExtract( PDFPages=>$pagelist);
$i += 2;
}

PDF::Extract の特徴

  • 特に何も指定しなくても オリジナルファイル名の後にページ番号を付けてファイルを分割してくれる。
    上記例だと、mypdf1_2.pdf、mypdf3_4.pdf、mypdf5.pdf、というファイルが生成される。
  • 分割後PDFを開いた時に「再構築しています…」というメッセージが表示される。このため、お客様向けPDFなどには不向きか。
  • ファイルからページ数の取得が、できるはずになっているができない。何かやり方が悪いのかも?
  • 巨大なPDFを受取ってしまったとか、PDFのテキスト抽出などのための前処理にはいいかも。
  • メタデータ(文書タイトルなど)は分割前のものが引き継がれる。