Lightweight Language Lovers
pdf-merge.pl
オリジナルを# で残しています。
1 use PDF::API2;
2
3 if(2 > scalar @ARGV) {
4 print <<"EOT";
5 #Usage: $0 <outfile> <infile1> ... <infileN>
6 Usage: $0 <outfile> <infile1,from,to> ... <infileN>
7
8
9 merges serveral pdf files into on ;-)
10
11 cheers,
12 fredo
13 EOT
14 }
15
16 my $outfile=shift @ARGV;
17
18 my $pdf=PDF::API2->new;
19
20 foreach my $in (@ARGV) {
21 # insert
22 (my $infile, my $page_from, my $page_to) = split /,/, $in;
23 # print STDERR 'loading file $in .';
24 print STDERR "loading file $in .";
25 # my $inpdf=PDF::API2->open($in);
26 my $inpdf=PDF::API2->open($infile);
27 my $pages=scalar @{$inpdf->{pagestack}};
28 # foreach my $page (1..$pages) {
29 foreach my $page ($page_from..$page_to) {
30 print STDERR "$page.";
31 $pdf->importpage($inpdf,$page);
32 }
33 $inpdf->end();
34 print STDERR " done.\n";
35 }
36
37 $pdf->saveas($outfile);
38
39 __END__
オリジナルのソースファイルは改行がDOS形式なのはいいとして、なぜか最終行だけ改行が入っていません。以下のワンライナーで変換しました。
perl -e '$/="\r\n";while (<>) {chomp;print "$_\n"}' pdf-merge.pl > pdf-merge2.pl
オリジナルの28行目のforeach は、範囲が(1ページ~PDFファイルのページ数)になっていますが、これを、from~toで限定するように変更しています。
使用方法は以下のように、「切り出し後のPDFファイルの名前 切り出し元のPDFファイルの名前,開始ページ,終了ページ」の順で指定します。切り出し元ファイルは複数指定出来ます。
pdf-merge2.pl newpdf.pdf srcpdf.pdf,2,2