我目前正在使用PDF::Extract
模块
我试过了:
testing.pdf
脚本:
use strict;
use PDF::Extract;
my $input = $ARGV[0];
my $newpdf = new PDF::Extract(PDFDoc => $input);
my $i = 1;
$i++ while ($newpdf->savePDFExtract(PDFPages => sprintf("%03d", $i)));
此脚本成功运行,但在提取过程中缺少某些页面。 2.分:
use strict;
use PDF::Extract;
my $input = $ARGV[0];
my $newpdf = new PDF::Extract(PDFDoc => $input);
my $i = 1;
$i++ while ($newpdf->savePDFExtract(PDFPages => $i));
此脚本成功运行,所有页面都成功提取,但我所有页面都已提取,并包含序列001
,002
,003
等。
例如:
testing001.pdf
testing002.pdf
testing003.pdf
...等
此页面中的所有页面都没有丢失的页面。我怎么能得到这个?
答案 0 :(得分:1)
PDFPages
的{{1}}参数采用页码列表。它不是为了让您指定自定义文件命名方案而设计的。您可以自己指定名称,如下所示:
savePDFExtract
答案 1 :(得分:0)
您应始终use warnings
,这不像use strict
那样重要,但会提供一些有关容易忽视的问题的宝贵调试信息。
我知道这不是文档所说的,但你也应该避免使用new PDF::Extract
中的间接对象表示法。类方法调用PDF::Extract->new
更安全。
我不明白你的程序为什么会按原样跳过页面,因为字符串001
与数值1
一样有效。但是指定输出文件名的方法是将xcall的PDFSaveAs
选项设置为所需的文件名字符串。
此代码的工作原理是从原始文件名构建sprintf
格式。例如,它会将testing.pdf
更改为testing%03.pdf
。然后,可以在调用setVars
时使用此格式在文件生成之前命名该文件。
use strict;
use warnings;
use PDF::Extract;
my $input = $ARGV[0];
my $format = $input =~ s/\.([^.]*)\z/%03d.$1/r;
my $newpdf = new PDF::Extract(PDFDoc => $input);
my $i = 1;
while (1) {
$newpdf->setVars(PDFSaveAs => sprintf($format, $i));
my $success = $newpdf->savePDFExtract(PDFPages => $i));
last unless $success;
++$i;
}
答案 2 :(得分:0)
对于您要执行的操作,此脚本过于苛刻。我只想使用PDFTK: http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
它可以非常有效地完成您的需求:
pdftk testing.pdf burst output testing%03d.pdf
如果您需要将其作为Perl脚本的一部分,则可以通过系统调用调用PDFTK。