在PHP中将HTML转换为PDF?

6

我知道有很多关于这个问题的帖子。但是有人可以帮助我在我的本地主机上设置这个http://www.rustyparts.com/pdf.php脚本吗?我已经花了整整一周的时间来解决这个问题。我已经下载了imagemagic、ghostscript、activeperl等所有必要的工具,但是仍然无法使简单的示例正常工作。


2
这是一个已不再维护的库.. 它的最后版本发布于2006年!我会考虑使用一个更新且活跃的库。 - ncuesta
如果你决定不再使用当前的库,你可以在这里找到一个好的列表:http://stackoverflow.com/q/3178448/264628。看起来你正在尝试wkhtmltopdf,但是也有许多纯PHP解决方案。 - BrianS
4个回答

10

通过系统调用使用wkhtmltopdf。需要安装帮助,请参见如何在基于Linux(共享主机)的Web服务器上安装wkhtmltopdf

wkhtmltopdf是一个命令行程序,允许从URL、本地HTML文件或stdin创建PDF。它生成像WebKit引擎渲染的PDF。

请查看此页面中的示例here

在Ubuntu上测试的PHP代码(您需要将/tmp/更改为Windows上的临时目录):

$url = 'http://www.google.com';
$pdffile = tempnam('/tmp/', 'wkhtmltopdf_');
$handle = popen("wkhtmltopdf $url $pdffile 2>&1", "r");
while (!feof($handle)) 
  fread($handle, 4096);
pclose($handle);
header('Content-type: application/pdf');
$file = fopen($pdffile, "r");
while(!feof($file))
  print fread($file, 4096);
unlink($pdffile);

还有 php绑定库,可以避免自己调用系统调用,这是一个更简单(也更安全!)的选择。

try {
    $wkhtmltopdf = new Core_Wkhtmltopdf(array('path' => APPLICATION_PATH . '/../public/uploads/'));
    $wkhtmltopdf->setTitle("Title");
    $wkhtmltopdf->setHtml("Content");
    $wkhtmltopdf->output(Wkhtmltopdf::MODE_DOWNLOAD, "file.pdf");
} catch (Exception $e) {
    echo $e->getMessage();
}

好的,很酷,看起来很棒,我能在我的网站上使用这个库吗?我不是 PHP 大师,只是在学习一些东西。 - user147
@marcog,HTML需要有效吗?不是问题,只是问一下。 - Dejan Marjanović
是的,我也这么认为。非常棒的项目。感谢提供示例。 - Dejan Marjanović
尝试 { $wkhtmltopdf = new Core_Wkhtmltopdf(array('path' => APPLICATION_PATH . '/../public/uploads/')); $wkhtmltopdf->setTitle("标题"); $wkhtmltopdf->setHtml("内容"); $wkhtmltopdf->output(Wkhtmltopdf::MODE_DOWNLOAD, "file.pdf"); } catch (Exception $e) { echo $e->getMessage(); } - user147
APPLICATION_PATH - 这应该是我在硬盘上安装wkt的路径吗?在c://program files...? - user147
显示剩余23条评论

3

简单而强大:http://html2pdf.fr/zh-cn/default

$html = file_get_contents("valid.html");
require_once("html2pdf.class.php");
$html2pdf = new HTML2PDF("P", "A4", "en", array(10, 10, 10, 10));
$html2pdf->setEncoding("ISO-8859-1");
$html2pdf->WriteHTML($html);
$html2pdf->Output("pdf/PDF.pdf", "F"); //output to file
$html2pdf->Output(); //output to browser

是的,只需将其提取到根文件夹中,您就可以开始了。 - Dejan Marjanović
好的,我会看一下,谢谢伙计 :) - user147
我得到了这个错误信息:preg_match() 函数期望第二个参数为字符串,但在 C:\xampp\htdocs\cpt\html2pdf\html2pdf.class.php 的第 970 行却传入了一个数组。 - user147
可能你的 HTML 不合法,为了成功转换它,必须保持有效,可以检查此网站:http://validator.w3.org/ - Dejan Marjanović
现在它是有效的,但只是给我一个空白页,我使用了这段代码: $url = "http://localhost/cpt/?cat=4"; $ch = curl_init(); $timeout = 5; // 为0时不设超时 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch);require_once(TEMPLATEPATH . '/html2pdf/html2pdf.class.php'); $html2pdf = new HTML2PDF('P', 'A4', 'fr'); $content = $file_contents; $html2pdf->WriteHTML($content); $html2pdf->Output('this_shit.pdf'); - user147
显示剩余2条评论

1

DocRaptor.com 是一个不错的选择 - 它使用Prince XML,因此质量比其他工具更好,而且它是一个Web应用程序,无需下载。它还可以在任何语言中使用。


0
此外,还有另一个生成PDF文件的库:TCPDF。它非常好用且相当简单。你可以在周围找到许多示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接