2011-10-12 86 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