knplabs / knp-snappy
PHP 库,允许从 URL 或 HTML 页面生成缩略图、快照或 PDF。wkhtmltopdf/wkhtmltoimage 的包装器。
Requires
- php: >=8.1
- psr/log: ^2.0||^3.0
- symfony/process: ^5.0||^6.0||^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- pedrotroller/php-cs-custom-fixer: ^2.19
- phpstan/phpstan: ^1.0.0
- phpstan/phpstan-phpunit: ^1.0.0
- phpunit/phpunit: ^8.5
- dev-master / 1.x-dev
- v1.5.0
- v1.4.4
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0
- v0.5.0
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.1
- 0.2.0
- 0.1.2
- 0.1.1
- 0.1.0
- dev-chore/support-symfony-7
- dev-v2-unstable
- dev-v2-unstable-repository-split
- dev-v2-unstable-add-chromium-headless
- dev-v2-unstable-dompdf
- dev-v2-unstable-change-interfaces
- dev-doc/update-readme
- dev-v2-unstable-proto
- dev-fix/improve-php-cs-fixer-workflow
- dev-change-folder-structure-to-support-multiple-generators
This package is auto-updated.
Last update: 2024-09-19 08:59:09 UTC
README
Snappy 是一个 PHP 库,允许从 URL 或 HTML 页面生成缩略图、快照或 PDF。它使用在 OSX、linux、windows 上可用的优秀基于 webkit 的 wkhtmltopdf 和 wkhtmltoimage。
为了使用 Snappy,您必须下载 0.12.x
版本的 wkhtmltopdf。
在提交新问题之前,请检查 常见问题解答。Snappy 是围绕 wkhtmltox 的小型包装器,因此许多问题已经得到解答、解决或来自 wkhtmltox。
以下集成可用
knplabs/knp-snappy-bundle
,用于 Symfonybarryvdh/laravel-snappy
,用于 Laravelmvlabs/mvlabs-snappy
,用于 Zend Framework
使用 Composer 安装
composer require knplabs/knp-snappy
使用方法
初始化
<?php require __DIR__ . '/vendor/autoload.php'; use Knp\Snappy\Pdf; $snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); // or you can do it in two steps $snappy = new Pdf(); $snappy->setBinary('/usr/local/bin/wkhtmltopdf');
在浏览器中显示 PDF
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); header('Content-Type: application/pdf'); echo $snappy->getOutput('http://www.github.com');
从浏览器下载 PDF
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="file.pdf"'); echo $snappy->getOutput('http://www.github.com');
将多个 URL 合并到一个 PDF 中
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="file.pdf"'); echo $snappy->getOutput(array('http://www.github.com','http://www.knplabs.com','https://php.ac.cn'));
生成本地 PDF 文件
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); $snappy->generateFromHtml('<h1>Bill</h1><p>You owe me money, dude.</p>', '/tmp/bill-123.pdf');
传递选项给 Snappy
// Type wkhtmltopdf -H to see the list of options $snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); $snappy->setOption('disable-javascript', true); $snappy->setOption('no-background', true); $snappy->setOption('allow', array('/path1', '/path2')); $snappy->setOption('cookie', array('key' => 'value', 'key2' => 'value2')); $snappy->setOption('post', array('key' => 'value')); $snappy->setOption('cover', 'pathToCover.html'); // .. or pass a cover as html $snappy->setOption('cover', '<h1>Bill cover</h1>'); $snappy->setOption('toc', true); $snappy->setOption('cache-dir', '/path/to/cache/dir');
重置选项
可以使用 resetOptions()
方法将选项重置为其初始值。
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); // Set some options $snappy->setOption('copies' => 4); // .. // Reset options $snappy->resetOptions();
wkhtmltopdf 二进制文件作为 Composer 依赖项
如果您想使用 Composer 下载 wkhtmltopdf 和 wkhtmltoimage,请将其添加到 composer.json
composer require h4cc/wkhtmltopdf-i386 0.12.x composer require h4cc/wkhtmltoimage-i386 0.12.x
或者如果您在 64 位系统上
composer require h4cc/wkhtmltopdf-amd64 0.12.x composer require h4cc/wkhtmltoimage-amd64 0.12.x
然后您就可以使用了
<?php use Knp\Snappy\Pdf; $myProjectDirectory = '/path/to/my/project'; $snappy = new Pdf($myProjectDirectory . '/vendor/h4cc/wkhtmltopdf-i386/bin/wkhtmltopdf-i386'); // or $snappy = new Pdf($myProjectDirectory . '/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64');
注意。 这些静态二进制文件是从 Debian7 软件包 中提取的,所以可能不兼容基于非 Debian 的 Linux 发行版。
一些用例
如果您想生成目录并且想使用自定义 XSL 样式表,请执行以下操作
<?php $snappy = new Pdf('/path/to/binary'); $snappy->setOption('toc', true); $snappy->setOption('xsl-style-sheet', 'http://path/to/stylesheet.xsl') //or local file; $snappy->generateFromHtml('<p>Some content</p>', 'test.pdf');
错误 & 支持
如果您发现了一个错误,请详细填写问题,包括以下所有点。如果您需要帮助,请至少提供一个完整的复现者,这样我们就可以根据事实而不是假设来帮助您。
- 操作系统及其版本
- Wkhtmltopdf,其版本以及您如何安装它
- 一个包含相关 php 和 html/css/js 代码的完整复现者
如果您的复现者很大,请尝试将其缩小。这将帮助每个人缩小错误。
维护者
KNPLabs 正在寻找维护者(查看原因)。
如果您有兴趣,请随时提交一个 PR 以请求添加为维护者。
我们很高兴听到您的意见 :)
致谢
Snappy 最初是由 KnpLabs 团队开发的。