mr-slack/knp-snappy-bundle

通过将Twig/HTML模板转换为PDF和图片,在Symfony中轻松创建。

安装: 3

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 0

分支: 143

类型:symfony-bundle

v1.8.0 2020-11-16 07:45 UTC

README

Build Status Scrutinizer Code Quality StyleCI knpbundles.com

Snappy 是一个PHP (5.6+)包装器,用于wkhtmltopdf转换工具。它允许您使用webkit引擎从HTML文档生成PDF或图像文件。

KnpSnappyBundle为您的Symfony项目提供简单的集成。

安装

使用composer,需要

composer require knplabs/knp-snappy-bundle

然后在您的内核中启用它(如果使用Symfony >= 4的Flex配方则可选)

// config/bundles.php
<?php

return [
    //...
    Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true],
    //...
];

配置

如果您需要更改二进制文件,更改实例选项或禁用一个或两个服务,您可以通过配置来完成这些操作。

# app/config/config.yml (or config/packages/knp_snappy.yaml if using Symfony4 and the Flex recipe)
knp_snappy:
    pdf:
        enabled:    true
        binary:     /usr/local/bin/wkhtmltopdf #"\"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe\"" for Windows users
        options:    []
    image:
        enabled:    true
        binary:     /usr/local/bin/wkhtmltoimage #"\"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltoimage.exe\"" for Windows users
        options:    []

如果您想更改默认的临时文件夹sys_get_temp_dir(),可以使用以下方法

# app/config/config.yml (or config/packages/knp_snappy.yaml if using Symfony4 and the Flex recipe)
knp_snappy:
    temporary_folder: "%kernel.cache_dir%/snappy"

您还可以使用process_timeout配置生成器使用的超时时间

# app/config/config.yml (or config/packages/knp_snappy.yaml if using Symfony4 and the Flex recipe)
knp_snappy:
    process_timeout: 20 # In seconds

使用

该包注册了两个服务

  • 服务knp_snappy.image允许您生成图片;
  • 服务knp_snappy.pdf允许您生成PDF文件。

从URL生成图片

// @var Knp\Snappy\Image
$knpSnappyImage->generate('http://www.google.fr', '/path/to/the/image.jpg');

从URL生成PDF文档

// @var Knp\Snappy\Pdf
$knpSnappyPdf->generate('http://www.google.fr', '/path/to/the/file.pdf');

从多个URL生成PDF文档

// @var Knp\Snappy\Pdf
$knpSnappyPdf->generate(array('http://www.google.fr', 'http://www.knplabs.com', 'http://www.google.com'), '/path/to/the/file.pdf');

从twig视图生成PDF文档

// @var Knp\Snappy\Pdf
$knpSnappyPdf->generateFromHtml(
    $this->renderView(
        'MyBundle:Foo:bar.html.twig',
        array(
            'some'  => $vars
        )
    ),
    '/path/to/the/file.pdf'
);

从控制器中渲染图片作为响应

use Knp\Bundle\SnappyBundle\Snappy\Response\JpegResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class SomeController extends AbstractController
{
    public function imageAction(Knp\Snappy\Image $knpSnappyImage)
    {
        $html = $this->renderView('MyBundle:Foo:bar.html.twig', array(
            'some'  => $vars
        ));

        return new JpegResponse(
            $knpSnappyImage->getOutputFromHtml($html),
            'image.jpg'
        );
    }
}

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

use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class SomeController extends AbstractController
{
    public function pdfAction(Knp\Snappy\Pdf $knpSnappyPdf)
    {
        $html = $this->renderView('MyBundle:Foo:bar.html.twig', array(
            'some'  => $vars
        ));

        return new PdfResponse(
            $knpSnappyPdf->getOutputFromHtml($html),
            'file.pdf'
        );
    }
}

渲染包含相对URL(如CSS文件)的PDF文档

use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class SomeController extends AbstractController
{
    public function pdfAction(Knp\Snappy\Pdf $knpSnappyPdf)
    {
        $pageUrl = $this->generateUrl('homepage', array(), true); // use absolute path!

        return new PdfResponse(
            $knpSnappyPdf->getOutput($pageUrl),
            'file.pdf'
        );
    }
}

维护者

KNPLabs正在寻找维护者(了解更多)。

如果您感兴趣,请随意提交PR以请求成为维护者。

我们很高兴收到您的回复 :)

鸣谢

SnappyBundle和Snappy基于出色的wkhtmltopdf。SnappyBundle由KnpLabs开发。