我尝试使用CAM :: PDF
解析PERL中的以下文件但是,当我打开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。 请告诉我,如果在解析一些线条的时候我可以做的更好(尤其是那些在单词中间断开的线条)。
答案 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 [...]