2011-10-12 84 views
0

我使用的是從CAM :: PDF中提取PDF並將其打印到文本中的getpdftext.pl,但在我的web應用程序中,我想調用這個getpdftext.pl內部的.cgi腳本。你能建議我該怎麼做或如何繼續前進。我試圖將getpdftext.pl轉換爲getpdftext.cgi,但它不起作用。如何在.cgi腳本中調用.pl文件

感謝所有

這是從我的request_admin.cgi腳本中提取

my $filename = $q->param('quote'); 
: 
: 
: 
&parsePdf($filename); 

#function to extract text from pdf ,save it in a text file and parse the required fields 
sub parsePdf($) 
{ 
    my $i; 
    print $_[0]; 
    $filein = "quote_uploads/$_[0]"; 
    $fileout = 'output.txt'; 

    print "inside parsePdf\n"; 

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

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

    while(<IN>) 
    { 
     print "$i"; 
     $i++; 
     print OUT; 
    } 

} 
+0

您的意思是'打開「 - |」,「perl的getpdftext.pl $ filein「或死」錯誤:$!「;'? – 2011-10-12 04:15:20

+0

yes jack ..i指的是「perl getdpftext.pl $ filein」 – sandyutd

+0

我收到以下錯誤:權限在/request_admin.cgi行301, line 414.,referer http://abc.com/adminForm.html Line 301:打開OUT,「> $ fileout」或死掉「error:$!」; – sandyutd

回答

1

這是極有可能

  • 你的CGI腳本的環境是不完整的,足以找到 getpdftext.pl和/或
  • 網絡服務器用戶沒有執行權限它無論如何

看看你的網絡服務器的錯誤日誌,看看它是否報告任何指針爲什麼這不起作用。

+0

非常感謝RET,錯誤發生在'open OUT','$ fileout'或死「error:$!」;'獲取Permission denied錯誤,文件存在,我應該怎麼做 – sandyutd

+0

首先,確保getpdftext.pl腳本可以被任何人執行,並且改變CGI腳本來調用它,使用其完整的絕對路徑 – RET

0

在您的特定情況下,它可能是更簡單,更直接的直接使用CAM::PDF,這應該已經與getpdftext.pl一起安裝反正。

我看了一下這個劇本,我認爲你的parsePdf子可以很容易地進行書面:

#!/usr/bin/perl 
use warnings; 
use strict; 

use CAM::PDF; 

sub parsePdf { 
    my $filein = "quote_uploads/$_[0]"; 
    my $fileout = 'output.txt'; 

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

    my $doc = CAM::PDF->new($filein) || die "$CAM::PDF::errstr\n"; 
    my $i = 0; 

    foreach my $p ($doc->rangeToArray(1,$doc->numPages())) 
    { 
     my $str = $doc->getPageText($p); 
     if (defined $str) 
     { 
      CAM::PDF->asciify(\$str); 
      print $i++; 
      print $out_fh $str; 
     } 
    } 
} 
+0

非常感謝,vl試試這種方式,在我的程序中發現錯誤但無法調試,它在'open OUT, 「> $ fileout」或死「錯誤:$!」;' – sandyutd

+0

@sandyutd:這是試圖在當前目錄中寫入$ fileout的權限問題。將$ fileout更改爲'$ ENV {TEMPDIR}/output.txt',雖然這並不是很好 - 它肯定不會支持併發請求 - 但它至少會讓你前進。最終,您需要確保每個請求都使用自己的唯一臨時文件,即'$ ENV {TEMPDIR}/output - $$。txt'($$等於CGI進程的PID)。 – RET

+0

@sandyutd - 如果它適合,您也可以將調試輸出寫入STDERR,然後在apache日誌中查看它 – dwarring