3

使用 Symfony2 和PdfBundle动态生成 PDF 文件,我确实无法生成文件。

按照文档说明,我已经设置了所有捆绑内容:

自动加载.php:

'Ps' => __DIR__.'/../vendor/bundles',
'PHPPdf' => __DIR__.'/../vendor/PHPPdf/lib',
'Imagine' => array(__DIR__.'/../vendor/PHPPdf/lib', __DIR__.'/../vendor/PHPPdf/lib/vendor/Imagine/lib'),
'Zend' => __DIR__.'/../vendor/PHPPdf/lib/vendor/Zend/library',
'ZendPdf' => __DIR__.'/../vendor/PHPPdf/lib/vendor/ZendPdf/library',

应用内核.php:

... 新的 Ps\PdfBundle\PsPdfBundle(), ...

我想所有设置都已正确配置,因为我没有得到任何“找不到库”,也没有任何东西......

所以,毕竟,我在控制器中这样做:

...
use Ps\PdfBundle\Annotation\Pdf;
...

/**
 * @Pdf()
 * @Route ("/pdf", name="_pdf")
 * @Template()
 */
public function generateInvoicePDFAction($name = 'Pedro')
{
    return $this->render('AcmeStoreBundle:Shop:generateInvoice.pdf.twig', array(
        'name' => $name,
    ));
}

并拥有这个树枝文件:

<pdf>
    <dynamic-page>
        Hello {{ name }}!
    </dynamic-page>
</pdf>

好。不知何故,我刚刚在我的页面中得到的只是生成的普通 html,就好像它是普通的响应渲染一样。

Pdf()注释应该给出创建 PDF 文件而不是呈现普通 HTML 的“特殊”行为。

因此,有了上面的代码,当我请求路由时http://www.mysite.com/*...*/pdf,我得到的只是呈现的以下 HTML:

<pdf>
    <dynamic-page>
        Hello Pedro!
    </dynamic-page>
</pdf>

(所以是一个只有文字的空白 HTML 页面Hello Pedro!

有什么线索吗?我做错什么了吗?除了 *.pdf.twig 版本之外,是否必须有替代 *.html.twig ?我不这么认为... :(

4

2 回答 2

8

好,我知道了。

出于某种原因,捆绑文档中的示例对我不起作用。尽管如此,de bundle 中有这个类:http: //github.com/psliwa/PdfBundle/blob/master/Controller/ExampleController.php,我可以在其中找到一个对我有用的示例。这是我最终使用的代码:

/**
 * @Route ("/generateInvoice", name="_generate_invoice")
 */
public function generateInvoiceAction($name = 'Pedro')
{
    $facade = $this->get('ps_pdf.facade');
    $response = new Response();
    $this->render('AcmeStoreBundle:Shop:generateInvoiceAction.pdf.twig', array("name" => $name), $response);

    $xml = $response->getContent();

    $content = $facade->render($xml);

    return new Response($content, 200, array('content-type' => 'application/pdf'));
}   

下一个挑战:将该 PDF 存储到磁盘中。

于 2012-12-01T11:01:27.030 回答
2

这是因为您错过了 URL 中的“_format”选项。

$this->render()不应与@Template注释一起使用。将@Template根据参数提供正确的模板格式_format

...
use Ps\PdfBundle\Annotation\Pdf;
...

/**
 * @Pdf()
 * @Route ("/pdf.{_format}", name="_pdf")
 * @Template()
 */
public function generateInvoicePDFAction($name = 'Pedro')
{
    return array('name' => $name);
}

应该可以正常工作。

于 2014-09-11T13:33:32.403 回答