我在互联网上找到了一个关于如何创建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:
<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
(......是我的域名。)
答案 0 :(得分:1)
请修改
$output = "http://www.mydomain.com/dev.crm/tmp/output.pdf";
有类似的东西:
$output = "/tmp/output.pdf";
我真的不认为你可能会输出到某个URL,因此,解决方法是在服务器上输出。