3

perl スクリプトで空白ページを検出する信頼できる方法はありますか? getPageText メソッドを使用して、次のスクリプトで実行しようとしました。こうすると、文字がなくグラフィックだけのページも白紙として認識されてしまいます。

#!/usr/bin/perl -w

use CAM::PDF;
my $filename=$ARGV[0];
my $doc = CAM::PDF->new($filename) || die "$CAM::PDF::errstr\n";
my $pages = $doc->numPages();
print $pages;

$content=$doc->getPageText(1);
print "length".length($content);
if(length($content)==0)
{
  print "File is empty";
}

foreach my $p ( 1 .. $doc->numPages() ) {
    my $str = $doc->getPageText($p);
    $str =~ m/[[:alnum:]]+/ms );  # actually returned text
    print "Result text:".qq($str);
 }

空白のページを見つける別の方法はありますか?

4

2 に答える 2

3

申し訳ありませんが、空白ページを確実に検出する方法はありません。

ただし、私は過去にこれを行いました:

pdftk を使用して、pdf を 1 ページの pdf ドキュメントにバーストしました。いずれかの PDF サイズが非常に小さい場合、画像が含まれていません。pdftotext が空の文字列を返す場合、テキストは含まれていません。pdftk を使用して、すべての適切な pdf を 1 つにまとめます。

お役に立てば幸いです。

于 2012-12-12T14:34:37.133 に答える
0

getPageText の代わりに getPageContentTree メソッドを使用すると、画像を含むページ上のすべてのオブジェクトを含むコンテンツ ストリームを取得できます。「コンテンツ」ハッシュ キーの値の長さを確認し、それが 0 の場合は、完全に空白のページです。

use CAM::PDF;
my $filename="testBook.pdf";
my $doc = CAM::PDF->new($filename) || die "$CAM::PDF::errstr\n";
my $pages = $doc->numPages();

my $i = 1;

while ($i <= $pages) {
    my $contentTree = $doc->getPageContentTree($i);

    my $content = $contentTree->{"content"};
    my $length = length($content);

    if ($length == 0) {
        print "page $i is blank!" ## delete it, log it to a list of blanks, etc.
    }
    $i++;
}
于 2012-12-12T20:16:22.340 に答える