将HTML + CSS转换为PDF \[关闭\]

php PHP

老丝阿飞

2020-03-13

我有一个HTML(不是XHTML)文档,可以在Firefox 3和IE 7中很好地呈现。它使用相当基本的CSS对其进行样式设置,并在HTML中很好地呈现。

我现在正在寻找一种将其转换为PDF的方法。我试过了:

  • DOMPDF:表格有很大的问题。我考虑了我的大型嵌套表并对其进行了帮助(在此之前,它只消耗了128M的内存然后就死了-这就是我对php.ini中的内存的限制),但是它使表完全混乱,并且似乎没有得到图片。这些表只是基本的东西,带有一些边框样式,以便在各个点添加一些线;
  • HTML2PDF和HTML2PS:实际上,我很幸运。它呈现了一些图像(所有图像都是Google Chart URL),并且表格格式要好得多,但是似乎存在一些我尚未发现的复杂性问题,并且一直死于未知的node_type()错误。不知道从这里去哪里;
  • Htmldoc:这似乎在基本HTML上可以正常工作,但是几乎不支持CSS,因此您必须使用HTML进行所有操作(我没有意识到在Htmldoc-land还是2001年……),所以对我来说毫无用处。

我尝试了一个名为Html2Pdf Pilot的Windows应用程序,该应用程序实际上做得相当不错,但是我需要的东西至少要在Linux上运行,并且最好在Web服务器上通过PHP按需运行。

我缺少什么,或者如何解决此问题?

第1481篇《将HTML + CSS转换为PDF \[关闭\]》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

29个回答
小小猪猪 2020.03.13

不是PHP,而是Java,它可以完成以下任务:

飞碟采用XML或XHTML并对其应用CSS 2.1兼容的样式表,以便呈现为PDF

它可以通过PHPsystem()或类似的调用PHP中使用尽管它要求XML的格式正确input

凯泡芙A 2020.03.13

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

我刚遇到jsPDF,这是使用HTML5 / JavaScript的客户端解决方案。MIT许可的代码也在GitHub上

小小Itachi 2020.03.13

网络API

如果有人总是在搜索此类内容,则有一个免费的网站,可让您将html代码和页面转换为pdf。还有一个(很小)的api,可让您从网址获取pdf文件。

在这里检查

Harry乐Harry 2020.03.13

我已经尝试了许多不同的PHP库。我尝试过的所有清单。在我看来,TCPDF库是最佳的性能/可用性折衷方案。安装和使用非常简单,在中小型应用程序中也具有良好的性能。如果您需要高性能和非常大的PDF文档,请使用Zend_PDF模块,但准备好进行编码!

伽罗西门小胖 2020.03.13

TCPDF可以正常工作,没有依赖关系,是免费的,并且不断地修正。如果提供的HTML / CSS内容格式正确,则速度合理。我通常会生成50-300 kB的HTML输入(包括CSS),并在1-3秒内获得10-15 PDF页面的PDF输出。

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

路易Sam神无 2020.03.13

精细渲染没有任何意义。可以验证吗?

无论输入有多糟糕,所有浏览器都将尽其所能在屏幕上显示某些内容。当然,他们不会做同样的事情。如果您想要与FireFox相同的渲染,则可以使用其渲染引擎。有PDF生成器。但是,这是一项艰巨的工作。

Pro逆天猿 2020.03.13

尽管已经提供了许多解决方案,但我还是建议以下两种:

  1. HTM2PDF-提供了将HTML转换为PDF的API,还提供了PHP SDK,这使得在PHP中实现起来非常容易。它提供了在欧洲,亚洲和美国的服务器位置选择
  2. PDFmyURL-提供了一个API,该URL也可以将URL和HTML转换为PDF,其功能与HTM2PDF大致相同,但是可以在负载平衡的环境下工作,并且已经使用了更长的时间

这两个API与前面提到的所有解决方案的不同之处在于-除了使用CSS和JavaScript将HTML转换为PDF外,它还提供PDF权限管理,水印和加密。因此,对于那些想要踏踏实实地工作的人来说,这是一个一体化的解决方案。

