PDF是一种标准格式,最初是由Adobe创建的,用于在固定的layout文档中表示文本和图像。 Web应用程序以PDF格式支持下载数据(例如发票或报告)并不少见,因此在本文中,我们将如何轻松地使用PHP轻松生成PDF文档。
DOMPDF是一个很棒的库,能够从HTML标记和CSS样式中生成PDF(主要是CSS 2.1符合CSS 2.1,并支持某些CSS3属性)。我们可以使用这些熟悉的技术来决定我们的内容应如何外观,然后轻松将其转换为固定的文档。该图书馆还有许多其他有用且有趣的功能。
钥匙要点
- > DOMPDF是一个可以将HTML标记和CSS样式转换为PDF文档的PHP库,使其对需要以PDF格式支持下载数据的Web应用程序有用。
>
- 要使用DOMPDF,需要通过GitHub或Composer安装它,并且需要PHP> = 5.0,并启用MBSTRING和DOM扩展。 HTML标记可以作为字符串或从文件或URL加载,然后渲染到PDF中。
>
- > DOMPDF是一种功能强大的工具,但它具有一些局限性,例如不耐受成型的HTML,并且仅对CSS3的支持有限。建议审查图书馆的文档和源代码,以充分了解其功能和潜在问题。
入门
DOMPDF可在GitHub上获得,可以使用Composer安装。诚然,基于作曲家的安装并正确运行仍然有些棘手,因此我建议您只使用Git安装DOMPDF。
该库需要PHP> = 5.0,并启用了MBSTRING和DOM扩展。它还需要一些字体,这些字体通常在大多数机器上可用。
导航到要放置库并执行的任何地方:
git clone https://github.com/dompdf/dompdf.git
git submodule init
git submodule update
登录后复制
登录后复制
登录后复制
通过下载DOMPDF,让我们写一个简短的示例,该示例将生成一个简单的PDF。
<span><span><?php
</span></span><span><span>set_include_path(get_include_path() . PATH_SEPARATOR . "/path/to/dompdf");
</span></span><span>
</span><span><span>require_once "dompdf_config.inc.php";
</span></span><span>
</span><span><span>$dompdf = new DOMPDF();
</span></span><span>
</span><span><span>$html = <span><span><<<'ENDHTML'</span>
</span></span></span><span><span><html>
</span></span><span><span> <body>
</span></span><span><span> <h1>Hello Dompdf</h1>
</span></span><span><span> </body>
</span></span><span><span></html>
</span></span><span><span><span>ENDHTML<span>;</span></span>
</span></span><span>
</span><span><span>$dompdf->load_html($html);
</span></span><span><span>$dompdf->render();
</span></span><span>
</span><span><span>$dompdf->stream("hello.pdf");</span></span>
登录后复制
登录后复制
要在项目中使用库,我们首先在包含大部分DOMPDF配置的Dompdf_config.inc.php中拉动。它还加载一个自动加载器和自定义配置文件,在其中我们可以覆盖默认配置参数。
HTML标记作为字符串作为load_html()方法的字符串。另外,我们可以使用load_html_file()方法从文件或URL加载标记。它接受文件网页的文件名或URL作为参数。
Render()方法将HTML渲染到PDF中,我们准备转储PDF文件。 Stream()将结果PDF作为浏览器的附件发送。 Stream()方法具有可选的第二个参数,一个选项数组:
- >接受范围 - 布尔值,发送“ Accept-Ranges”标头(默认为FALSE)。
。
- 附件 - 布尔值,发送“ content-disposition:actactment”标头强迫浏览器显示保存提示符(默认情况下为true)。
compress - boolean,启用内容压缩(默认为true)。- >
我们在这里生成了非常简单的PDF,但这不是很实际。实际上,我们通常会对纸张尺寸,页面方向,字符编码等有要求。我们可以设置数量的配置选项,以使DOMPDF更适合我们的现实世界需求。所有这些都在dompdf_config.inc.php中列出和解释
这将它们设置为默认值。您可以通过更新自定义配置文件dompdf_config.custom.inc.inc.php来更改这些值。一些重要的设置是:
> dompdf_default_paper_size - 设置PDF文档的默认纸张大小。可以在include/cpdf_adapter.cls.php中找到支持的纸张尺寸(默认值为“字母”)。- >
> dompdf_temp_dir - 指定DOMPDF使用的临时目录。确保此位置由Web Server帐户写作。-
> dompdf_unicode_enabled - 设置PDF是否使用Unicode字体(默认值为true)。-
> dompdf_enable_remote - 启用来自远程站点的图像或CSS样式的包含(默认为false)。- >
debug_layout - 是否要在PDF文件中的每个HTML块周围渲染一个盒子,这对于调试布局很有用(默认为false)。- >
高级用法
现在,让我们谈谈DOMPDF的一些高级用途。也许我们希望将生成的PDF文档保存到磁盘上,而不是将其发送到浏览器。以下是:
git clone https://github.com/dompdf/dompdf.git
git submodule init
git submodule update
登录后复制
登录后复制
登录后复制
我们不像上一个示例中调用stream(),而是使用output()将pdf返回为字符串。它也接受了可选的选项数组,但是唯一可用的选项是压缩(默认值为true)。
DOMPDF还允许我们通过将PHP脚本嵌入其呈现的HTML中,将标题或页脚添加到生成的PDF中。但是,由于处理任意代码如果您不小心,则可能会构成安全风险,因此默认情况下,控制此功能的配置值将关闭。我们需要首先设置dompdf_enable_php选项true。
启用了Inline PHP执行后,将在脚本中提供PDF对象,我们可以使用该对象来操纵页面。我们可以在页面内的任何地方添加文本,行,图像,矩形等。
<span><span><?php
</span></span><span><span>set_include_path(get_include_path() . PATH_SEPARATOR . "/path/to/dompdf");
</span></span><span>
</span><span><span>require_once "dompdf_config.inc.php";
</span></span><span>
</span><span><span>$dompdf = new DOMPDF();
</span></span><span>
</span><span><span>$html = <span><span><<<'ENDHTML'</span>
</span></span></span><span><span><html>
</span></span><span><span> <body>
</span></span><span><span> <h1>Hello Dompdf</h1>
</span></span><span><span> </body>
</span></span><span><span></html>
</span></span><span><span><span>ENDHTML<span>;</span></span>
</span></span><span>
</span><span><span>$dompdf->load_html($html);
</span></span><span><span>$dompdf->render();
</span></span><span>
</span><span><span>$dompdf->stream("hello.pdf");</span></span>
登录后复制
登录后复制
该脚本直接嵌入到HTML标记中,并首先打开一个对象,以便我们可以影响渲染。所有图形将记录到该对象中,我们可以将此对象添加到所有或选定的页面(尽管有限制)。
接下来,我们获取页面的实际宽度和高度,以计算要添加的页脚的坐标。另外,在添加文本内容时,我们需要提供字体对象。 font_metrics :: get_font()允许我们创建所需的对象。我们还使用get_font_height()将给定字体的高度以其字体尺寸为单位,以计算页脚内容的定位。方法get_font_width()返回给定字体和字体大小的文本宽度,该字体大小也用于我们的计算中。
线()方法从点(x1,y1)到(x2,x2)绘制一条线。请注意,我们提供的颜色值不是实际的RGB值。基础PDF类需要0到1之间的值,因此我们将RGB值转换为这些新值。为了获得更好的近似,您可以将其除以255。
我们使用page_text()方法添加每个页面的页码,该方法接受x和y位置,要添加的文本,字体对象,字体大小和颜色。 DOMPDF自动替换{page_num}的值
和{page_count}在每个页面中,并使我们可以使用$ PDF。
当PDF渲染时,页脚部分将看起来像这样:
有可能避免使用内联PHP并直接从PHP中实现相同的效果,例如:
git clone https://github.com/dompdf/dompdf.git
git submodule init
git submodule update
登录后复制
登录后复制
登录后复制
请注意,我们在调用$ DOMPDF-> RENDER()之后放置代码,因为我们基本上正在修改渲染的PDF。
结论
在本文中,我们讨论了如何使用DOMPDF轻松将HTML转换为PDF。尽管DOMPDF是一个很棒的库,但它不是生成PDF文档的防弹解决方案。它确实有一些局限性和问题。 DOMPDF并不是真正耐受型HTML的耐受性,并且大桌子很容易使您无法记忆。一些基本的CSS功能(例如Float)并不完全支持,并且对CSS3的支持只有有限的支持。如果您需要DOMPDF不支持的功能,那么WKHTMLTOPDF之类的功能可能是您更好的解决方案。尽管如此,DOMPDF非常简单,适合大多数PDF出口需求。
很难解释库中图书馆提供的所有功能,因此请务必查看文档和源代码,以了解添加回调,使用自定义字体等的酷功能。很高兴为您提供我有限的专业知识。随时留下您的问题,并在评论部分分享您的经验。
通过fotolia
图像
>如果您喜欢阅读这篇文章,您会喜欢学习的;从大师那里学习新鲜技能和技术的地方。成员可以立即访问SitePoint的所有电子书和交互式在线课程,例如Jump Start Php。
>对本文的评论已关闭。对PHP有疑问吗?为什么不在我们的论坛上询问?
>常见问题(常见问题解答)关于使用DOMPDF 将HTML转换为PDF
什么是dompdf,为什么使用?>如何使用Composer(用于PHP的依赖关系管理工具)安装DOMPDF?您可以安装作曲家,然后运行命令“ Composer需要DOMPDF/DOMPDF”。这将在您的项目中下载并安装DOMPDF库。
>我可以将CSS与DOMPDF?
使用,是的,DOMPDF支持CSS。您可以在HTML中使用内联CSS,也可以链接到外部CSS文件。生成PDF时,DOMPDF将应用样式。但是,请注意,并非所有CSS属性都得到支持。
>如何将图像添加到我的pdf?
>您可以通过在HTML中加入“ IMG”标签来将图像添加到您的PDF中。 。 “ SRC”属性应指向图像文件。 DOMPDF将在生成的PDF中包括图像。>我可以生成具有多个页面的PDF吗?如果您的HTML内容足够长以跨越多页,则DOMPDF将自动将其分为页面。您还可以使用CSS手动添加页面断路。
如何设置页面大小和方向?
您可以使用“ set_paper”方法设置页面大小和方向。例如,您可以使用'$ dompdf-> set_paper('a4','landscape')将页面大小设置为a4,而对景观的方向。
我可以将dompdf与laravel一起使用吗? >是的,DOMPDF可以与Laravel一起使用。有一个称为“ Laravel-dompdf”的Laravel软件包,它提供了一种在Laravel应用程序中使用DOMPDF的简便方法。
>>如何将生成的PDF保存到文件中?使用“输出”方法和“ file_put_contents”功能生成的PDF到文件。例如,您可以使用'file_put_contents('mypdf.pdf',$ dompdf-> output())'将pdf保存到名为'mypdf.pdf'的文件。
>我可以发送生成的pdf作为Web应用程序中的响应?是的,您可以将生成的PDF作为Web应用程序中的响应发送。您可以使用“流”方法将PDF直接发送到浏览器。
> dompdf Secure吗?
dompdf通常被认为是安全的,但是像任何软件一样,它可能具有漏洞。重要的是要保持您的DOMPDF安装最新,并审查DOMPDF团队提供的安全指南。
以上是PHP主|使用DOMPDF将HTML转换为PDF的详细内容。更多信息请关注PHP中文网其他相关文章!