pontedilana / php-weasyprint
PHP 库,可以从 URL 或 HTML 页面生成 PDF。是 Kozea/WeasyPrint 的包装器。
1.4.0
2023-11-20 08:58 UTC
Requires
- php: 7.4.* || 8.0.* || 8.1.* || 8.2.* || 8.3.*
- psr/log: ^1.1 || ^2.0 || ^3.0
- symfony/process: ^5.4 || ^6.2 || ^7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.2
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
README
PhpWeasyPrint 是一个 PHP 库,可以从 URL 或 HTML 页面生成 PDF。它是 WeasyPrint 的包装器,一个智能解决方案,帮助网络开发者创建 PDF 文档,可在 Python 运行的任何地方使用。
您需要下载并安装 WeasyPrint 才能使用 PhpWeasyPrint(建议使用版本 56 或更高版本)。
这个库大量受到了 KnpLabs/snappy 的启发,旨在成为一对一的替代品(GeneratorInterface
是相同的)。参见 "与 Snappy 的差异" 部分,了解两个库之间的差异。
使用 Composer 安装
$ composer require pontedilana/php-weasyprint
使用方法
初始化
<?php require __DIR__ . '/vendor/autoload.php'; use Pontedilana\PhpWeasyPrint\Pdf; $pdf = new Pdf('/usr/local/bin/weasyprint'); // or you can do it in two steps $pdf = new Pdf(); $pdf->setBinary('/usr/local/bin/weasyprint');
在浏览器中显示 PDF
$pdf = new Pdf('/usr/local/bin/weasyprint'); header('Content-Type: application/pdf'); echo $pdf->getOutput('https://www.github.com');
从浏览器下载 PDF
$pdf = new Pdf('/usr/local/bin/weasyprint'); header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="file.pdf"'); echo $pdf->getOutput('https://www.github.com');
生成本地 PDF 文件
$pdf = new Pdf('/usr/local/bin/weasyprint'); $pdf->generateFromHtml('<h1>Bill</h1><p>You owe me money, dude.</p>', '/tmp/bill-123.pdf');
向 PhpWeasyPrint 传递选项
// Type weasyprint -h to see the list of options $pdf = new Pdf('/usr/local/bin/weasyprint'); $pdf->setOption('encoding', 'utf8'); $pdf->setOption('media-type', 'screen'); $pdf->setOption('presentational-hints', true); $pdf->setOption('optimize-images', true); $pdf->setOption('stylesheet', ['/path/to/first-style.css', '/path/to/second-style.css']); $pdf->setOption('attachment', ['/path/to/image.png', '/path/to/logo.jpg']);
重置选项
可以使用 resetOptions()
方法将选项重置为其初始值。
$pdf = new Pdf('/usr/local/bin/weasyprint'); // Set some options $pdf->setOption('media-type', 'screen'); // .. // Reset options $pdf->resetOptions();
与 Snappy 的差异
尽管 PhpWeasyPrint 和 Snappy 可以互换使用,但由于 WeasyPrint CLI API,两者之间仍有一些差异。
- WeasyPrint 不支持将多个来源合并到一个单一的输出 PDF 中,因此 PhpWeasyPrint 只接受一个输入来源(字符串或 URL);
- WeasyPrint 版本 >= 53 不生成图像,因此从 HTML 字符串或 URL 生成图像仅适用于 WeasyPrint 较低版本和不支持的 PhpWeasyPrint 版本(
Pontedilana\PhpWeasyPrint\Image
已在 PhpWeasyPrint 0.13.0 上与 Weasyprint 52.5 一起成功测试过)。
错误 & 支持
如果您发现了一个错误,请填写一个包含以下所有点的详细问题 详细问题。如果您需要一些帮助,请至少提供一个完整的重现器,这样我们就可以基于事实而不是假设来帮助您。
- 操作系统及其版本
- WeasyPrint,其版本和您如何安装它
- 包含相关 PHP 和 html/css/js 代码的完整重现器
如果您的重现器很大,请尝试将其缩小。这将帮助每个人缩小错误范围。
致谢
PhpWeasyPrint 最初由 Pontedilana 开发团队开发。
Snappy 最初由 KnpLabs 团队开发。