私は一緒にマージするPDF文書がたくさんあるので、私はそれを行うためにこのコードを書いた。私は2つのpdf文書をマージするだけの場合に動作しますが、2つ以上与えると余分な文書が文字化けして出てきます。何が間違っているのかを教えてもらえますか?PDF :: API2を使用して複数のpdfsをPerlで1つにマージするには?
#!/usr/bin/perl
use PDF::API2;
use List::Util qw(reduce);
# Given two pdfs and a page number, appends the given page of the second pdf to the first pdf
sub append_page_to_pdf {
my ($pdf1, $pdf2, $pg) = @_;
$pdf1->importpage($pdf2, $pg);
}
# Given two pdfs, appends the second to the first. Closes pdf2
sub merge_2_pdfs {
my ($pdf1, $pdf2) = @_;
map &append_page_to_pdf($pdf1, $pdf2, $_), 1..$pdf2->pages;
$pdf2->end;
return $pdf1;
}
# does what it says
sub open_pdf {
my $file = $_[0];
my $pdf = PDF::API2->open($file);
print "Opened pdf ($file)\n";
return $pdf;
}
# reduces merge_2_pdfs over an array of pdfs
sub merge_pdfs {
my @files = @_;
my $starting_filename = shift @files;
my $start_pdf = &open_pdf($starting_filename);
my $final_pdf = reduce { &merge_2_pdfs($a, &open_pdf($b)) } $start_pdf, @files;
return $final_pdf;
}
# Get the arguments ie save_name, file1, file2, file3, ...
my @files = @ARGV;
my $save_name = shift @files;
my $save = &merge_pdfs(@files);
$save->saveas($save_name);
http://p3rl.org/appendpdf.pl – daxim
はい、私はそれを見ました他のSOスレッドに関する同様の質問に対する答えとして与えられます。問題は、appendpdf.plは2つのpdfドキュメントのみをマージすることです。 appendpdf.plを使ってシェルスクリプトを実行しますが、それは間違っています:ファイルごとに発生する不必要なファイルio(余分な読み書き)があります。 – user787747
私はappendpdf.plの著者です。これは、CAM :: PDFを中心とした単純なラッパースクリプトです。大量のPDFを追加するのは簡単です。 appendpdf.plのソースコードを見れば分かります。 –