Php - Symfony application Application with Symfony to display and save a PDF file generated from HTML code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.9 KiB

namespace App\Service\Facture;
// Include Dompdf required namespaces
use Dompdf\Dompdf;
use Dompdf\Options;
use App\Repository\FactureRepository;
use Twig\Environment;
* service utiliser par FactureController pour enregistrer une facture au format PDF et l afficher dans un
* nouvel onglet
class FactureService
protected $factureRepository;
protected $twig;
protected $pdfDirectory;
protected $chrootDirectory;
* methode d ajout de dependances a la methode __construct aka injection de dependance
* @param FactureRepository le repository pour pouvoir appeller la methode find()
* @param Environment pour travailler avec un template twig
* @param String le chemin du dossier pour enregistrer les factures generees define in config/services.yaml
* @param String $chrootDirectory : le chemin vers le dossier chroot
public function __construct(FactureRepository $factureRepository, Environment $twig, string $pdfDirectory, string $chrootDirectory)
$this->factureRepository = $factureRepository;
$this->twig = $twig;
$this->pdfDirectory = $pdfDirectory;
$this->chrootDirectory = $chrootDirectory;
* sauvegarde le PDF genere et l affiche dans un nouvel onglet
* @param Integer numero identifiant de la facture selectionnee
public function getPDF(int $id)
$facture = $this->factureRepository->find($id);
// configure Dompdf according to the needs
$pdfOptions = new Options();
$pdfOptions->set('chroot', $this->chrootDirectory);
$pdfOptions->set('defaultFont', 'Arial');
// instantiate Dompdf with the options
$dompdf = new Dompdf($pdfOptions);
// retrieve the HTML generated in the twig file
$html = $this->twig->render('facture/pdf.html.twig', [
'title' => "Facture au format PDF",
'facture' => $facture
// load HTML to Dompdf
// (Optional) setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// render the HTML as PDF
// store PDF Binary Data
$output = $dompdf->output();
// write the file in the public directory set in config/services.yaml
$publicDirectory = $this->pdfDirectory;
// concatenate the name with the facture id
$pdfFilepath = $publicDirectory . 'facture_' . $facture->getId() . '.pdf';
// write file to the desired path
file_put_contents($pdfFilepath, $output);
// output the generated PDF to Browser (force download)
$dompdf->stream("mypdf.pdf", [
"Attachment" => false