使用knp snappy bundle symfony2生成pdf

时间:2015-03-13 11:19:12

标签: symfony pdf wkhtmltopdf

我是一个初学者,我想从树枝视图生成pdf。我安装了knpsnappy然后我真的不知道该怎么做。我创建了一个新的控制器,我把它放在github上。

应用程序/配置/ config.yml

knp_snappy:
    pdf:
        enabled:    true
        binary:     "\"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe\""
        options:    []
    image:
        enabled:    true
        binary:     "\"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltoimage.exe\""
        options:    []

我在AppKernel中正确添加了这一行:

    new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),

SA \ UserBundle \控制器\ PdfController

<?php
namespace SA\UserBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class PdfController extends Controller
{
    public function generateAction()
    {
        $html = $this->renderView('FOSUserBundle:Profile:show.html.twig', 
            array('form' => $form->createView(),
        ));

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

资源\设置\ routing.yml中

user_folder:
    defaults: { _controller: SAUserBundle:Pdf:generate }
    path: /profile

我在我的树枝上添加了这一行: SRC \ SA \ UserBundle \资源\视图\资料\ show.html.twig

 <form action=" {{ path('user_folder') }} "><input type="submit" value="PDF" onClick=" {{ path('user_folder') }} "></form>

没有错误,但当我点击按钮时,它不起作用。也许我没有正确理解如何使用捆绑包。我需要你的帮助!

2 个答案:

答案 0 :(得分:0)

您的控制器和配置看起来不错。尝试使用链接而不是表单来测试PDF生成:

<a href="{{ path('user_folder') }}">Click</a>

根据您使用的环境

检查app / dev.log或app / prod.log

答案 1 :(得分:0)

目标是拥有一个包含var。

内容的其他视图

pdf通常带有数据库中的内容。因此,您必须获取用户的内容,并创建第二个视图调用'content_user.html.twig',其中包含用户的内容并生成此视图。

你的控制器:

<?php
namespace SA\UserBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class PdfController extends Controller
{
    public function generateAction()
    {
        $html = $this->renderView('FOSUserBundle:Profile:content_user.html.twig', 
            array('user' => $this->getUser(),
        ));

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

在content_user.html.twig中,您可以在树枝中管理数据:

Username : {{user.username}}
Firstname:  {{user.firstname}}