2011-10-06 55 views
4

我想從pdf中提取一些信息。我正嘗試使用CAM::PDF模塊中的getpdftext.pl。當我運行$~ getpdftext.pl sample.pdf時,它會生成一個pdf文本到stdout。在perl中解析pdf

但我想寫這個文本文件並解析perl中的必需字段。有人可以請指導我如何做到這一點?

但是,當我嘗試在我的Perl腳本中調用pdftotext.pl我得到一個No such file錯誤。

#program從PDF提取文本,並將其保存在文本文件中

use PDF; 

use CAM::PDF; 

use CAM::PDF::PageText; 

use warnings; 

use IPC::System::Simple qw(system capture); 

$filein = 'sample.pdf';                 
$fileout = 'output1.txt'; 

open OUT, ">$fileout" or die "error: $!"; 

open IN, "getpdftext.pl $filein" or die "error :$!" ; 

while(<IN>) 
{ 
    print OUT $fileout; 
} 

回答

0

perldoc -f open。你想獲取外部命令的輸出流,並將其用作Perl腳本中的輸入流。這就是-|模式是什麼:

open my $IN, '-|', "getpdftext.pl $filein" or die $!; 
while (<$IN>) { 
    ... 
} 
+0

thanks mob, - |選項幫助 – sandyutd

3

它可能會更容易使getpdftext.pl做你想做什麼。

使用來自getpdftext.pl的代碼,這個(未經測試的代碼)應該輸出pdf到一個文本文件。

my $filein = 'sample.pdf';                 
my $fileout = 'output1.txt'; 

my $doc = CAM::PDF->new($filein) || die "$CAM::PDF::errstr\n"; 
open my $fo, '>', $fileout or die "error: $!"; 

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

close $fo; 
+0

非常感謝 – sandyutd

+0

不客氣。如果您願意,也可以直接使用文本而不是將其打印到文件中。可能通過將'打開我的$ fo ...'到'my $ docstr ='';'和print $ fo $ str;'到'$ docstr。= $ str;'並使用它而不是'close $ FO;'。 – AFresh1