免责声明:我为Kaiomi(一家同时经营这两个网站的公司)工作。

泡芙神无伽罗 2020.03.13

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

HTML不需要任何特殊的东西。在images / css / js链接中不需要绝对URL。也可以在本地主机(开发计算机)上工作。

目前,该服务在4个Azure区域具有终结点:美国东部,美国西部,欧盟北部,东南亚。

由于它使用专有协议将网页内容发送到API以转换为PDF,因此速度很快。

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

免费帐户可用于测试或低使用率。网站上的详细信息:

https://rotativahq.com

猿小小 2020.03.13

也许您可以在将文件交给转换器之前尝试使用Tidy。如果某个渲染器在某些HTML问题(例如未关闭的标签)上感到窒息,则可能会有所帮助。

Green猿古一 2020.03.13

我建议按此顺序使用TCPDF或DOMPDF。

西里小卤蛋 2020.03.13

我不认为php类是用CSS渲染xHtml页面的最佳选择。

新的CSS规则出台后会发生什么?(很快的CSS 3.0 ...)

显然,呈现html页面的最佳方法是浏览器。Firefox 3.0可以本机以pdf格式“打印”,因此必须开发一个扩展(命令行打印)来使用它。在这里您会找到它。

无论如何,还是有很多problmes runninr火狐只是作为一个PDF转换...

目前,我认为wkhtmltopdf是最好的(野生动物园浏览器使用的),速度快,速度快,很棒。是的,还有开源... 看看吧

古一NearEva 2020.03.13

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

它确实运行良好,并且是免费的解决方案。

看一下为这个确切问题制作的示例脚本。

斯丁西门 2020.03.13

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

我已经对当前市场上的大多数Web服务进行了一些研究,请在下面找到我认为值得在此线程上提及的API,这些API以价格/价值比为基础进行排序。它们都提供了预先编写的PHP类和包。

  1. pdflayer.com-费用:$-质量:☆☆☆☆
  2. docraptor.com - Cost: $$$ - Quality: ☆☆☆☆☆
  3. pdfcrowd.com - Cost: $$ - Quality: ☆☆☆

Quality:

Having the high-quality engine PrinceXML as a backbone, DocRaptor clearly offers the best PDF quality, returning highly polished and well converted PDF documents. However, the pdflayer API service gets pretty close here. Pdfcrowd does not necessarily score with quality, but with processing speed.

Cost:

pdflayer.com - As indicated above, the most cost-effective option here is pdflayer.com, offering an entirely free subscription plan for 100 monthly PDFs and premium subscriptions ranging between $9.99-$119.99. The price for 10,000 monthly PDF documents is $39.99.

docraptor.com-提供7天的免费试用期。高级订阅计划的价格从15美元到2250美元不等。每月10,000个PDF文档的价格约为$ 300.00。

pdfcrowd.com-免费提供一次 100个PDF 高级订阅计划的价格从$ 9- $ 89不等。每月10,000个PDF文档的价格约为$ 49.00。

我已经使用了所有这三个函数,而本文旨在帮助任何人决定而不必为所有这些函数付费。编写本文并不是为了支持任何一种产品,我与任何一种产品都不隶属。

Tony阿飞 2020.03.13

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

卡蒂·卡普特

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

飞云西里神乐 2020.03.13

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

江山如画 2020.03.13

尝试获取最新的每晚dompdf版本-我使用的是较旧的版本,这是非常糟糕的资源消耗,并且花了很多时间才能呈现我的pdf。这里抢了一个晚上

生成PDF只花了几秒钟的时间,并且与PrinceXML / Docraptor一样好呈现自从我上次使用它以来,似乎他们已经认真优化了dompdf代码!

梅古一 2020.03.13

关于Zend的devzone的教程,内容涉及从php生成pdf(第1 部分第2部分),而没有任何外部库。我从未实现过这种解决方案,但是由于它都是php,因此您可能会发现它更易于实现和调试。

