wkhtmltopdf не создает PDF веб-сайта - PullRequest
0 голосов
/ 09 ноября 2011

Я нашел в Интернете учебник о том, как создать форму Wkhtmltopdf, в которой вы можете ввести URL своего веб-сайта, и он автоматически создаст PDF.

Сначала мне нужно было скачать исполняемый файл wkhtmltopdf-amd64 по адресу: http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

Есть два кода:

Форма (вставлена ​​в index.php):

<form action="http://localhost:8888/dev.crm/wkhtmltopdf.php" method="POST">Website:&nbsp;
<input name="url" size="30" type="text" value="http://www.examplewebsite.com" />
<input type="submit" value="transform into a pdf" /> </form>

Файл wkhtmltopdf.php (вставлен в файл wkhtmltopdf.php):

<?php

/****************************
 BEGIN CONFIG
****************************/

// path to the program wkhtmltopdf
$conf['wkhtmltopdf'] = "http://www.mydomain.com/var/wkhtmltopdf-amd64";

// arguments for the programma wkhtmltopdf
// for example: --margin-top 50 --margin-bottom 30
// look: http://code.google.com/p/wkhtmltopdf/w/list
$conf['wkhtmltopdf_arg'] = "";

/****************************
 END CONFIG
****************************/

// reads url
$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
if (!preg_match($pattern, $_REQUEST['url'])) {
die("no valid URL");
}

// temporary file
$output = "http://www.mydomain.com/dev.crm/tmp/output.pdf";

// gets the html of the document
$html = file_get_contents($_REQUEST['url']);

// gets the title of document
preg_match("/\<title\>(.+)\<\/title\>/is", $html, $matches);

// looks if there is a title
if (empty($matches[1])) {
$matches[1] = "output.pdf";
}

// create pdf from html
system($conf['wkhtmltopdf'] . " " . $conf['wkhtmltopdf_arg'] . " " . $_REQUEST['url'] . " " . $output);

// output pdf to the browser
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"" . $matches[1] . ".pdf\"");
readfile($output);

// remove pdf
unlink($output);

exit(0);
?>

Форма отлично работает и также вызывает wkhtmltopdf.php, но мой сервер почему-то не использует wkhtmltopdf-amd64. Когда я нажимаю кнопку преобразования в PDF, я вижу, что моя веб-страница загружается, но она пытается открыть PDF-файл, но я сразу получаю ошибку: «файл» .... pdf »не может быть открытым, потому что он пустой. Сохраняет PDF, но размер PDF составляет 0 байт.

Кто-нибудь знает, как я могу решить эту проблему? Я думаю, что он не использует файл wkhtmltopdf-amd64 на моем веб-сервере.

// обновление

Я увидел, что в форме я вставил локальный URL-адрес. Я изменил эту + строку:

output = "/ tmp / output.pdf"; Теперь я получил сообщение об ошибке на новой странице: Предупреждение: система () была отключена по соображениям безопасности в /home/.../domains/.../public_html/.../wkhtmltopdf.php в строке 40

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /home/.../domains/.../public_html/.../wkhtmltopdf.php:40) в / home / ... /domains/.../public_html/.../wkhtmltopdf.php в строке 43

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /home/.../domains/.../public_html/.../wkhtmltopdf.php:40) в / home / ... /domains/.../public_html/.../wkhtmltopdf.php в строке 44

Предупреждение: файл чтения (/tmp/output.pdf) [function.readfile]: не удалось открыть поток: такого файла или каталога нет в /home/.../domains/.../public_html/stage/wkhtmltopdf. PHP на линии 45

(... мои домены.)

1 Ответ

1 голос
/ 09 ноября 2011

Пожалуйста, измените

$output = "http://www.mydomain.com/dev.crm/tmp/output.pdf";

с чем-то вроде:

$output = "/tmp/output.pdf";

Я действительно не думаю, что вы можете выводить на какой-то URL, поэтому решение состоит в том, чтобы вывести его на ваш сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...