KnpLabs/snappy

GitHub: KnpLabs/snappy

Snappy 是一个 PHP 库,通过封装 wkhtmltopdf 实现从 URL 或 HTML 页面生成 PDF 文档和网页截图。

Stars: 4471 | Forks: 437

# Snappy ![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6a61c0be4b121414.svg) [![AppVeyor CI 构建状态](https://ci.appveyor.com/api/projects/status/github/KnpLabs/snappy?branch=master&svg=true)](https://ci.appveyor.com/project/NiR-/snappy) [![Scrutinizer 代码质量](https://scrutinizer-ci.com/g/KnpLabs/Gaufrette/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/KnpLabs/Gaufrette/?branch=master) Snappy 是一个 PHP 库,允许从 url 或 html 页面生成缩略图、快照或 PDF。 它使用了优秀的基于 webkit 的 [wkhtmltopdf 和 wkhtmltoimage](http://wkhtmltopdf.org/) 适用于 OSX, linux, windows。 你需要下载 wkhtmltopdf `0.12.x` 才能使用 Snappy。 在开启新 issue 之前,请先查看 [FAQ](doc/faq.md)。Snappy 只是 wkhtmltox 的一个微型封装,因此许多问题已经被回答、解决,或者属于 wkhtmltox 自身的问题。 以下集成可用: * [`knplabs/knp-snappy-bundle`](https://github.com/KnpLabs/KnpSnappyBundle),用于 Symfony * [`barryvdh/laravel-snappy`](https://github.com/barryvdh/laravel-snappy),用于 Laravel * [`mvlabs/mvlabs-snappy`](https://github.com/mvlabs/MvlabsSnappy),用于 Zend Framework ## 使用 [Composer](http://getcomposer.org/) 安装 ``` composer require knplabs/knp-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','http://www.php.net')); ``` ### 生成本地 PDF 文件 ``` $snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); $snappy->generateFromHtml('

Bill

You owe me money, dude.

', '/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', '

Bill cover

'); $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 ``` 然后你就可以使用它了 ``` setOption('toc', true); $snappy->setOption('xsl-style-sheet', 'http://path/to/stylesheet.xsl') //or local file; $snappy->generateFromHtml('

Some content

', 'test.pdf'); ``` ## Bug 与支持 如果你发现了一个 bug,请填写包含以下所有要点的详细 issue。 如果你需要帮助,请至少提供一个完整的复现步骤,以便我们基于事实而非假设来帮助你。 * OS 及其版本 * Wkhtmltopdf,及其版本以及你是如何安装的 * 一个包含相关 php 和 html/css/js 代码的完整复现步骤 如果你的复现步骤代码量很大,请尝试精简它。这将有助于每个人缩小 bug 范围。 ## 维护者 KNPLabs 正在寻找维护者([查看原因](https://knplabs.com/en/blog/news-for-our-foss-projects-maintenance))。 如果你感兴趣,欢迎开启一个 PR 请求添加为维护者。 我们很高兴收到你的来信 :) ## 致谢 Snappy 最初由 [KnpLabs](http://knplabs.com) 团队开发。
标签:Composer, ffuf, HTML转PDF, Laravel, OpenVAS, PDF生成, PHP, PHP库, Snappy, Symfony, Syscall, WebKit, Web开发, wkhtmltopdf, Zend Framework, 后端开发, 截图, 报表生成, 文件转换, 缩略图