试图在PERL中解析pdf并且输出似乎有问题

时间:2012-09-10 21:17:33

标签: perl pdf

我尝试使用CAM :: PDF

解析PERL中的以下文件

http://www.roehampton.ac.uk/uploadedFiles/Pages_Assets/PDFs_and_Word_Docs/Human_Resources/VL%20Advert%20Biomedical%20Sciences%20Sep%2012.pdf

但是,当我打开PDF时,我似乎得到了许多新线。 这是我的示例代码的快照。

        my $file_name = 'file_3.pdf';
        my $filecontent;
        my @lines = '';
        my $save = "/home/tejas/Projects/Richmond/pdf/";
        $file_name = $save . $file_name;
        my $doc = CAM::PDF->new($file_name) || die "$CAM::PDF::errstr\n";

foreach my $p ( 1 .. $doc->numPages() ) {
    my $str = $doc->getPageText($p);
    if (defined $str) {
       CAM::PDF->asciify(\$str);
       print  $str;
    }
}

我已经下载并将pdf从链接存储到file_3.pdf。 请告诉我,如果在解析一些线条的时候我可以做的更好(尤其是那些在单词中间断开的线条)。

1 个答案:

答案 0 :(得分:1)

我跑了这个小剧本:

$ perl -MCAM::PDF -Mstrict - ~/Downloads/perldata.pdf 
my $doc = CAM::PDF->new($ARGV[0]) or die;
my $str = $doc->getPageText(1);
CAM::PDF->asciify(\$str);
my @blocks = split /\n\s*\n\s*\n/, $str;
foreach (@blocks) {
  $_=~ s/\s*\n\s*/ /g;
  print $_, "\n\n";
}
__END__

我将文件分成连续空行的块或段落。然后,我删除此段落中的所有换行符(包含周围空格)。如果我们用空格替换它(就像我上面所做的那样),我们会得到奇怪的空间。如果我们使用正则表达式s/\n//g,那么有些单词会在应该有空格的地方一起运行。但是这两种可能性都是可读的,试试看。

获得理想的解决方案并不容易。请记住,PDF格式是关于文档的图形表示而不是语义。

前几行看起来像这样:

Department of Life Sciences

Visiting Lecturer s (1.5 FTE) in B iomedical S cience s

The popularity [...]