村村乐 2020.03.13

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

但是有更好的HTML2PDF

它基于TCPDF,尽管部分使用法语。

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

村村AL 2020.03.13

好吧,如果您想找到一个完美的XHTML + CSS到PDF转换器库,那就算了。这是不可能的。因为就像找到一个完美的浏览器(XHTML + CSS渲染引擎)一样。我们有一个吗?IE或FF?

我在DOMPDF方面取得了一些成功。事实是,您必须修改HTML + CSS代码以配合该库的工作方式。除此之外,我还有不错的成绩。

见下文:

原始HTML

将HTML转换为PDF

十三Tony伽罗 2020.03.13

已经提到过了,但是我只是想确认一下mpdf是那里最简单,最强大和最免费的HTML到pdf转换器。天空真的是极限。您甚至可以生成动态的,用户生成的数据pdf。

例如,一个客户想要一个CMS系统,以便他可以更新他在俱乐部播放的音乐的曲目列表。那没问题,但是他还希望用户能够下载播放列表的.pdf,因此该可下载的pdf也必须由cms更新。多亏了mpdf,有了一些简单的循环和散布的变量,我才能做到这一点。我原本以为要花上几周的时间花了我几分钟。

很棒的文章帮助我入门。

Tony西门古一 2020.03.13

我正在使用fpdf使用PHP生成PDF文件。到目前为止,对我来说,生成简单的输出效果很好。

Stafan路易 2020.03.13

我建议使用DocRaptorPrinceXML用作“引擎”)

NearSamHarry 2020.03.13

好消息!快活

Snappy是一个非常简单的开源PHP5库,允许从url或html页面生成缩略图,快照或PDF。而且...它使用了基于Webkit 出色wkhtmltopdf

请享用!^ _ ^

Near卡卡西 2020.03.13

看一看wkhtmltopdf它是开源的,基于webkit且免费。

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

编辑(2017):

如果今天要建造一些东西,我不会再走那条路了。
但是会改用http://pdfkit.org/
可能会剥离其所有的nodejs依赖关系,以在浏览器中运行。

达蒙西里 2020.03.13

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

鸣人 2020.03.13

只是为了突兀,我尝试了DOMPDF,它工作得很好。我使用过DIV其他块级元素来放置所有内容,我严格将其保留为CSS 2.1,并且播放效果非常好。

逆天西门 2020.03.13

经过一番调查和一般的梳理,该解决方案似乎是HTML2PDFDOMPDF在表格,边框,甚至是相当复杂的布局方面做得很糟糕,而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; 是的,一千兆字节
  • max_execution_time = 600; #是,10分钟

现在,精明的读者可能已经注意到我的HTML文件小于100k。我能猜出为什么会遇到这个问题的唯一原因是html2pdf在此过程中进行了向xhtml的转换。也许这把我接了过来(尽管近50%的膨胀似乎很奇怪)。无论如何,以上都是可行的。

现在,html2pdf是一个资源消耗。我的70k文件大约需要5分钟,并且至少需要500-600M的RAM才能创建35页的PDF文件。不幸的是,到目前为止,下载速度不够快(到目前为止),并且内存使用率使内存使用率处于1000到1的顺序(70k文件的RAM为600M),这是非常荒谬的。

不幸的是,这是我想出的最好的方法。

西里神奇 2020.03.13

Why don’t you try mPDF version 2.0? I used it for creating PDF a document. It works fine.

Meanwhile mPDF is at version 5.7 and it is actively maintained, in contrast to HTML2PS/HTML2PDF

But keep in mind, that the documentation can really be hard to handle. For example, take a look at this page: https://mpdf.github.io/.

Very basic tasks around html to pdf, can be done with this library, but more complex tasks will take some time reading and "understanding" the documentation.

Sam梅小胖 2020.03.13

重要提示: 请注意,此答案写于2009年,可能不是当今2019年最具成本效益的解决方案。如今,在线替代方案要比那时更好。

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


看看PrinceXML

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

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

PrinceXML示例

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android