mvlabs/mvlabs-snappy

MvlabsSnappy 是一个 Zend Framework 和 Laminas 模块,允许通过 Snappy PHP 包装器轻松地将 URL 或 HTML 页面转换为缩略图、快照或 PDF 文件。

安装次数: 51,614

依赖项: 0

建议者: 0

安全性: 0

星标: 24

关注者: 13

分支: 10

公开问题: 1

类型: laminas-module

2.0.0 2020-08-31 09:53 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:25:18 UTC


README

Build Status Latest Stable Version Total Downloads License

MvlabsSnappy 是一个 Laminas 3 模块,允许通过 Snappy PHP (5.6+) 包装器轻松地从 URL 或 HTML 页面生成缩略图、快照或 PDF 文件。

安装

使用 composer

php composer.phar require mvlabs/mvlabs-snappy

安装后

  1. application.config.php 文件中启用它。

    <?php
    return [
        'modules' => [
            // ...
            'MvlabsSnappy',
        ],
        // ...
    ];

配置

安装 MvlabsSnappy 后,将 ./vendor/mvlabs/MvlabsSnappy/config/mvlabs-snappy.local.php.dist 复制到 ./config/autoload/mvlabs-snappy.local.php,然后更改二进制路径并添加所需的选项。

# /config/autoload/mvlabs-snappy.local.php
<?php
return [
    'mvlabs-snappy' => [
        'pdf' => [
           'binary'  => '/usr/local/bin/wkhtmltopdf',
           'options' => [], // Type wkhtmltopdf -H to see the list of options
        ],
        'image' => [
            'binary'  => '/usr/local/bin/wkhtmltoimage',
            'options' => [], // Type wkhtmltoimage -H to see the list of options
         ]
     ]
];

将 wkhtmltopdf 二进制文件作为 composer 依赖项

如果您想使用 composer 下载 wkhtmltopdf,请将其添加到 composer.json

{
    "require": {
        "h4cc/wkhtmltopdf-i386": "0.12.4"
    }
}

或者使用以下命令为 i386 要求该软件包

php composer.phar require h4cc/wkhtmltopdf-i386 "0.12.4"

如果您是在基于 64 位系统的系统上

{
    "require": {
        "h4cc/wkhtmltopdf-amd64": "0.12.4"
    }
}

或者使用以下命令为 amd64 要求该软件包

php composer.phar require h4cc/wkhtmltopdf-amd64 "0.12.4"

二进制文件将位于

vendor/h4cc/wkhtmltopdf-i386/bin/wkhtmltopdf-i386

此外,在您配置的 bin 文件夹中创建一个符号链接,例如

vendor/bin/wkhtmltopdf-i386

使用方法

该模块注册了两个服务

  • mvlabssnappy.image.service 服务允许您生成图像;
  • mvlabssnappy.pdf.service 服务允许您生成 PDF 文件。

从 URL 生成图像

 $mvlabsSnappyImage = $container->get('mvlabssnappy.image.service'),
 $mvlabsSnappyImage->generate('http://www.mvlabs.it', '/path/to/myapp/data/image.jpg');

从 URL 生成 PDF 文档

 $mvlabsSnappyPdf = $container->get('mvlabssnappy.pdf.service'),
 $mvlabsSnappyPdf->generate('http://www.mvlabs.it', '/path/to/myapp/data/document.pdf');

从控制器作为响应渲染 PDF 文档

class IndexController extends AbstractActionController
{
    /**
     * @var Knp\Snappy\Pdf;
     */
    protected $mvlabsSnappyPdf;

    /**
     * @var Laminas\View\Renderer\RendererInterface
     */
    protected $renderer;

    public function __construct(Pdf $mvlabsSnappyPdf, RendererInterface $renderer)
    {
        $this->mvlabsSnappyPdf = $mvlabsSnappyPdf;
        $this->renderer = $renderer;
    }

    public function testPdfAction()
    {
        $now = new \DateTime();

        $layoutViewModel = $this->layout();
        $layoutViewModel->setTemplate('layout/pdf-layout');

        $viewModel = new ViewModel([
            'vars' => $vars,
        ]);

        $viewModel->setTemplate('myModule/myController/pdf-template');

        $layoutViewModel->setVariables([
            'content' => $this->renderer->render($viewModel),
        ]);

        $htmlOutput = $this->renderer->render($layoutViewModel);

        $output = $this->mvlabsSnappyPdf->getOutputFromHtml($htmlOutput);

        $response = $this->getResponse();
        $headers  = $response->getHeaders();
        $headers->addHeaderLine('Content-Type', 'application/pdf');
        $headers->addHeaderLine('Content-Disposition', "attachment; filename=\"export-" . $now->format('d-m-Y H:i:s') . ".pdf\"");

        $response->setContent($output);

        return $response;
    }
}

致谢

MvlabsSnappy 和 Snappy 基于出色的 wkhtmltopdf。MvlabsSnappy 由 mvlabs 开发。