当前位置:  开发笔记 > 编程语言 > 正文

用PHP将HTML + CSS转换为PDF?

如何解决《用PHP将HTML+CSS转换为PDF?》经验,为你挑选了27个好方法。

我有一个HTML(不是XHTML)文档,可以在Firefox 3和IE 7中呈现.它使用相当基本的CSS来设置它并在HTML中呈现得很好.

我现在正在采用将其转换为PDF的方法.我试过了:

DOMPDF:表格存在很大问题.我考虑了我的大型嵌套表并且它有所帮助(在它消耗高达128M的内存然后死亡之前 - 这就是我对php.ini内存的限制)但是它使表格完全混乱并且似乎没有得到图片.这些表只是基本的东西,有些边框样式可以在不同的点添加一些线条;

HTML2PDF和HTML2PS:我实际上有更好的运气.它呈现了一些图像(所有图像都是谷歌图表URL),表格格式要好得多,但它似乎有一些复杂性问题,我还没有想到,并且因为未知的node_type()错误而死亡.不知道从哪里开始; 和

Htmldoc:这似乎在基本HTML上运行良好,但几乎不支持CSS,所以你必须用HTML做所有事情(我没有意识到它仍然是2001年在Htmldoc-land ...)所以它对我来说没用.

我尝试了一个名为Html2Pdf Pilot的Windows应用程序,它实际上做得相当不错,但我需要的东西至少在Linux上运行,理想情况下通过Web服务器上的PHP按需运行.

我错过了什么,或者我该如何解决这个问题?



1> Mic..:

看看wkhtmltopdf.它是开源的,基于webkit和免费.

我们在这里写了一个小教程.

编辑(2017):

如果今天要建造一些东西,我就不会再去那条路了.
但是请改用http://pdfkit.org/.
可能会剥夺其所有nodejs依赖项,以便在浏览器中运行.


这个运作在最好的前提IMO.Boostrap转换现有渲染器而不是从头开始编写 - 不是一项简单的任务.此外,Webkit是用C++编写的,因此比基于PHP的实现更快,更少资源.
http://mikehaertl.github.io/phpwkhtmltopdf/这个抽象很不错
我们在尝试使用CentOS服务器正确渲染字体时遇到了很大的问题.经过几周的捣乱,似乎唯一的选择就是不使用CentOS.

2> SchizoDuckie..:

重要提示: 请注意,这个答案是在2009年写的,它可能不是2019年的最具成本效益的解决方案.今天的在线替代方案比当时更好.

以下是一些您可以使用的在线服务:

PDFShift

Restpack

PDF图层

DocRaptor

HTMLPDFA​​PI

HTML到PDF火箭


看看PrinceXML.

它绝对是最好的HTML/CSS到PDF转换器,虽然它不是免费的(但是,嘿,你的编程可能也不是免费的,所以如果它可以节省你10个小时的工作,你就可以免费回家了(因为你还需要考虑到替代解决方案将要求您使用正确的软件设置专用服务器)

哦是的,我是否提到这是第一个(也可能是唯一的)HTML2PDF解决方案,可以完成ACID2?

PrinceXML样本


太贵了.WKHTMLTOPDF(参见其他答案)是免费的,完成工作并使用很棒的webkit.
我的公司写了一个围绕Prince建立的网络服务.前期成本显着降低,无需安装任何东西即可使用:docraptor.com
我也使用过DocRaptor.无需支付昂贵的许可即可获得Prince的好处的绝佳方式.恭喜一个伟大的产品,乔尔.
如果您有命令行访问权限并且不想支付3500美元,那么使用此脚本的PhantomJS:https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js可能是一个解决方案 - 它是免费且简单的办法!

3> cletus..:

经过一些调查和一般的拔毛,解决方案似乎是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.为什么这么低的价值呢?再一次,不知道.

针对此问题针对PHP 5.2.1提出了一个错误,该错误在将近两年后仍然开放.

令人恐惧的是,当超过限制时,替换只是默默地失败.至少如果一个错误被提出并记录下来,你就会知道发生了什么,为什么以及要修改什么来修复它.但不是.

所以我有一个70k的HTML文件转换成PDF.它需要以下php.ini设置:

pcre.backtrack_limit = 2000000; #可能比我需要的还多,但没关系

memory_limit = 1024M; #yes,一千兆字节 ; 和

max_execution_time = 600; #yes,10分钟.

现在精明的读者可能已经注意到我的HTML文件小于100k.我可以猜到为什么我遇到这个问题的唯一原因是html2pdf转换为xhtml作为过程的一部分.也许这让我过去了(虽然近50%的膨胀看起来很奇怪).无论如何,上述工作都有效.

现在,html2pdf是一种资源匮乏.我的70k文件需要大约5分钟和至少500-600M的RAM来创建35页的PDF文件.不幸的是,实时下载速度不够快(到目前为止)并且内存使用率使内存使用率大约为1000比1(700k文件的RAM为600M),这完全是荒谬的.

不幸的是,这是我提出的最好的.



4> 小智..:

你为什么不试试mPDF 2.0版?我用它来创建PDF文档.它工作正常.

与此同时,mPDF版本为5.7,与HTML2PS/HTML2PDF相比,它是主动维护的

但请记住,文档真的很难处理.例如,看一下这个页面:https://mpdf.github.io/.

围绕html到pdf的非常基本的任务可以使用这个库完成,但更复杂的任务需要一些时间阅读和"理解"文档.



5> T.Todua..:
1)使用MPDF!

