3

Symfony2 とPdfBundleを使用して動的に PDF ファイルを生成すると、実際にファイルを生成できません。

ドキュメントの指示に従って、すべてのバンドルをセットアップしました。

autoload.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>

良い。どういうわけか、自分のページに表示されるのは、通常の Response レンダリングであるかのように生成された通常の html だけです。

注釈は、Pdf()通常の HTML をレンダリングするのではなく、PDF ファイルを作成するという「特別な」動作を提供することになっています。

したがって、上記のコードを使用して route をリクエストする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 に答える