src/Controller/FlagPdfGeneratorController.php line 18

  1. <?php
  2. namespace App\Controller;
  3. use App\Form\FlagsPdfType;
  4. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  5. use Knp\Snappy\Pdf;
  6. use setasign\Fpdi\Fpdi;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Form\FormFactoryInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class FlagPdfGeneratorController extends AbstractController
  13. {
  14.     #[Route('/{_locale}/flags-pdf'name'flag_pdf_generator')]
  15.     public function index(Request $requestFormFactoryInterface $formFactoryPdf $knpSnappyPdf): Response
  16.     {
  17.         $form $formFactory->create(FlagsPdfType::class);
  18.         $form->handleRequest($request);
  19.         if ($form->isSubmitted() && $form->isValid()) {
  20.             $formData $form->getData();
  21.             $path $request->getUriForPath('/flags/' $formData['flag'] . '.svg');
  22.             $html $this->renderView(
  23.                 'flag_pdf_generator/pdf.html.twig', [
  24.                     'flagPath' => $path,
  25.                     'flagSize' => $formData['flagWidth']
  26.                 ]
  27.             );
  28.             $pdfContent $knpSnappyPdf->getOutputFromHtml($html, ['page-size' => $formData['format']]);
  29.             $tempFile tempnam(sys_get_temp_dir(), 'pdf');
  30.             file_put_contents($tempFile$pdfContent);
  31.             $pdf = new Fpdi();
  32.             $pageCount $pdf->setSourceFile($tempFile);
  33.             $pdf->AddPage();
  34.             $tplIdx $pdf->importPage(1);
  35.             $pdf->useTemplate($tplIdx);
  36.             // Save the modified PDF to a temporary file
  37.             $modifiedTempFile tempnam(sys_get_temp_dir(), 'pdf');
  38.             $pdf->Output($modifiedTempFile'F'); // 'F' means save to file
  39.             unlink($tempFile);
  40.             // Return the modified PDF as a downloadable file using PdfResponse
  41.             $response = new PdfResponse(file_get_contents($modifiedTempFile), 'flags.pdf');
  42.             // Clean up the modified temporary file
  43.             unlink($modifiedTempFile);
  44.             return $response;
  45.         }
  46.         return $this->render('flag_pdf_generator/index.html.twig', [
  47.             'form' => $form,
  48.         ]);
  49.     }
  50. }