Я только что обнаружил wkhtmltopdf и пытаюсь использовать его в Perl CGI-скрипте для генерации PDF-файлов.По сути, скрипт perl записывает HTML-файл, вызывает wkhtmltopdf через system () для создания 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->» до вызова system () приводит к генерации файла pdf с выводом консоли wkhtmltopdf («Загрузка страниц (1/6) и т. Д.)» Вверхуфайл, так что я думаю, что происходит то, что wkhtmltopdf выдает эту информацию без заголовка на сервер и вызывает его сбой.Но я не могу найти какие-либо опции в документах wkhtmltopdf для отключения вывода на консоль, и я не могу найти метод perl для подавления / перенаправления этого вывода.
(Да, я знаю о WKHTMLTOPDF.pm, но у меня были проблемы с установкой его для моего вкуса ActivePerl, и я хотел избежать переключения, если это возможно.)