PHP 库,可从 UTF-8 编码的 HTML 生成 PDF 文件

8.1.7 2024-01-10 16:08 UTC

README

mPDF 是一个 PHP 库,可以从 UTF-8 编码的 HTML 生成 PDF 文件。

它基于 FPDFHTML2FPDF(见 CREDITS),增加了一些功能。mPDF 由 Ian Back 编写,并以 GNU GPL v2 许可证发布。

Latest Stable Version Total Downloads License

⚠ 如果您在 mPDF GitHub 仓库主页或 Packagist 上查看此文件,请注意,默认仓库分支是 development,这可能不同于最后一个稳定版本。

要求

PHP 版本和扩展

  • PHP >=5.6 <7.3.0 支持 mPDF >= 7.0
  • PHP 7.3mPDF v7.1.7 支持
  • PHP 7.4mPDF v8.0.4 支持
  • PHP 8.0mPDF v8.0.10 支持
  • PHP 8.1mPDF v8.0.13 支持
  • PHP 8.2mPDF v8.1.3 支持
  • PHP 8.3mPDF v8.2.1 支持

PHP mbstringgd 扩展必须加载。

对于某些高级功能,可能还需要其他扩展,例如用于输出和嵌入资源的压缩(如字体)的 zlib、用于生成条形码的 bcmath 或用于字符集转换和 SVG 处理的 xml

已知服务器注意事项

mPDF 与单线程服务器(如 php -S)获取外部 HTTP 资源时存在一些问题。建议使用 nginx(php-fpm)或 Apache 等适当的服务器。

支持我们

请考虑通过任何金额的捐赠来支持 mPDF 的发展。可以在文档的 主页 上找到 捐赠按钮

安装

官方安装方法是使用 composer 和其 Packagist 包 mpdf/mpdf

$ composer require mpdf/mpdf

使用

该库最简单的使用方法(自 7.0 版本起)如下

<?php

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();

这将使 PDF 以 application/pdf 内容类型内嵌到浏览器中。

设置和配置

可以通过构造函数的 $config 参数设置所有 配置指令

建议通过 tempDir 配置变量设置自己的临时目录。目录必须具有写入权限(推荐模式 775),以便 mPDF 用户使用(通常是 cliwebserverfpm)。

警告: mPDF 将清理临时目录中的旧临时文件。请选择仅用于 mPDF 的路径。

<?php

$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/tmp']);

默认情况下,临时目录将位于 vendor 目录中,并由 post_install composer 脚本提供写入权限。

有关自定义临时目录的更多信息,请参阅《手册》中《安装与设置》部分关于临时文件目录的注释。

如有问题,请参阅《手册》中《故障排除》部分关于故障排除的内容。

关于CSS支持和开发状态

mPDF作为一个整体,是一款相当老旧的软件。如今,尽管不是用PHP编写的,但也有更好的替代方案。

如果您无法使用非PHP方法生成PDF文件,或者希望利用mPDF相对于浏览器方法的某些优势(例如颜色处理、预打印、条形码支持、页眉和页脚、页码、目录等),则可以使用mPDF。但请注意,可能需要为mPDF定制HTML/CSS模板。

如果您正在寻找最先进的CSS支持,并希望将现有的HTML页面镜像到PDF中,请使用无头Chrome。

mPDF仍将更新以增强一些内部功能并支持PHP的新版本,但更好的或新的CSS支持很可能不会实现。

在线手册

在线手册可在https://mpdf.github.io/找到。

一般故障排除

有关一般问题或故障排除,请使用讨论区

您还可以在Stack Overflow使用mpdf标签,因为StackOverflow的用户更有可能及时回答您的问题。

贡献

在提交问题和拉取请求之前,请阅读CONTRIBUTING.md文件。

单元测试

使用PHPUnit进行mPDF的单元测试。

要开始,请在mPDF根目录中运行composer install命令(您需要先安装composer)。

要执行测试,请在mPDF根目录中运行composer test命令。

非常欢迎您为mPDF编写单元测试提供帮助。如果您想帮忙,请注意,当进行单元测试时,位于/tests/目录中的任何PHP文件都将自动加载。