如何将 HTML 和 CSS 添加到 PDF:PHP 指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 HTML+CSS 转 PDF 令人头疼(以及如何解决)



想象一下:您正在用 PHP 开发一个网站,客户要求:“做一个‘下载 PDF’按钮,能导出漂亮的发票、报告或证书。”您心想:“这还不简单!拿一个 HTML 模板,加上 CSS 样式,然后转换成 PDF 就行了。”但现实往往更复杂:字体错位、表格散架,而 flexbox 这个 CSS 属性时灵时不灵。



在 Stack Overflow 上,“How can I add HTML and CSS into PDF” 这个问题获得了数千次浏览。这意味着几乎每个 PHP 开发者都遇到过这个问题。在本文中,我们将介绍三个流行的库——Dompdf、TCPDF 和 mPDF——并展示如何在 PHP 中正确地将 HTML 和 CSS 转换为 PDF。



您将了解到:

  • 如何根据不同的任务选择合适的库
  • 如何引入 CSS 样式(外部、内联、@import)
  • 如何解决常见问题:西里尔字母、表格、图片
  • 如何编写可运行的代码,从 HTML 生成 PDF


为什么不能直接将 HTML 保存为 PDF?



浏览器可以完美渲染 HTML+CSS,但 PDF 生成器并非浏览器。它们使用自己的渲染引擎,并非所有 CSS 属性都受支持。例如:

  • flexbox 和 grid——并非在所有地方都有效
  • border-radius——仅部分支持
  • @media print——可能被忽略
  • 字体(尤其是西里尔字母)——需要额外加载


好消息是:现代的 PHP 库在不断改进,采用正确的方法,您可以获得看起来几乎与浏览器中一样的 PDF。



PHP 中用于 HTML+CSS 转 PDF 的库概览



我们来介绍三个最流行的工具。每个都有其优势。



1. Dompdf

优点:轻量级,通过 Composer 安装简单,对 CSS 2.1 支持良好,部分支持 CSS3。非常适合简单的文档——如发票、收据。

缺点:对复杂布局(flexbox、grid)支持较弱,处理大量 HTML 时可能有问题。



2. TCPDF

优点:稳定、强大,支持 Unicode(西里尔字母),无需外部库。非常适合包含图表、二维码、多页表格的复杂 PDF 文件。

缺点:语法复杂,CSS 样式需要手动引入,代码较为冗长。



3. mPDF

优点:对 CSS 支持最好(包括 @media、float、position),对西里尔字母处理出色,支持外部文件样式。被认为是“黄金标准”。

缺点:比 Dompdf 更重,处理大型文档时可能较慢。



建议:快速上手请用 Dompdf。对于严肃项目,请用 mPDF。如果需要最大灵活性且愿意编写更多代码,请用 TCPDF。



实践示例:使用 Dompdf 从 HTML 生成 PDF



让我们编写实际代码。通过 Composer 安装 Dompdf:



composer require dompdf/dompdf


现在创建一个 PHP 脚本,将 HTML 模板转换为 PDF:



<?phprequire_once 'vendor/autoload.php';

use Dompdf\\Dompdf;use Dompdf\\Options;

// 设置$options = new Options();$options->set('defaultFont', 'DejaVu Sans'); // 支持西里尔字母$options->set('isRemoteEnabled', true); // 允许外部图片

$dompdf = new Dompdf($options);

// HTML 模板$html = '<!DOCTYPE html><html><head> <style> body { font-family: DejaVu Sans, sans-serif; } .invoice { width: 100%; max-width: 80

博客

书籍推荐