wkhtmltopdf: загрузить PDF на HD пользователя

как автоматически загрузить (на HD пользователя) PDF-файл, сгенерированный с помощью wkhtmltopdf или быстро? Вы знаете... пользователь щелкает ссылку ("Скачать эту страницу как PDF") и загружает PDF на свой HD.

С Уважением

Хави


person ziiweb    schedule 17.02.2011    source источник
comment
Вы спрашиваете, как принудительно загрузить файл, а не просто открыть его в браузере?   -  person John Parker    schedule 17.02.2011


Ответы (2)


Вот как я это делаю в 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}\"")
person Ryan    schedule 17.02.2011

PHP: есть лучшие способы заставить wkhtmltopdf работать с PHP, однако мне нравится иметь возможность распечатать свою командную строку, чтобы мне было легче отлаживать результирующую страницу. Дело не только в коде, но и в правильности полей и других деталей страницы. Здесь wkhtmltopdf — это двоичный файл в корневом каталоге веб-сайта, поля равны нулю, фон выключен:

$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 также есть готовый пример именно для этого.

$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');
person Community    schedule 04.05.2011