繁体   English   中英

wkhtmltopdf / perl:HTTP标头和日志记录

[英]wkhtmltopdf/perl: HTTP headers & logging

我刚刚发现了wkhtmltopdf,并且试图在perl CGI脚本中使用它来生成PDF。 基本上,perl脚本编写一个HTML文件,通过system()调用wkhtmltopdf创建一个pdf,然后下载pdf并删除临时文件。

open NNN, ">$path_to_files/${file}_pdf.html" or die "can't write file: $!";
print NNN $text;
close NNN;

my @pdfSettings = (
    "d:/very/long/path/wkhtmltopdf",
    "$path_to_files/${file}_pdf.html",
    "$path_to_files/$file.pdf"
    );

system(@pdfSettings);

open(DLFILE, '<', "$path_to_files/$file.pdf");
   print $q->header(
        -type=> 'application/x-download',
        -attachment => "$file.pdf",
        -filename => "$file.pdf",
        'Content-length' => -s "$path_to_files/$file.pdf",
);

binmode DLFILE;
print while <DLFILE>;
close (DLFILE);


unlink("$path_to_files/${file}_pdf.html");
unlink("$path_to_files/${file}.pdf");

这在我的本地服务器上工作正常。 但是,当我将其上传到我的公共服务器时,它可以创建pdf文件,然后死于“指定的CGI应用程序由于不返回完整的HTTP标头而行为不当”。

将“ print $ q-> header”移动到system()调用之前会导致pdf在文件顶部使用wkhtmltopdf的控制台输出(“正在加载页面(1/6)等”)生成。发生的是,wkhtmltopdf正在将该信息无标题地发送到服务器,并导致其失败。 但是我无法在wkhtmltopdf文档中找到任何选项来关闭控制台输出,并且我也找不到能阻止/重定向该输出的perl方法。

(是的,我知道WKHTMLTOPDF.pm,但是我在安装ActivePerl时遇到了麻烦,我想尽可能避免切换。)

通过qx或反引号而不是system()执行,然后将输出重定向到NUL怎么样?


qx("d:/very/long/path/wkhtmltopdf" "$path_to_files/${file}_pdf.html" "$path_to_files/$file.pdf" > NUL: 2> NUL:);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM