提问人: 提问时间:12/24/2008 最后编辑:8 revs, 8 users 64%cletus 更新时间:5/4/2023 访问量:955684
如何将 HTML 和 CSS 添加到 PDF 中 [已关闭]
How Can I add HTML And CSS Into PDF [closed]
问:
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。
7年前关闭。
我有一个 HTML(不是 XHTML)文档,可以在 Firefox 3 和 IE 7 中呈现良好。它使用相当基本的 CSS 来设置它的样式,并在 HTML 中呈现良好。
我现在正在寻找一种将其转换为 PDF 的方法。我试过:
- DOMPDF:它在表格方面存在巨大问题。我分解了我的大型嵌套表,它有所帮助(之前它只是消耗了多达 128M 的内存然后死亡——这是我在 php.ini 中的内存限制),但它使表格一团糟,似乎没有得到图像。表格只是一些基本的东西,带有一些边框样式,可以在各个点添加一些线条;
- HTML2PDF和HTML2PS:实际上,我的运气更好。它渲染了一些图像(所有图像都是 Google 图表 URL),表格格式要好得多,但它似乎有一些我还没有弄清楚的复杂性问题,并且一直因未知的 node_type() 错误而死亡。不知道该何去何从;和
- Htmldoc:这似乎在基本 HTML 上工作正常,但几乎不支持 CSS,因此您必须在 HTML 中完成所有操作(我没有意识到它在 Htmldoc-land 中仍然是 2001 年...... 所以它对我来说毫无用处。
我尝试了一个名为 Html2Pdf Pilot 的 Windows 应用程序,它实际上做得相当不错,但我需要至少在 Linux 上运行的东西,最好通过 PHP 在 Web 服务器上按需运行。
我缺少什么,或者我该如何解决这个问题?
答:
精细渲染并不意味着什么。它有效吗?
所有浏览器都尽其所能在屏幕上显示某些内容,无论输入多么糟糕。当然,他们不会做同样的事情。如果你想要与FireFox相同的渲染,你可以使用它的渲染引擎。有pdf生成器。不过,这是一项非常艰巨的工作。
也许您可以在将文件交给转换器之前尝试使用 Tidy。如果其中一个渲染器因某些 HTML 问题(如未关闭的标签)而窒息,它可能会有所帮助。
评论
在Zend的devzone上有一个教程,关于在没有任何外部库的情况下从php生成pdf(第1部分,第2部分)。我从未实现过这种解决方案,但由于它都是 php,您可能会发现它的实现和调试更加灵活。
好吧,如果您想找到一个完美的 XHTML+CSS 到 PDF 转换器库,那就算了。这远非可能。因为这就像找到一个完美的浏览器(XHTML+CSS渲染引擎)。我们有吗?IE还是FF?
我在DOMPDF上取得了一些成功。问题是你必须修改你的HTML+CSS代码,以符合库的工作方式。除此之外,我的成绩还不错。
见下文:
经过一些调查和一般的拉扯,解决方案似乎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;# 是的,1 GB;和
- max_execution_time = 600;# 是的,10 分钟。
现在,精明的读者可能已经注意到我的 HTML 文件小于 100k。我能猜到为什么我遇到这个问题的唯一原因是 html2pdf 作为该过程的一部分将转换为 xhtml。也许这让我接管了(尽管近 50% 的臃肿似乎很奇怪)。无论如何,上述方法都奏效了。
现在,html2pdf 是一个资源占用者。我的 70k 文件大约需要 5 分钟和至少 500-600M 的 RAM 才能创建一个 35 页的 PDF 文件。不幸的是,实时下载的速度不够快(到目前为止),内存使用率使内存使用率约为 1000 比 1(600K 文件需要 70M RAM),这完全是荒谬的。
不幸的是,这是我想出的最好的。
重要:请注意,这个答案是在 2009 年写的,在 2019 年的今天,它可能不是最具成本效益的解决方案。今天的在线替代品比当时更好。
以下是您可以使用的一些在线服务:
看一看 PrinceXML。
它绝对是目前最好的 HTML/CSS 到 PDF 转换器,虽然它不是免费的(但是嘿,你的编程也可能不是免费的,所以如果它为你节省了 10 个小时的工作,你就可以自由地回家了(因为你还需要考虑到替代解决方案将要求你使用正确的软件设置专用服务器))
哦,是的,我有没有提到这是第一个(也可能是唯一一个)执行完整 ACID2 的HTML2PDF解决方案?
只是为了增加线程,我尝试了 DOMPDF,它运行良好。我使用和其他块级元素来定位所有内容,我严格保留了 CSS 2.1,它玩得非常好。DIV
我正在使用 fpdf 使用 PHP 生成 PDF 文件。到目前为止,它对我来说效果很好,可以产生简单的输出。
查看 TCPDF。它具有一些 HTML 到 PDF 的功能,可能足以满足您的需求。它也是免费的!
评论
我不认为 php 类最适合使用 css 呈现 xHtml 页面。
当一个新的 css 规则出现时会发生什么?(即将推出 CSS 3.0...)
显然,呈现 html 页面的最佳方式是浏览器。 Firefox 3.0 可以原生地以 pdf 格式“打印”,torisugary 开发了一个扩展(命令行打印)来使用它。在这里你会找到它。
无论如何,仍然有很多问题可以作为pdf转换器运行firefox...
目前,我认为 wkhtmltopdf 是最好的(即 safari 浏览器使用的那个),快速、快速、令人敬畏。 是的,也是开源的......看一看
评论
看一看 wkhtmltopdf
。它是开源的,基于 webkit 并且是免费的。
我们在这里写了一个小教程。
编辑( 2017 ):
如果今天要建造一些东西,我不会再走那条路了。
但会改用 http://pdfkit.org/。
可能会剥离它的所有 nodejs 依赖项,以便在浏览器中运行。
为什么不试试 mPDF 2.0 版?我用它来创建PDF文档。它工作正常。
同时,mPDF 的版本为 5.7,与 HTML2PS/HTML2PDF 相比,它正在积极维护
但请记住,文档确实很难处理。例如,看看这个页面:https://mpdf.github.io/。
关于html到pdf的非常基本的任务,可以使用这个库来完成,但更复杂的任务将需要一些时间阅读和“理解”文档。
评论
mPDF
达里尔·海因(Darryl Hein)上面提到的TCPDF可能是一个好主意。Nicola Asuni 的代码非常方便且功能强大。唯一的杀手是,如果您打算将 PDF 文件与生成的 PDF 合并,它就没有这些功能。您必须创建 PDF,然后使用 Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) 的 PDFTK 之类的东西合并它。
我建议DocRaptor(用作“引擎”)PrinceXML
尝试获取最新的夜间 dompdf 构建 - 我使用的是一个旧版本,这是一个可怕的资源消耗,并且花了很长时间来渲染我的 pdf。从这里抢了一晚之后。
生成 PDF 只花了几秒钟 - 而且它和 PrinceXML / Docraptor 一样呈现得很漂亮。自从我上次使用它以来,他们似乎已经认真优化了 dompdf 代码!
好消息!活泼!!
Snappy 是一个非常简单的开源 PHP5 库,允许从 url 或 html 页面生成缩略图、快照或 PDF。和。。。它使用优秀的基于 WebKit 的 WKHTMLTOPDF
享受!^_^
这个问题已经很老了,但还没有看到有人提到 CutyCapt,所以我会:)
可爱上尉
CutyCapt 是一个小型的跨平台命令行实用程序,用于 捕获 WebKit 渲染的网页到各种向量和 位图格式,包括 SVG、PDF、PS、PNG、JPEG、TIFF、GIF 和 BMP
不是 PHP,而是一个 Java 库,它执行以下操作:
Flying Saucer 采用 XML 或 XHTML 并应用符合 CSS 2.1 的标准 样式表,以便呈现为 PDF
它可以通过 PHP 或类似的调用来使用。尽管它需要 XML 格式正确的 .system()
input
已经提到过了,但我只想确认 mpdf 是最简单、最强大和最免费的 HTML 到 pdf 转换器。天空真的是极限。您甚至可以生成用户生成的动态数据的 pdf。
例如,一位客户想要一个 CMS 系统,这样他就可以更新他在俱乐部播放的音乐的曲目列表。这没问题,但他也希望用户能够下载播放列表的.pdf,因此这个可下载的pdf也必须由cms更新。多亏了 mpdf,通过一些简单的循环和穿插的变量,我就可以做到这一点。我以为需要几周才能完成的事情实际上花了我几分钟。
帮助我开始的好文章。
我推荐 TCPDF 或 DOMPDF,按此顺序排列。
我尝试了很多不同的PHP库。我尝试过的所有列出的。 在我看来,TCPDF库是性能/可用性的最佳折衷方案。 它的安装和使用非常简单,在中小型应用中也具有良好的性能。 如果您需要高性能和非常大的 PDF 文档,请使用Zend_PDF模块,但要准备好努力编码!
评论
HTML到PDF的转换真的需要使用PHP在服务器端进行吗?
我刚刚遇到了jsPDF,一个使用HTML5 / JavaScript的客户端解决方案。麻省理工学院许可的代码也在 GitHub 上。
评论
- 使用 MPDF ! ==
a) 提取yourfolder
b) 创建文件.php并插入以下代码:yourfolder
<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output(); exit;
?>
c) 从浏览器打开文件.php
2)使用pdfToHtml!
将 PDFtohtml.exe 解压缩到根文件夹:
在该文件夹中的 anyfile.php 文件中,放置以下代码(假设也有一个源示例 .pdf):
输入 FinalFolder,将有转换后的文件(与源 PDF 的页面数量一样多..)
TCPDF工作正常,没有依赖关系,是免费的,并且不断修复错误。如果提供的 HTML/CSS 内容格式良好,则具有合理的速度。我通常生成 50 - 300 kB 的 HTML 输入(包括 CSS),并在 1-3 秒内获得 10 - 15 个 PDF 页面的 PDF 输出。
我强烈建议在将任何内容发送到 TCPDF 之前使用 tidy 库作为 HTML 漂亮的格式化程序。
评论
Web API
如果有人总是搜索这种东西,有一个免费的网站,允许您将html代码和页面转换为pdf。还有一个(非常小的)api,允许您从url获取pdf文件。
虽然已经提供了许多解决方案,但我推荐以下两种:
- HTM2PDF - 提供了一个将 HTML 转换为 PDF 的 API,并且还有一个 PHP SDK,这使得它非常容易在 PHP 中实现;它提供了欧洲、亚洲和美国的服务器位置选择
- PDFmyURL - 提供了一个 API,该 API 也可以将 URL 和 HTML 转换为 PDF,其功能与 HTM2PDF大致相同,但在负载平衡的环境中工作,并且已经存在了更长的时间
这两个 API 与前面提到的所有解决方案的不同之处在于,除了使用 CSS 和 JavaScript 将 HTML 转换为 PDF 之外,它还提供 PDF 权限管理、水印和加密。因此,对于那些想要开始工作的人来说,这是一个多合一的解决方案。
免责声明:我在 Kaiomi 工作,这是一家运营这两个网站的公司。
评论
如果您有权访问命令行,则可以使用 PhantomJS 从 (远程或本地) 创建。PDF
URL
它运行良好,并且是一个免费的解决方案。
请看一下针对这个确切问题制作的示例脚本。
最初在开篇文章中提到的HTML2PDF和HTML2PS是用这个链接谈论 2009 年的软件包
但有一个更好的HTML2PDF
它以 TCPDF 为基础,尽管它部分是法语的。
您可以设置在页面上重复的表眉或页脚,并具有页码和总页数。请参阅其示例。我已经使用它三年多了,并推荐它。
就成本而言,在许多情况下,使用 Web 服务 (API) 可能是更明智的方法。此外,通过外包此过程,您可以减轻自己的基础设施/后端的负担,并且 - 前提是您使用的是信誉良好的服务 - 确保与调整 Web 标准、正常运行时间、较短的处理时间和快速内容交付兼容。
我已经对目前市场上的大多数 Web 服务进行了一些研究,请在下面找到我认为在此线程上值得一提的 API,按价格/价值比的顺序排列。他们都提供预先编写的PHP类和包。
- pdflayer.com - 成本:$ - 质量:☆☆☆☆
- docraptor.com - 成本:$$$ - 质量:☆☆☆☆☆
- pdfcrowd.com - 费用:$$ - 质量:☆☆☆
质量:
DocRaptor 以高质量的引擎为骨干,显然提供了最佳的 PDF 质量,返回高度抛光和转换良好的 PDF 文档。但是,pdflayer API 服务在这里非常接近。Pdfcrowd 不一定以质量得分,而是以处理速度得分。PrinceXML
成本:
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 美元。
我已经使用了所有三个,这篇文章应该可以帮助任何人做出决定,而无需支付所有这些费用。本文不是为了认可任何一种产品而写的,我与任何产品都没有隶属关系。
我开发了一个公共 API 来从网页构建 PDF 文件。它有一个很好的PHP客户端类,使其非常易于使用。它使用 wkhtmltopdf 在云中呈现 PDF。
HTML 中不需要任何特殊内容。images/css/js 链接中不需要绝对 URL。也适用于本地主机(开发机器)。
目前,该服务在 4 个 Azure 区域中具有终结点:美国东部、美国西部、欧洲北部、东南亚。
它的速度很快,因为它使用专有协议将网页内容发送到 API 以转换为 PDF。
它很可靠,因为所有终结点都是负载均衡的。
免费帐户可用于测试或低使用率。网站上的详细信息:
评论
@import
@media
@screen
chrome --headless --print-to-pdf="path/to/pdf" https://your_url