a)提取物 yourfolder

b)中创建file.phpyourfolder和插入这样的代码:

WriteHTML('

Hallo World
Fisrt sentencee

'); $mpdf->Output(); exit; ?>

c)从浏览器打开file.php




2)使用pdfToHtml!

1)将pdftohtml.exe解压缩到根文件夹:

2)在该文件夹内,在anyfile.php文件中,放入此代码(假设,还有一个源example.pdf):


3)进入FinalFolder,并且会有转换后的文件(源PDF文件的页数很多......)



6> Darryl Hein..:

结帐TCPDF.它具有一些HTML到PDF功能,可能足以满足您的需求.它也是免费的!



7> Filip Dupano..:

只是为了碰撞线程,我尝试过DOMPDF并且它工作得很好.我已经使用过DIV和其他块级元素来定位所有内容,我严格保持CSS 2.1并且它的播放效果非常好.



8> 小智..:

我建议DocRaptor(PrinceXML用作"引擎")



9> Starkers..:

它已被提及,但我想确认mpdf是最简单,最强大,最免费的html到pdf转换器.天空真的是极限.您甚至可以生成动态的,用户生成的数据的pdf.

例如,客户想要一个CMS系统,这样他就可以更新他在俱乐部播放的音乐的曲目列表.这没问题,但他也希望用户能够下载播放列表的.pdf,所以这个可下载的pdf也必须由cms更新.感谢mpdf,有一些简单的循环和散布的变量,我可以做到这一点.我认为会花费数周时间的东西花了我几分钟.

伟大的文章,帮助我开始.


播放列表的PDF.神救救我.

10> Paulo Coghi ..:

好消息!Snappy !!

Snappy是一个非常简单的开源PHP5库,允许从URL或html页面生成缩略图,快照或PDF.并且......它使用了优秀的基于webkit的wkhtmltopdf

请享用!^ _ ^



11> datasn.io..:

好吧,如果你想找到一个完美的XHTML + CSS到PDF转换库,那就别忘了.这远非可能.因为它就像找到一个完美的浏览器(XHTML + CSS渲染引擎).我们有吗?IE或FF?

我在DOMPDF上取得了一些成功.问题是你必须修改HTML + CSS代码以适应库的工作方式.除此之外,我有很好的结果.

见下文:

原始HTML

将HTML转换为PDF



12> Luke Wenke..:

HTML2PDF和html2ps的最初在开幕帖子中提到的在谈论2009年的包装这个环节

但是有更好的HTML2PDF

它基于TCPDF,但部分是法语.

您可以在页面上重复使用表格页眉或页脚,并具有页码和总页数.查看其示例.我已经使用它超过三年并推荐它.



13> 小智..:

我使用fpdf使用PHP生成PDF文件.到目前为止,它对我来说效果很好,可以产生简单的输出.



14> yoavf..:

有一个关于Zend的devzone的教程,从php(第1 部分,第2部分)生成pdf 而没有任何外部库.我从来没有实现过这种解决方案,但由于它都是php,你可能会发现实现和调试更加灵活.



15> 小智..:

Darryl Hein上面提到的TCPDF可能是一个好主意.Nicola Asuni的代码非常方便和强大.唯一的杀手是,如果您计划将PDF文件与生成的PDF合并,则它没有这些功能.您必须创建PDF,然后使用像Sid Steward的PDFTK(www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)合并它.



16> Arni J..:

尝试抓住最新的每晚dompdf构建 - 我使用的是旧版本,这是一个非常糟糕的资源,并且永远用于渲染我的pdf.从这里抓到一夜之后.

生成PDF只需要几秒钟 - 而且它与PrinceXML/Docraptor的渲染效果一样.看起来他们已经认真优化了dompdf代码,因为我上次使用它!



17> Frank..:

就成本而言,在许多情况下,使用Web服务(API)可能是更明智的方法.此外,通过外包此流程,您可以卸载自己的基础架构/后端,并且 - 如果您使用的是信誉良好的服务 - 确保兼容调整Web标准,正常运行时间,缩短处理时间和快速内容交付.

