2011-10-06 5 views
4

J'essaye d'extraire quelques informations du pdf. J'essaie d'utiliser getpdftext.pl à partir du module CAM::PDF. Quand je viens de courir $~ getpdftext.pl sample.pdf, il produit un texte du pdf à stdout.pdf d'analyse en perl

Mais je pense à écrire ceci dans un fichier texte et à analyser les champs obligatoires dans Perl. Quelqu'un peut-il me guider s'il vous plaît sur la façon de faire cela?

Mais quand j'essaie d'appeler pdftotext.pl à l'intérieur de mon script perl, j'obtiens une erreur No such file.

#program pour extraire le texte de pdf et l'enregistrer dans un fichier texte

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; 
} 

Répondre

0

Voir perldoc -f open. Vous voulez prendre le flux de sortie d'une commande externe et l'utiliser comme un flux d'entrée dans votre script Perl. C'est ce que le mode est -| pour:

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

merci mob, - | option aidée – sandyutd

3

Il serait probablement plus facile de faire getpdftext.pl à faire ce que vous voulez.

En utilisant le code de getpdftext.pl, ce code (non testé) doit générer le fichier PDF dans un fichier texte.

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

merci beaucoup AFresh – sandyutd

+0

De rien. Vous pouvez également travailler directement avec le texte au lieu de l'imprimer dans un fichier si vous préférez. Peut-être en changeant 'open my $ fo ...' en 'my $ docstr = '';' et 'print $ fo $ str;' en $ docstr. = $ Str; 'et en travaillant avec lui au lieu de' close $ fo; '. – AFresh1

Questions connexes