使用PHP将HTML + CSS转换为PDF? [关闭]

关闭。 这个问题是 题外话 。 它当前不接受答案。

想改善这个问题吗? 更新问题 ,使其成为Stack Overflow 的主题

3年前关闭。

我有一个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按需运行。

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


#1楼

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

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

可通过system()或类似的调用从PHP使用它。 尽管它要求XMLinput格式正确。


#2楼

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

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

编辑(2017):

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


#3楼

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

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

很棒的文章帮助我入门。


#4楼

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


#5楼

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


#6楼

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

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


#7楼

1)使用MPDF

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




2)使用pdfToHtml

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一样多的页面。)


#8楼

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

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


#9楼

网络API

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

在这里检查


#10楼

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

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

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

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


#11楼

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

同时,与HTML2PS / HTML2PDF相比,mPDF的版本为5.7,并且正在积极维护

但是请记住,该文档确实很难处理。 例如,查看以下页面: https : //mpdf.github.io/

这个库可以完成从html到pdf的非常基本的任务,但是更复杂的任务将需要一些时间来阅读和“理解”文档。


#12楼

如果您有权访问命令行,则可以使用PhantomJSURL (远程或本地)创建PDF

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

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


#13楼

在开幕文章中最初提到的HTML2PDF和HTML2PS就是在谈论带有此链接的2009软件包

但是有更好的HTML2PDF

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

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


#14楼

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

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

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

质量:

具有高品质的发动机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。

我已经用完了所有这三个函数,而本文旨在帮助任何人决定而不必为所有这些函数付费。 撰写本文并非认可任何一种产品,我与任何一种产品均无从属关系。


#15楼

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


#16楼

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

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

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

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

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

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

https://rotativahq.com


#17楼

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

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


#18楼

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


#19楼

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


#20楼

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

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

见下文:

原始HTML

将HTML转换为PDF


#21楼

我建议使用DocRaptor (使用PrinceXML作为“引擎”)


#22楼

经过一番调查和一般头发拉的解决方案似乎是HTML2PDFDOMPDF做了桌子,边界,甚至中等复杂的布局和可怕的工作HTMLDOC似乎相当强劲,但几乎完全CSS的无知,我不想回去做HTML布局,而不只是CSS该程序。

HTML2PDF看起来是最有前途的,但是我仍然遇到关于node_type的空引用参数的奇怪错误。 我终于找到了解决方案。 基本上,PHP 5.1.x可以在任何大小的字符串上使用正则表达式替换(preg_replace_ *)正常工作。 PHP 5.2.1推出了php.ini中的配置指令称为pcre.backtrack_limit。 此配置参数的作用是限制匹配的字符串长度。 为什么不介绍这个原因呢? 默认值选择为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),这是非常荒谬的。

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


#23楼

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

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


看看PrinceXML

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

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

PrinceXML示例


#24楼

只是为了打破话题,我尝试了DOMPDF,它运行得非常好。 我使用DIV和其他块级元素定位所有内容,我严格将其保留为CSS 2.1,并且播放效果非常好。


#25楼

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


#26楼

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


#27楼

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

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


#28楼

好消息! 快活

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

请享用! ^ _ ^


#29楼

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

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

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

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

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


#30楼

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

卡蒂·卡普特

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

相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页