Playwright PDFs

With Playwright you can easily take PDFs from any page.

Under the hood Playwright will connect to a (headless) Chrome/Chromium instance, producing pixel-perfect PDFs.

Before continuing this documentation page, make sure you have installed Playwright on your system.

Generating your first PDF

Here's a simple example on how to generate your first PDF with Playwright.
This script will open a Chrome browser, navigate to a webpage and download the PDF to your computer.

const pw = require('playwright');
const fs = require('fs');
const fsPromises = fs.promises;

(async () => {
  const browser = await pw.chromium.connectOverCDP({
    wsEndpoint: 'wss://[YOUR-TOKEN]',
  const context = await browser.newContext();
  const page = await context.newPage();

  await page.goto('');
  const pdf = await page.pdf({ format: 'A4' });
  await fsPromises.writeFile('test.pdf', pdf);

  await browser.close();

This example will save a test.pdf file with the contents of our homepage.

The command page.pdf() will generate a PDF of the page with print CSS media.

To generate a pdf with screen media, make sure you call page.emulateMedia('screen') before calling page.pdf()

More options

Playwright offers a lot of options to tweak PDFs, including:

  • landscape (boolean) Paper orientation. Defaults to portrait (false)
  • pageRanges (string) Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to print all pages.
  • format (string) Paper format. If set, takes priority over width or height options. Defaults to 'Letter'.
  • width (string | number) Paper width, accepts values labeled with units.
  • height (string | number) Paper height, accepts values labeled with units.

See Playwright's list of PDF options for more details on how to customize your PDF generating.