答案 0 :(得分:2)
PHP:有更好的方法让wkhtmltopdf使用PHP,但是,我喜欢能够打印出我的命令行,以便我可以更容易地调试生成的页面。这不仅仅是关于代码,而是关于边距和其他页面细节的正确性。这里wkhtmltopdf是web根目录中的二进制文件,边距设置为零,后台关闭:
$do_it=$_SERVER["DOCUMENT_ROOT"]."/wkhtmltopdf --dpi 600 -B 0 -L 0 -R 0 -T 0 --no-background http://".$_SERVER['SERVER_NAME']."/".$filename." ".$_SERVER["DOCUMENT_ROOT"]."/".$pdf_url;
//var_dump($do_it); // uncomment to see your wkhtmltopdf parameters...
$whatever=passthru($do_it);
header('Content-disposition: attachment; filename='.$pdf_url);
header('Content-type: application/pdf');
readfile($pdf_url);
当谈到错误消息时,我认为运行passthru时不会回来,但是,无论你发送什么,它都会运行。 至于标题,重要的是将内容类型设置为PDF,否则浏览器将不知道如何处理它。
Snappy website实际上还有一个现成的例子。
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');
echo $snappy->getOutput('http://www.github.com');
答案 1 :(得分:0)
以下是我在RoR中的表现
filename = "MyNew.pdf"
fullpath = "#{RAILS_ROOT}/tmp/charts/#{filename}"
# system issues a shell command
system "/usr/local/bin/wkhtmltopdf \"http://localhost/page/to/pdf?download=t\" #{fullpath}"
send_data(File.read(fullpath), :type => 'application/pdf', :filename => filename, :disposition => "attachment;filename=\"#{filename}\"")