Tengo una aplicación NextJs con una ruta api, que llama a una página interna para generar un archivo pdf.
Este método genera el archivo pdf en mi ruta API:
function serialize(obj) { var str = []; for (var p in obj) if (obj.hasOwnProperty(p)) { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); } return str.join("&"); }; async function generatePdf(body) { const browser = await puppeteer.launch(); const page = await browser.newPage(); // Allows you to intercept a request; must appear before // your first page.goto() await page.setRequestInterception(true); // Request intercept handler... will be triggered with // each page.goto() statement page.on("request", (interceptedRequest) => { // Here, is where you change the request method and // add your post data var data = { method: "POST", postData: serialize(body), headers: { ...interceptedRequest.headers(), "Content-Type": "application/x-www-form-urlencoded", }, }; // Request modified... finish sending! interceptedRequest.continue(data); // Immediately disable setRequestInterception, or all other requests will hang page.setRequestInterception(false); }); const response = await page.goto(process.env.GEN_PDF_URL, { waitUntil: "networkidle2", }); const pdf = await page.pdf({ path: "test.pdf", printBackground: true, format: "a4", }); const responseBody = await response.text(); console.log(responseBody); await browser.close(); return pdf; } Este método (sendEmail) se llama desde la interfaz, con los datos (req.body) proporcionados para generar la página pdf correctamente. Estoy pasando esos datos como parámetro al método generatePdf .
async function sendEmail(req, res) { const pdf = await generatePdf(req.body); ...Me pregunto si es posible generar esa página usando los datos del proveedor de req.body en nextjs. Para que pueda generar los archivos pdf dinámicamente ya que el contenido de la página Pdf cambia según los datos que envíe.