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 拆分为一页 pdf 文档。如果其中一个 pdf 的大小非常小,则它不包含图像。如果 pdftotext 返回空字符串,则它不包含文本。使用 pdftk 将所有好的 pdf 组合成一个。

我希望它会帮助你。

于 2012-12-12T14:34:37.133 回答
0

如果使用 getPageContentTree 方法而不是 getPageText,则可以获得包含页面上所有对象(包括图像)的内容流。检查“内容”哈希键的值的长度,如果等于 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 回答