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 $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のテキスト抽出などのための前処理にはいいかも。
- メタデータ(文書タイトルなど)は分割前のものが引き継がれる。