Back to Posts

How to save a webpage as PDF file using Puppeteer.js

Browser , Headless , PDF , Puppeteer.js
const puppeteer = require("puppeteer");

class Webpage {
  static async generatePDF(url) {
    const browser = await puppeteer.launch({ headless: true }); // Puppeteer can only generate pdf in headless mode.
    const page = await browser.newPage();
    await page.goto(url, {
      waitUntil: "networkidle",
      networkIdleTimeout: 5000
    }); // Adjust network idle as required.
    const pdfConfig = {
      path: "url.pdf", // Saves pdf to disk.
      format: "A4",
      printBackground: true,
      margin: {
        // Word's default A4 margins
        top: "2.54cm",
        bottom: "2.54cm",
        left: "2.54cm",
        right: "2.54cm"
      }
    };
    await page.emulateMedia("screen");
    const pdf = await page.pdf(pdfConfig); // Return the pdf buffer. Useful for saving the file not to disk.

    await browser.close();

    return pdf;
  }
}

(async () => {
  const url =
    "https://ia601405.us.archive.org/18/items/alicesadventures19033gut/19033-h/19033-h.htm";
  const buffer = await Webpage.generatePDF(url);
})();
Read Next

How to save a webpage as PDF file and send via email using Puppeteer and Nodemailer.js