В Playwright можно создавать PDF-файлы из веб-страниц. Это открывает интересные сценарии автоматизации таких задач, как архивирование, генерация счетов, написание гайдов, книг и т. д.
В статье мы познакомимся с этой функциональностью и узнаем, как настраивать создаваемый PDF.
Содержание:
- Создание PDF-файла
- Настройка результата
- Настройка верхнего и нижнего колонтитулов
- Дополнительные соображения
Создание файла
После загрузки страницы используем команду page.pdf()
, чтобы преобразовать страницу в PDF.
const { chromium } = require('playwright') ;(async () => { const browser = await chromium.launch() const page = await browser.newPage() await page.goto('https://checklyhq.com/learn/headless') await page.pdf({ path: 'checkly.pdf' }) await browser.close() })()
Обратите внимание, что нам нужно передать параметр path
, чтобы PDF-файл сохранился на диске.
⚠️ В настоящее время эта функция поддерживается только в headless-Chromium в Playwright.
ПОДПИШИТЕСЬ НА НАШ ТЕЛЕГРАМ КАНАЛ Автоматизация тестирования
Настройка создания
Нужно быстро просмотреть официальную документацию по page.pdf()
от Playwright, поскольку почти наверняка понадобится изменить вид созданной PDF-страницы.
В некоторых случаях веб-страница может выглядеть значительно иначе в PDF-файле, по сравнению с браузером. В зависимости от конкретного случая можно поэкспериментировать со следующими вариантами:
- Может понадобиться установить опцию
printBackground
в true, если в сгенерированном PDF отсутствуют графические компоненты. - По умолчанию
функция page.pdf()
генерирует PDF с откорректированными для печати цветами. Установка CSS-свойства-webkit-print-color-adjust: exact
заставит отображать оригинальные цвета. - Вызов
page.emulateMedia('screen')
изменяет тип CSS медиа на странице. - Для оптимального отображения страницы может потребоваться установить соответствующие значения width и height или
format
.
Настройка верхнего и нижнего колонтитулов
Мы также можем добавлять на страницы кастомные верхние и нижние колонтитулы, отображающие заголовок, номер страницы и другое. Посмотрим, как это выглядит на сайте:
const { chromium } = require('playwright') const fs = require('fs') ;(async () => { const browser = await chromium.launch() const page = await browser.newPage() const navigationPromise = page.waitForNavigation() const templateHeader = fs.readFileSync('template-header.html', 'utf-8') const templateFooter = fs.readFileSync('template-footer.html', 'utf-8') await page.goto('https://checklyhq.com/learn/headless') await navigationPromise await page.pdf({ path: 'checkly.pdf', displayHeaderFooter: true, headerTemplate: templateHeader, footerTemplate: templateFooter, margin: { top: '100px', bottom: '40px' }, printBackground: true }) await browser.close() })()
Мы включаем следующие файлы шаблонов для верхнего и нижнего колонтитулов.
template-header.html:
<html> <head> <style type="text/css"> #header { padding: 0; } .content { width: 100%; background-color: #777; color: white; padding: 5px; -webkit-print-color-adjust: exact; vertical-align: middle; font-size: 15px; margin-top: 0; display: inline-block; } .title { font-weight: bold; } .date { text-align:right; } </style> </head> <body> <div class="content"> <span class="title"></span> - <span class="date"></span> <span class="url"></div> </div> </body> </html>
template-footer.html:
<html> <head> <style type="text/css"> #footer { padding: 0; } .content-footer { width: 100%; background-color: #777; color: white; padding: 5px; -webkit-print-color-adjust: exact; vertical-align: middle; font-size: 15px; margin-top: 0; display: inline-block; text-align: center; } </style> </head> <body> <div class="content-footer"> Page <span class="pageNumber"></span> of <span class="totalPages"></span> </div> </body> </html>
Первая страница созданного PDF-файла выглядит следующим образом:

Выполните приведенные выше примеры следующим образом:
node generate-pdf.js
Дополнительные соображения
Мы можем удобно преобразовать веб-страницы в PDF, как это показано в примере выше. Еще более интересный вариант использования – создание совершенно нового документа, используя навыки работы с HTML и CSS, что зачастую избавляет от необходимости использовать LaTeX или аналогичные инструменты.
Перевод статьи «How to Generate PDFs with Playwright».