2

私は現在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));

このスクリプトは正常に実行され、すべてのページが正常に抽出されますが、すべてのページが抽出され、シーケンス001002など003.

例えば:

testing001.pdf
testing002.pdf
testing003.pdf

...等。

すべてのページもこの形式で、欠落ページはありません。どうすればこれを入手できますか?

4

3 に答える 3

1

PDFPagesパラメータはsavePDFExtract、ページ番号のリストを取ります。カスタムファイルの命名スキームを指定できるようには設計されていません。代わりに、次のように自分で名前を指定できます。

$i++ while ($newpdf->savePDFExtract(
        PDFPages  => $i, 
        PDFSaveAs => $base_file_name . sprintf("%03d", $i)
    )
);
于 2012-12-18T12:10:06.833 に答える
0

use warningsこれはそれほど重要ではありませんが、use strict見落としがちな問題に関する貴重なデバッグ情報を提供します。

ドキュメントに記載されている内容とは異なることは承知していますが、 のような間接的なオブジェクト表記も避ける必要がありますnew PDF::Extract。クラス メソッドの呼び出しPDF::Extract->newは、はるかに安全です。

001文字列は数値と同じくらい有効であるため、プログラムがそのままページをスキップする理由がわかりません1。ただし、出力ファイル名を指定する方法はPDFSaveAs、xcall のオプションを必要なファイル名文字列に設定することです。

このコードsprintfは、元のファイル名からフォーマットを構築することによって機能します。たとえば、 に変わりtesting.pdfますtesting%03.pdfsetVarsこの形式は、生成される前にファイルに名前を付けるための呼び出しで使用できます。

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;
}
于 2012-12-18T12:26:59.613 に答える
0

このスクリプトは、あなたがやろうとしていることに対してやり過ぎです。PDFTK を使用します: http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

必要なことを非常に効率的に達成できます。

pdftk testing.pdf burst output testing%03d.pdf

これを Perl スクリプトの一部にする必要がある場合は、システム コールで PDFTK を呼び出すことができます。

于 2012-12-18T15:31:59.680 に答える