我有一个HTML(不是XHTML)文档,可以在Firefox 3和IE 7中呈现。它使用相当基本的CSS来设置它并在HTML中呈现得很好。
我现在正在采用将其转换为PDF的方法。我试过了:
我尝试了一个名为Html2Pdf Pilot的Windows应用程序实际上做了相当不错的工作,但我需要一些至少在Linux上运行的东西,理想情况下通过Web服务器上的PHP按需运行。
我错过了什么,或者我该如何解决这个问题?
它已被提及,但我想确认mpdf是最简单,最强大,最免费的HTML到pdf转换器。天空真的是极限。您甚至可以生成动态的,用户生成的数据的pdf。
例如,客户想要一个CMS系统,这样他就可以更新他在俱乐部播放的音乐的曲目列表。这没问题,但他也希望用户能够下载播放列表的.pdf,所以这个可下载的pdf也必须由cms更新。感谢mpdf,有一些简单的循环和散布的变量,我可以做到这一点。我认为会花费数周时间的东西花了我几分钟。
伟大的article帮助我开始。
好吧,如果你想找到一个完美的XHTML + CSS到PDF转换库,那就别忘了。这远非可能。因为它就像找到一个完美的浏览器(XHTML + CSS渲染引擎)。我们有吗? IE或FF?
我在DOMPDF上取得了一些成功。问题是你必须修改HTML + CSS代码以适应库的工作方式。除此之外,我有很好的结果。
见下文:
最初在开场文章中提到的HTML2PDF和HTML2PS正在讨论2009年的link软件包
但有一个更好的HTML2PDF
它基于TCPDF,但部分是法语。
您可以在页面上重复使用表格页眉或页脚,并具有页码和总页数。见its examples。我已经使用它超过三年并推荐它。
我正在使用fpdf使用PHP生成PDF文件。到目前为止,它对我来说效果很好,可以产生简单的输出。
尝试抓住最新的每晚dompdf构建 - 我使用的是旧版本,这是一个非常糟糕的资源,并且永远用于渲染我的pdf。从here每晚抓住。
生成PDF只需要几秒钟 - 而且它与PrinceXML / Docraptor的渲染效果一样好。看起来他们已经认真优化了dompdf代码,因为我上次使用它!
Darryl Hein上面提到TCPDF 可能是一个好主意。 Nicola Asuni的代码非常方便和强大。唯一的杀手是,如果您计划将PDF文件与生成的PDF合并,则它没有这些功能。您必须创建PDF,然后使用像Sid Steward的PDFTK(www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)合并它。
就成本而言,在许多情况下,使用Web服务(API)可能是更明智的方法。此外,通过外包此流程,您可以卸载自己的基础架构/后端,并且 - 如果您使用的是信誉良好的服务 - 确保兼容调整Web标准,正常运行时间,缩短处理时间和快速内容交付。
我已经对目前市场上的大多数Web服务进行了一些研究,请在下面找到我认为值得一提的API,基于价格/价值比的订单。他们都提供预先组成的PHP类和包。
质量:
PrinceXML
拥有高品质的引擎DocRaptor作为主干,显然提供最佳的PDF质量,返回高度抛光和转换良好的PDF文档。然而,pdflayer API服务在这里非常接近。 Pdfcrowd不一定按质量得分,而是加工速度。
成本:
pdflayer.com - 如上所述,这里最具成本效益的选择是pdflayer.com,提供100个月度PDF和高级订阅的完全免费订阅计划,范围在9.99美元至119.99美元之间。 10,000份月度PDF文档的价格为39.99美元。
docraptor.com - 提供7天免费试用期。高级订阅计划的价格从15美元到2250美元不等。 10,000个月PDF文件的价格约为300.00美元。
pdfcrowd.com - 免费提供100个PDF文件。高级订阅计划的价格从9美元到89美元不等。 10,000份月度PDF文件的价格约为49.00美元。
我已经使用了所有这三个,这个文本应该帮助任何人决定,而不必支付所有这些。本文未被认可为任何一种产品,我与任何产品没有任何关系。
看看wkhtmltopdf
。它是开源的,基于webkit和免费。
我们写了一个小教程here。
编辑(2017):
如果今天要建造一些东西,我就不会再去那条路了。 但是会使用http://pdfkit.org/代替。 可能会剥夺其所有nodejs依赖项,以便在浏览器中运行。
也许您可以在将文件传递给转换器之前尝试使用Tidy。如果其中一个渲染器在某些HTML问题上窒息(如未关闭的标记),则可能会有所帮助。
我不认为php类最适合用css渲染xHtml页面。
当新的css规则问世时会发生什么? (很快css 3.0 ...)
渲染html页面的最佳方式是,浏览器。 Firefox 3.0本身可以“打印”pdf格式,torisugary开发了一个扩展(命令行打印)来使用它。 Here you'll find it.
无论如何,运行firefox仍然存在很多问题,就像pdf转换器一样......
目前,我认为wkhtmltopdf是最好的(这是safari浏览器使用的那个),快速,快速,真棒。是的,开源也是...... Give it a look
我开发了一个公共API来从网页构建PDF文件。它有一个很好的PHP客户端类,使它非常易于使用。它使用wkhtmltopdf在云中呈现PDF。
不需要HTML中的任何特殊内容。在images / css / js链接中不需要绝对URL。也适用于localhost(开发机器)。
目前,该服务在4个Azure区域设有终端:美国东部,美国西部,欧盟北部,东南亚。
它很快,因为它使用专有协议将网页内容发送到API以转换为PDF。
它是可靠的,因为所有端点都是负载平衡的。
免费帐户可用于测试或低使用率。网站详情:
我按顺序推荐TCPDF或DOMPDF。
精细渲染并不意味着什么。它有效吗?
无论输入多么糟糕,所有浏览器都能尽最大努力在屏幕上显示内容。当然,他们不会做同样的事情。如果你想要与FireFox相同的渲染,你可以使用它的渲染引擎。有pdf生成器。不过,这是一项非常多的工作。
虽然已经提供了很多解决方案,但我推荐以下两个:
与前面提到的所有解决方案中的这两个API不同的是,除了使用CSS和JavaScript将HTML转换为PDF之外,它还提供PDF权限管理,水印和加密。因此,对于那些想要立即投入使用的人来说,这是一个一体化的解决方案。
免责声明:我为Kaiomi工作,这是一家经营这两个网站的公司。
HTML到PDF转换真的需要使用PHP在服务器端进行吗?
我刚遇到jsPDF,一个使用HTML5 / JavaScript的客户端解决方案。麻省理工学院授权的code is on GitHub也是。
TCPDF工作正常,没有依赖关系,是免费的,并且经常被修复。如果提供的HTML / CSS内容格式良好,则速度合理。我通常生成50 - 300 kB的HTML输入(包括CSS),并在1-3秒内获得PDF输出,包含10 - 15个PDF页面。
我强烈建议在将任何内容发送到TCPDF之前使用整齐的库作为HTML漂亮的格式化程序。
经过一些调查和一般的拔毛解决方案似乎是HTML2PDF。 DOMPDF做了一个糟糕的工作,桌子,边框,甚至中等复杂的布局和htmldoc似乎相当健壮,但几乎完全CSS无知,我不想回到没有CSS只为该程序做HTML布局。
HTML2PDF看起来最有希望,但我一直有关于node_type的空引用参数的这个奇怪的错误。我终于找到了解决方案。基本上,PHP 5.1.x在任何大小的字符串上使用正则表达式替换(preg_replace_ *)都可以正常工作。 PHP 5.2.1引入了一个名为pcre.backtrack_limit的php.ini配置指令。此配置参数的作用是限制完成匹配的字符串长度。为什么这是介绍我不知道。默认值选择为100,000。为什么这么低的价值呢?再一次,不知道。
一个bug was raised against PHP 5.2.1 for this,差不多两年后仍然开放。
令人恐惧的是,当超过限制时,替换只是默默地失败。至少如果一个错误被提出并记录下来,你就会知道发生了什么,为什么以及要修改什么来修复它。但不是。
所以我有一个70k的HTML文件转换成PDF。它需要以下php.ini设置:
现在精明的读者可能已经注意到我的HTML文件小于100k。我可以猜到为什么我遇到这个问题的唯一原因是html2pdf转换为xhtml作为过程的一部分。也许这让我过去了(虽然近50%的膨胀看起来很奇怪)。无论如何,上述工作都有效。
现在,html2pdf是一种资源匮乏。我的70k文件需要大约5分钟和至少500-600M的RAM来创建35页的PDF文件。不幸的是,实时下载速度不够快(到目前为止)并且内存使用率使内存使用率大约为1000比1(700k文件的RAM为600M),这完全是荒谬的。
不幸的是,这是我提出的最好的。
不是PHP,而是Java library,它可以做到这一点:
Flying Saucer采用XML或XHTML并将CSS 2.1兼容的样式表应用于它,以便渲染为PDF
它可以从PHP通过system()
或类似的调用使用。虽然它需要input
的XML格式良好。
你为什么不试试mPDF version 2.0?我用它来创建PDF文档。它工作正常。
与此同时,mPDF版本为5.7,与HTML2PS / HTML2PDF相比,它是主动维护的
但请记住,文档真的很难处理。例如,看看这个页面:https://mpdf.github.io/。
围绕html到pdf的非常基本的任务可以使用这个库完成,但更复杂的任务需要一些时间阅读和“理解”文档。
a)在yourfolder
中提取
b)在yourfolder
中创建file.php并插入这样的代码:
<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output(); exit;
?>
c)从浏览器打开file.php
1)将pdftohtml.exe解压缩到根文件夹:
2)在该文件夹内,在anyfile.php文件中,放入此代码(假设,还有一个源example.pdf):
<?php
$source="example.pdf";
$output_fold="FinalFolder";
if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>
3)进入FinalFolder,并且会有转换后的文件(源PDF文件的页数很多......)
结帐TCPDF。它具有一些HTML到PDF功能,可能足以满足您的需求。它也是免费的!
我建议DocRaptor(使用PrinceXML
作为“引擎”)
好消息! Snappy!
Snappy是一个非常简单的开源PHP5库,允许从URL或html页面生成缩略图,快照或PDF。并且...它使用了优秀的基于webkit的wkhtmltopdf
请享用! ^ _ ^
只是为了碰撞线程,我尝试过DOMPDF并且它工作得很好。我已经使用DIV
和其他块级元素来定位所有内容,我严格保持CSS 2.1并且它播放得非常好。