我已经对目前市场上的大多数Web服务进行了一些研究,请在下面找到我认为值得一提的API,基于价格/价值比的订单.他们都提供预先组成的PHP类和包.

    pdflayer.com - 费用:$ - 质量:☆☆☆☆

    docraptor.com - 费用:$$$ - 质量:☆☆☆☆☆

    pdfcrowd.com - 费用:$$ - 质量:☆☆☆

质量:

DocRaptor拥有高质量的引擎PrinceXML作为主干,显然提供最佳的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美元.

我已经使用了所有这三个,这个文本应该帮助任何人决定,而不必支付所有这些.本文未被认可为任何一种产品,我与任何产品没有任何关系.



18> chjortlund..:

如果你有机会到命令行很可能使用PhantomJS创建PDF从一个URL(远程或本地).

它工作得很好,是一个免费的解决方案.

看看这个针对这个问题的示例脚本.



19> Koen...:

这个问题已经很老了,但没有看到有人提到CutyCapt所以我会:)

CutyCapt

CutyCapt是一个小型跨平台命令行实用程序,用于捕获WebKit将网页呈现为各种矢量和位图格式,包括SVG,PDF,PS,PNG,JPEG,TIFF,GIF和BMP



20> 小智..:

我按顺序推荐TCPDF或DOMPDF.



21> PhiLho..:

也许您可以在将文件传递给转换器之前尝试使用Tidy.如果其中一个渲染器在某些HTML问题上窒息(如未关闭的标记),则可能会有所帮助.



22> Strae..:

我不认为php类最适合用css渲染xHtml页面.

当新的css规则问世时会发生什么?(很快css 3.0 ...)

渲染html页面的最佳方式是,浏览器.Firefox 3.0本身可以"打印"pdf格式,torisugary开发了一个扩展(命令行打印)来使用它.在这里你会找到它.

无论如何,还有很多问题只是作为一个pdf转换器运行firefox ...

目前,我认为wkhtmltopdf是最好的(这是safari浏览器使用的那个),快速,快速,真棒.是的,开源也是...... 看看吧



23> Giorgio Bozi..:

我开发了一个公共API来从网页构建PDF文件.它有一个很好的PHP客户端类,使它非常易于使用.它使用wkhtmltopdf在云中呈现PDF.

不需要HTML中的任何特殊内容.在images/css/js链接中不需要绝对URL.也适用于localhost(开发机器).

目前,该服务在4个Azure区域设有终端:美国东​​部,美国西部,欧盟北部,东南亚.

它很快,因为它使用专有协议将网页内容发送到API以转换为PDF.

它是可靠的,因为所有端点都是负载平衡的.

免费帐户可用于测试或低使用率.网站详情:

https://rotativahq.com



24> Stephan Egge..:

精细渲染并不意味着什么.它有效吗?

无论输入多么糟糕,所有浏览器都能尽最大努力在屏幕上显示内容.当然,他们不会做同样的事情.如果你想要与FireFox相同的渲染,你可以使用它的渲染引擎.有pdf生成器.不过,这是一项非常多的工作.



25> user1914292..:

虽然已经提供了很多解决方案,但我推荐以下两个:

    HTM2PDF - 提供了一个将HTML转换为PDF的API,还有一个PHP SDK,这使得它很容易在PHP中实现; 它提供欧洲,亚洲和美国的服务器位置选择

    PDFmyURL - 提供了一个API,它可以将URL和HTML 格式化为PDF,具有与HTM2PDF大致相同的功能,但可以在负载平衡的环境中工作,并且已经存在了一段时间

与前面提到的所有解决方案中的这两个API不同的是,除了使用CSS和JavaScript将HTML转换为PDF之外,它还提供PDF权限管理,水印和加密.因此,对于那些想要立即投入使用的人来说,这是一个多功能的解决方案.

免责声明:我为Kaiomi工作,这是一家经营这两个网站的公司.



26> Oliver Schaf..:

HTML到PDF转换真的需要使用PHP在服务器端进行吗?

我刚刚遇到了jsPDF,一个使用HTML5/JavaScript的客户端解决方案.麻省理工学院授权的代码也在GitHub上.



27> lubosdz..:

TCPDF工作正常,没有依赖关系,是免费的,并且经常被修复.如果提供的HTML/CSS内容格式良好,则速度合理.我通常生成50 - 300 kB的HTML输入(包括CSS),并在1-3秒内获得PDF输出,包含10 - 15个PDF页面.

我强烈建议在将任何内容发送到TCPDF之前使用整齐的库作为HTML漂亮的格式化程序.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有