knplabs/knp-snappy

PHP 库,允许从 URL 或 HTML 页面生成缩略图、快照或 PDF。wkhtmltopdf/wkhtmltoimage 的包装器。


README

Build Status AppVeyor CI Build Status Scrutinizer Code Quality

Snappy 是一个 PHP 库,允许从 URL 或 HTML 页面生成缩略图、快照或 PDF。它使用在 OSX、linux、windows 上可用的优秀基于 webkit 的 wkhtmltopdf 和 wkhtmltoimage

为了使用 Snappy,您必须下载 0.12.x 版本的 wkhtmltopdf。

在提交新问题之前,请检查 常见问题解答。Snappy 是围绕 wkhtmltox 的小型包装器,因此许多问题已经得到解答、解决或来自 wkhtmltox。

以下集成可用

使用 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 团队开发的。