我有很多pdf文档要合并在一起,所以我编写了这个代码来完成它。它适用于只有两个pdf文档需要合并的情况,但如果我给它两个以上的文档,额外的文档就会出现乱码。你能帮我找到问题吗?如何使用PDF :: API2将几个pdf合并为一个Perl?
#!/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 2012-04-12 16:47:00
是的,我看到了作为对另一个SO线程的类似问题的回答给出。问题是appendpdf.pl只合并两个pdf文档。我将使用一个使用appendpdf.pl的shell脚本来做到这一点,但这是错误的:没有必要的文件io(一个额外的读写),每个文件都会发生这种情况。 – user787747 2012-04-12 16:52:12
我是appendpdf.pl的作者。这是一个围绕CAM :: PDF的简单包装脚本。附加大量PDF文件是很简单的。看看appendpdf.pl源代码,你会看到。 – 2012-05-05 03:09:57