Converting html to pdf in php?
我知道有很多关于这个问题的帖子。但是有人可以帮我设置这个 http://www.rustyparts.com/pdf.php 脚本在我的本地主机上工作。我花了整整一周时间这个问题。我已经下载了imagemagic,ghostscript,activeperl,...,一切,但仍然无法制作简单的示例来工作。
- 那是一个不再维护的库……它的最后一个版本是 2006 年!我会考虑一个更新的 - 和活跃的 - 一个。
-
如果您决定不继续使用当前正在使用的库,您可以在此处找到一个很好的列表:stackoverflow.com/q/3178448/264628。看起来您正在尝试 wkhtmltopdf,但也有许多纯 PHP 解决方案。
通过系统调用使用 wkhtmltopdf。有关安装帮助,请参阅如何在基于 linux(共享主机)的 Web 服务器上安装 wkhtmltopdf。
wkhtmltopdf is a command line program
which permits to create a pdf from an
url, a local html file or stdin. It
produces a pdf like rendred with the
WebKit engine.
在此处查看此页面中的示例。
在 Ubuntu 上测试的 php 代码(您需要将 /tmp/ 更改为 Windows 上的临时目录):
1 2 3 4 5 6 7 8 9 10 11
| $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 绑定,无需自己使用系统调用,这是一个更简单(更安全!)的选项。
1 2 3 4 5 6 7 8
| 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 pdf 库 :(((但我需要创建系统将 html 页面导出为 pdf,用户单击网站上的链接,然后生成 pdf 文件?
-
小心那里的单引号。如果你想要变量替换,那些必须是双引号。
-
好的,很酷,看起来很棒,我可以在我的网站上使用这个库吗,我不是 php 大师,我只是在学习一些东西
-
@ncuesta 固定。 @user 这根本不是一个库,它是一个独立的二进制文件,您可以通过系统调用从 PHP 内部调用,如我所示。许多 html2pdf 使用自己的渲染引擎,这个使用了 Chrome、Safari 和其他主要浏览器中使用的优秀 WebKit 引擎。
-
我没有用 php 玩系统调用,所以我不知道如何使用它,在本地主机上安装是否简单,首先将检查这个 html2pdf.fr/en/default
-
@user 下载适当的版本并首先在命令行上尝试。我还找到了 php 绑定(请参阅答案中的编辑)。
-
@marcog,HTML 需要有效吗?不,这是问题,只是问。
-
@Webarto 它使用 webkit,所以它做得很好:无效的 html 和生成的 pdf
-
是的,我是这么想的。很不错的项目。谢谢举例。
-
那么如何在本地主机上安装它进行测试?
-
@user 我已经在上面提供了下载链接。尝试表现出一些努力。 :)
-
对不起,我花了整整一周的时间:SI 已经下载了 wkhtmltox-0.10.0_rc1-installer.exe 和来自 github github.com/mreiferson/php-wkhtmltox 这个,现在需要连接所有这些,...,如何做这个?抱歉,我不是 php 大师
-
我安装的第一件事,有没有一些简单的初学者教程?
-
oooo,c-rap,我不会再睡一晚:((为了让这件事在没有命令行的情况下工作
-
@user 您不需要命令行。使用我在回答中提供的示例代码。
-
好的,你能帮我多一点吗,我已经在我的本地主机 test.php 上进行了设置,并复制了你的代码,当然这行不通,我需要在我的 test.php 文件中包含什么。
-
只需复制这个: try { $wkhtmltopdf = new Core_Wkhtmltopdf(array('path' => APPLICATION_PATH .'/../public/uploads/')); $wkhtmltopdf->setTitle("Title"); $wkhtmltopdf->setHtml("内容"); $wkhtmltopdf->output(Wkhtmltopdf::MODE_DOWNLOAD,"file.pdf"); } catch (Exception $e) { echo $e->getMessage(); }
-
APPLICATION_PATH - 这应该是我在硬盘上安装 wkt 的路径?在 c:// 程序文件中...?
-
@user 我已经包含了一些我已经测试过的代码,它可以在 Ubuntu 上运行。正如我在回答中提到的,您需要更改 /tmp/ 以使其在 Windows 上工作。这里很晚了,我很困。希望我醒来看到你已经轻松解决了它。 :)
-
我已经用命令行做了这个工作,只是为了让它在 php 脚本中工作,好的,谢谢你的时间:) 我会再试几次。
-
不,它在 Windows 上对我不起作用您的代码。我将临时文件夹名称更改为 C:\\\\\\\\Windows\\\\Temp,c-rap :((
-
从命令行转换 html 页面时看起来真的很棒
-
问题,那个页面保存在哪里?那个pdf文件,保存在哪里?
-
@user tempnam 生成一个以 C:\\\\Windows\\Temp\\wkhtmltopdf_ 开头的随机文件名。该文件保存在那里,但 unlink 将其删除。如果您想测试它,请将 $pdffile 更改为静态并注释掉 unlink。
-
是的,这就是问题所在,文件已创建但未显示在浏览器中。它工作得很好,除了部分显示在浏览器中。
-
@user 尝试将 while(!feof($file)) print fread($file, 4096); 更改为 print file_get_contents($file);
-
不,那个,没有解决任何问题。别担心,没关系,会找到解决方案的 :)) tnx 寻求帮助。
-
tnx 伙伴,tnx 帮助我:)
简单但功能强大:http://html2pdf.fr/en/default
1 2 3 4 5 6 7
| $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 |
-
这看起来很棒,在本地主机上安装是否简单?然后在服务器上?
-
是的,只需将其解压缩到根文件夹中即可。
-
酷,我会看看这个,tnx 伙伴 :)
-
我明白了:preg_match() 期望参数 2 是字符串,数组在 C:\\\\xampp\\\\htdocs\\\\cpt\\\\html2pdf\\\\html2pdf.class.php 中给出,第 970 行
-
可能您的 HTML 无效,您必须保持其有效才能成功转换,请查看此站点:validator.w3.org
-
它是有效的,现在它只给我空白页,我使用此代码: $url ="localhost/cpt/?cat=4"; $ch = curl_init(); $超时= 5; // 无超时设置为零 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->输出('this_shit.pdf');
-
不要自己卷曲 :) 使用 file_get_contents。试试这个路径 127.0.0.1/cpt/?cat=4 ,如果仍然没有运气回声 $content 并查看它是否包含 HTML。
DocRaptor.com 是一个不错的选择 - 它使用 Prince XML,因此质量优于其他工具,而且它是一个网络应用程序,因此无需下载。它也适用于任何语言。
此外,还有另一个生成 PDF 文件的库:TCPDF。很好,很简单。你可以在周围找到很多例子。