php html转pdf




使用PHP将HTML+CSS转换为PDF? (20)

好的,我现在正在用这个砖头撞墙。

我有一个在Firefox 3和IE 7中呈现良好的HTML(不是XHTML)文档。它使用相当基本的CSS来设置它的样式,并且在HTML中呈现良好。

我现在正在将它转换为PDF。 我努力了:

  • DOMPDF :它有很多表格问题。 我分解了我的大型嵌套表,并且它有所帮助(在它耗尽高达128M的内存然后死去之前 - 这是我在php.ini中对内存的限制),但它使得表格变得非常混乱,似乎并没有得到图片。 这些表只是基本的东西,有些边框样式可以在不同的点添加一些线条;
  • HTML2PDF和HTML2PS :我其实有更好的运气。 它呈现了一些图像(所有图像都是谷歌图表网址),表格格式更好,但它似乎有一些复杂性问题,我还没有弄清楚,并且一直伴随着未知的node_type()错误。 不知道该从哪里出发; 和
  • Htmldoc :这对于基本的HTML似乎工作得很好,但几乎不支持CSS,所以你必须用HTML做所有事情(我没有意识到它仍然是2001年在Htmldoc-land中),所以对我来说是没用的。

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

我真的不敢相信我会陷入困境。 我错过了什么吗?


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文件中,放置这个代码(假设,也有一个source 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一样)


Web API

如果有人总是搜索这种东西,有一个免费的网站,允许您将HTML代码和网页转换为PDF。 还有一个(很小)的api,它允许你从url获得pdf文件。

在这里检查


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

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


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

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


重要提示:请注意,这个答案是在2009年编写的,它可能不是当今2018年最具成本效益的解决方案。浏览器和其他开源渲染器在这方面比现在好得多。

看看PrinceXML

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

哦,是的,我提到过,这是第一个(也可能是唯一一个)完全支持ACID2 HTML2PDF解决方案吗?

PrinceXML示例


不是PHP ,而是一个Java ,它执行以下任务:

Flying Saucer采用XML或XHTML并将CSS 2.1兼容的样式表应用于其中,以渲染为PDF

它可以从PHP通过system()或类似的调用使用。 尽管它需要input XML格式良好。


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

与此同时,mPDF版本为5.7,与HTML2PS / HTML2PDF相比,它得到了积极维护

但请记住,文档确实很难处理。 例如,看看这个页面: https://mpdf.github.io/https://mpdf.github.io/

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


只是碰到线程,我试过DOMPDF,它的工作完美。 我已经使用DIV和其他块级元素来定位所有东西,严格保持CSS 2.1,并且它发挥出色。


它已被提及,但我只想确认mpdf是最简单,最强大和最免费的html转换为pdf格式的转换器。 天空真的是极限。 你甚至可以生成动态的,用户生成的数据的PDF。

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

下载页面

伟大的article ,帮助我开始。


尝试抓住最新的每晚dompdf构建 - 我使用的是一个较老的版本,这是一个可怕的资源猪,并永远采取我的PDF格式。 从here抓住一晚之后。

它只需要几秒钟就可以生成PDF,而且它与PrinceXML / Docraptor一样可以很好地渲染。 似乎他们自从我上次使用它以来已经认真优化了dompdf代码!


我不认为一个PHP类将是用CSS呈现xHtml页面的最佳选择。

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

显而易见,呈现html页面的最佳方式是浏览器。 Firefox 3.0可以本地“打印”为pdf格式,torisugary开发了一个扩展(命令行打印)来使用它。 在这里你会找到它。

无论如何,仍然有许多问题runninr firefox 只是作为一个PDF转换器...

目前,我认为wkhtmltopdf是最好的(这是Safari浏览器使用的),快速,快速,真棒。 是的,开源,以及... wkhtmltopdf


我为PHP尝试了很多不同的库。 所有列出的我都试过了。 在我看来, TCPDF库是最好的折中性能/可用性。 安装和使用非常简单,在小型媒体应用中也有很好的性能。 如果您需要高性能和非常大的PDF文档,请使用Zend_PDF模块,但要准备好编码!


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

在HTML中不需要特别的东西。 在images / css / js链接中不需要绝对的URL。 也在localhost(开发机器)上工作。

目前该服务在4个Azure地区提供终端服务:美国东部,美国西部,欧盟北部,东南亚。

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

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

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

https://rotativahq.com


我推荐TCPDF或DOMPDF,是这样的顺序


最初在开篇中提到的HTML2PDF和HTML2PS正在谈论2009年的一个包裹,这个包裹现在已经断开

但是有一个更好的HTML2PDF

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

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


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


精细的渲染并不意味着什么。 它是否验证?

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


经过一些调查和一般的拉动解决方案似乎是HTML2PDFDOMPDF在表格,边界和适度复杂的布局方面做htmldochtmldoc看起来相当健壮,但几乎完全是CSS,并且我不想回到没有CSS的情况下为HTML htmldoc程序。

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文件,内存使用量为600M),这是非常荒谬的。

不幸的是,这是我所想到的最好的。


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

  1. HTM2PDF - 提供了一个将HTML转换为PDF的API,并且还提供了PHP SDK,这使得在PHP中实现起来非常简单; 它提供了欧洲,亚洲和美国的服务器选择
  2. PDFmyURL - 提供了一个API,可以将URL和HTML格式转换为PDF格式,其功能与HTM2PDF大致相同,但在负载均衡的环境中工作并且时间稍长

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

免责声明:我为运营这两个网站的公司工作。


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

CutyCapt

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





pdf-generation