Search code examples
javascriptsymfonypdfchart.jsdompdf

Render Javascript in DOMPDF is not working as expected


I am using DOMPDF for creating PDF documents in the Symfony framework.

  /**
     * @param string $html
     * @param string $name
     *
     * @return string
     */
    public function execute(string $html, string $name): ?string
    {
        $dompdf = new Dompdf();
        $dompdf->setOptions($this->getPdfOptions());
        $dompdf->loadHtml($html);
        $dompdf->render();

        $escapedName = \str_replace('/', '', $name);
        $dompdf->stream($escapedName.".pdf");

        return $dompdf->output();
    }

    /**
     * @return Options
     */
    private function getPdfOptions(): Options
    {
        $pdfOptions = new Options();
        $pdfOptions->set('defaultFont', 'Arial');
        $pdfOptions->setIsPhpEnabled(true);
        $pdfOptions->setIsRemoteEnabled(true);
        $pdfOptions->setIsJavascriptEnabled(true);
        $pdfOptions->set(true);

        return $pdfOptions;
    }

I had enabled JavaScript but there is no output. I use chartJs library for displaying a bar chart.

HTML response is ok, but when HTML (TWIG) response is used for generated PDF, results generated by JavaScript are not the same,
chart is not displayed.


Solution

  • I had a similar issue with CSS a while ago, it appears it wasn't possible to load the css directly inside the template, so the treatment went into the controller. This solution worked for me.

    $dompdf = new Dompdf();
    $html = $this->renderView('path/your_page.html.twig');
    $html .= '<link type="text/css" href="/absolute/path/to/pdf.css" rel="stylesheet" />';
    $dompdf->loadHtml($html);
    

    I suspect it might be the same for your javascript.