使用perl检测并删除PDF文件中的空白页

时间:2012-12-12 14:29:22

标签: perl pdf

是否有可靠的方法使用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);
 }

是否有其他方法可以找到空白页?

2 个答案:

答案 0 :(得分:3)

抱歉,无法可靠地检测空白页面。

但是,我过去做过这个:

我使用pdftk将pdf破解成一页pdf文档。 如果其中一个pdf大小非常低,则不包含图像。 如果pdftotext返回空字符串,则它不包含文本。 使用pdftk将所有优秀的pdf组合成一个。

我希望它会对你有所帮助。

答案 1 :(得分:0)

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