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.
Mon script JS:
Code : Sélectionner tout - Visualiser dans une fenêtre à part node public/js/htmlToPdf.js cookieName cookieValue
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.
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(); })();
Mon controlleur:
L'erreur:
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); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part (node:11982) UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
Ma config :
- Apache (Mamp)
- Symfony 3.4
- PHP 7.2
- Repo Github de mon projet
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![]()
Partager