【问题标题】:Symfony2 - PdfBundle not workingSymfony2 - PdfBundle 不工作
【发布时间】:2012-11-19 06:30:32
【问题描述】:

使用 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',

AppKernel.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,就好像它是正常的 Response 渲染一样。

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

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

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

(所以是一个空白的 HTML 页面,上面只有 Hello Pedro! 字样。

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

【问题讨论】:

  • 删除我的旧答案,因为它不是解决方案。 github 上的 bundle 包含一些示例,这些对你有用吗?
  • 嗯,你的回答确实有效;),因为我没有描述配置。 ;)。我想我使用的示例与 Bundle 文档中描述的示例完全相同。仅返回一个 *.pdf.twig 文件,其中包含 $this -> 渲染和一个数组以填充模板的“空白”。并且总是 Pdf 注释。我真的不知道还有什么要检查或做什么:(

标签: php symfony pdf-generation twig


【解决方案1】:

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

$this-&gt;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);
}

应该可以正常工作。

【讨论】:

  • 非常好,谢谢。你怎么知道这个包不仅依赖于 Pdf-Annotation 还依赖于 _format 参数。
  • @Greg 已经很久了,我不记得了。更多 rtfm、反向工程或/和一些随机尝试。
【解决方案2】:

好的,我明白了。

出于某种原因,捆绑文档中的示例对我不起作用。不过,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 存储到磁盘中。

【讨论】:

  • 那么,PdfBundle官方例子是怎么回事呢?我在哪里可以找到更具体的使用 @Pdf() 注释和工作。提前致谢。
  • 很抱歉,但我没有继续研究这方面的任何东西......它对我和我的需求很有用,具体到足以忘记它并继续下去。
  • 唯一要添加到答案的内容是精确的树枝模板的根节点应该是&lt;pdf&gt;
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多