Bonjour à tous,

J'essaye en vain de transformer une page HTML complexe (graphique chart.js avec des données provenant d'un call API) en PDF en utilisant Puppeteer.
J'ai exactement le même problème que le thread ci-joint (Stackoverflow).

Puppeteer est basé sur Chrome, le script JS navigue jusqu'à la page désiré et la transforme en PDF.
Lorsque j'exécute la commande suivante dans mon terminal, le PDF est généré parfaitement, les graphiques apparaissent, bref tout est ok.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
node public/js/htmlToPdf.js cookieName cookieValue
Mon script JS:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
// Je met en place le cookie avec les données venant du server
const cookie = {
    name: process.argv[2],
    value: process.argv[3],
    domain: 'localhost',
    url: 'http://localhost:8888/',
    path: '/',
    expires: -1,
    httpOnly: true,
    secure: false,
    session: true
};
 
const puppeteer = require('puppeteer');
 
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setCookie(cookie);
    await page.setRequestInterception(true);
    page.on("request", request => {
        console.log(request.url());
        request.continue();
    });
    await page.goto('http://localhost:8888/log/project/1', {waitUntil: 'networkidle0'});
    await page.pdf({
        path: '/Users/Web_dev/PERSONAL_PROJECT/tfe-devlop-eat/public/pdf/test.pdf',
        format: 'A4'
    });
 
    await browser.close();
})();
Lorsque j'exécute mon script via la fonction exec() de PHP via la route de mon controlleur, j'ai un message d'erreur avec le timeout.

Mon controlleur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
    /**
     * @Route("/log/pupet", name="project_pupet")
     */
    public function pupetPdf(Request $request)
    {
        $name = session_name();
        $value = $request->cookies->get($name);
 
        // Appel de la commande avec en paramètre les valeurs du cookie
        exec('/usr/local/bin/node ' . __DIR__ . '/../../public/js/htmlToPdf.js ' . $name . ' ' . $value, $output, $return_var);
    }
L'erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
(node:11982) UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded

Ma config :



Je suis très intéressé d'avoir un retour d'expérience si vous avez déjà utilisé Puppeteer dans un projet PHP.

D'avance merci