wkhtmltopdf / perl: HTTP заголовки и ведение журнала - PullRequest
1 голос
/ 07 апреля 2011

Я только что обнаружил 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, и я хотел избежать переключения, если это возможно.)

1 Ответ

1 голос
/ 07 апреля 2011

Как насчет выполнения через qx или backticks вместо system () и перенаправления вывода в NUL:?


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