最新消息:文章中包含代码时,请遵守代码高亮规范!

symfony使用KnpSnappyBundle生成网页PDF和图片【原创】

PHP Pota 852浏览 1评论

KnpSnappyBundle是symfony社区中的一个第三方Bundle,主要功能为指定网页生成pdf或图像文件。此文前提是已经有一个可以使用的symfony框架且运行环境为linux系统
安装方法,在composer.json文件require中写入

"knplabs/knp-snappy-bundle": "~1.4"

执行composer update后在AppKernel.php文件中引入

$bundles[] = new Knp\Bundle\SnappyBundle\KnpSnappyBundle();

引入
借用官方说明The bundle registers two services:,这时直接调用knp_snappy.image和knp_snappy.pdf使用generate方法的时候会出现
错误
提示缺少wkhtmltoimage文件,在官方文档最底部发现这样一句话
SnappyBundle and Snappy are based on the awesome wkhtmltopdf. SnappyBundle has been developed by KnpLabs.解决方案为在wkhtmltopdf中下载Linux版本,并将bin文件夹下的wkhtmltopdf和wkhtmltoimage文件放到服务器中并在app/config.yml中写入

knp_snappy:
    pdf:
        enabled:    true
        binary:     /usr/local/bin/wkhtmltopdf
        options:    []
    image:
        enabled:    true
        binary:     /usr/local/bin/wkhtmltoimage
        options:    []

binary指向在运行服务器中的文件,并给文件权限后就算是安装完成可以使用了
Bundle的GitHub地址是https://github.com/KnpLabs/KnpSnappyBundle在文档中使用方法都有详细说明,
一、生成网址网站图片

$knp_snappy->generate('http://blog.it985.com/', dirname(dirname(dirname(dirname(__FILE__)))) . '/web/upload/blog.jpg');

生成图片为

blog

二、渲染twig模板返回图片

        $html = $this->renderView('BackendBundle:Default:index.html.twig');

        return new Response(
            $this->get('knp_snappy.image')->getOutputFromHtml($html),
            200,
            array(
                'Content-Type'          => 'image/jpg',
                'Content-Disposition'   => 'filename="image.jpg"'
            )
        );

三、返回PDF作为控制器返回值

        $html = $this->renderView('BackendBundle:Default:index.html.twig');

        return new Response(
            $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
            200,
            array(
                'Content-Type'          => 'application/pdf',
                'Content-Disposition'   => 'filename="image.jpg"'
            )
        );

四、生成指定路由返回页面为PDF并下载

        $pageUrl = $this->generateUrl('fortend_homepage', array(), true); // use absolute path!

        return new Response(
            $this->get('knp_snappy.pdf')->getOutput($pageUrl),
            200,
            array(
                'Content-Type'          => 'application/pdf',
                'Content-Disposition'   => 'attachment; filename="file.pdf"'
            )
        );

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/19858.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Pota的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!

网友最新评论 (1)

  1. Charlie
    Mark一下
    Charlie2017-02-22 19:48