wkhtmltopdf不会创建网站的PDF

时间:2011-11-09 12:48:01

标签: php pdf exec

我在互联网上找到了一个关于如何创建Wkhtmltopdf表单的教程,您可以在其中输入您的网站URL,它将自动创建PDF。

首先我必须下载exec文件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文件。

//更新

我在表格中看到了我粘贴的localhost网址。我改变了那个+行:

output =“/ tmp / output.pdf”;现在我在新页面中出现错误:警告:出于安全原因,系统()已在第40行的/home/.../domains/.../public_html/.../wkhtmltopdf.php中被禁用

警告:无法修改标头信息 - 已在(home / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /第43行/domains/.../public_html/.../wkhtmltopdf.php

警告:无法修改标头信息 - 已在(home / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /第44行/domains/.../public_html/.../wkhtmltopdf.php

警告:readfile(/tmp/output.pdf)[function.readfile]:无法打开流:/home/.../domains/.../public_html/stage/wkhtmltopdf中没有此类文件或目录。第45行的PHP

(......是我的域名。)

1 个答案:

答案 0 :(得分:1)

请修改

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

有类似的东西:

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

我真的不认为你可能会输出到某个URL,因此,解决方法是在服务器上输出。