如何从CGI脚本启动HTMLDOC?

时间:2008-11-07 09:07:26

标签: html pdf cgi

我有一个CGI脚本,它从HTML页面生成一个.pdf文件。我的问题是,当它从Web浏览器启动时,没有创建.pdf文档。

到目前为止我做了什么:

  • chmod设置设置为以上推荐(777)
  • 在脚本上测试了文件的正常输出,效果很好
  • 从命令行在服务器上本地运行时,.cgi脚本正常工作

为什么从Web浏览器运行时脚本不起作用?

#!/usr/bin/perl
use LWP::Simple;
use HTML::HTMLDoc;
use CGI;
print "Content-type: text/html\n\n";
print "<html><head><title>test</title></head>";
print "<body>";

my $htmldoc->set_html_content(qq~<html><body>A PDF file</body></html>~);
my $pdf = $htmldoc->generate_pdf() or die($!);
$pdf->to_file('/var/www/tom.pdf');
print "</body></html>";

2 个答案:

答案 0 :(得分:1)

您将生成的文件发送到浏览器的哪个位置?

请注意,您无法在HTML中嵌入PDF;你必须

  • 将文件放在您的网络服务器将提供该文件的位置,并将该文件的链接发送到浏览器
  • 或将内容类型设置为application/pdf,然后只返回文件(周围没有任何HTML标记)。

答案 1 :(得分:1)

最可能的原因是/var/www无法写入apache进程(或您正在使用的任何Web服务器),因此如果您从命令行运行它 - 使用您的用户权限 - 它成功了,但是当从Web浏览器调用时,Web服务器使用自己的(非常有限的)权限运行它,然后写入失败。

您需要先检查to_file方法的返回码以查看写入是否成功,其次 - 写入允许Web服务器写入的目录,例如{{1} }。