Retourner un document PDF depuis un contrôleur Symfony
Publié le 04/07/2021 • Actualisé le 04/07/2021
Dans ce bout de code, nous voyons comment retourner un document PDF depuis un contrôleur Symfony. Nous allons utiliser la librairie spipu/html2pdf
. Je n'utilise pas de bundle dédié ici ; on utilise la réponse BinaryFileResponse
fournie par Symfony pour créer une réponse. La fonction setContentDisposition()
permet d'indiquer si le fichier doit être affiché (DISPOSITION_INLINE
) ou téléchargé (DISPOSITION_ATTACHMENT
) mais aussi de spécifier le nom du fichier plutôt que d'utiliser celui du fichier temporaire.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use Spipu\Html2Pdf\Html2Pdf;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet153Trait
{
public function snippet153(): Response
{
$tmpFileName = (new Filesystem())->tempnam(sys_get_temp_dir(), 'sb_', '.pdf');
$html = '<h1>Strangebuzz.com</h1><br/><table border="1"><tr><td>COil</td><td>Col2</td></tr></table>';
(new Html2Pdf())->writeHTML($html)->output($tmpFileName, 'F');
return (new BinaryFileResponse($tmpFileName, Response::HTTP_OK))
->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'example.pdf');
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Lire la doc Snippet aléatoire