Tengo un archivo json con información de varias personas. El archivo JS (importado a mi archivo HTML) primero lee el archivo json y almacena la información en una matriz de objetos de personas. Quiero iterar a través de esta matriz, actualizando el HTML para una persona a la vez (esencialmente creando un formulario único para cada persona). Al final de cada actualización (iteración), quiero generar un pdf del HTML actual usando wkhtmltopdf. Luego, la información del HTML se borrará y se actualizará con la información de la siguiente persona, momento en el que se generará un nuevo pdf. Por favor, apúnteme en la dirección correcta para hacer esto.
En realidad, wkhtmltopdf puede ejecutar JavaScript bastante bien (pero no siempre a la perfección). La clave podría ser usar algo como --javascript-delay 3000 - esto hará que wkhtmltopdf espere 3000ms (3 segundos) para que finalice la ejecución de JavaScript. Por ejemplo tengo este archivo
<html> <body> <h1>Users</h1> <div id="users"></div> </body> <script> function pushMessage(msg) { const x = document.createElement("div"); x.innerText = msg; document.getElementById("users").appendChild(x); } function handleUsers(users) { users.forEach(user => pushMessage(user.name)); } try { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState !== 4) return; if (xhr.status >= 200 && xhr.status < 300) { const users = JSON.parse(xhr.responseText); handleUsers(users); } }; xhr.open('GET', 'https://jsonplaceholder.typicode.com/users'); xhr.send(); } catch(e) { document.write(e.message); } </script> </html> Y luego convierto esto con wkhtmltopdf --javascript-delay 3000 index.html index.pdf el resultado esperado en un PDF; lo que significa que se ve igual que ejecutar esto normalmente en el navegador.