Обзор Playwright PDF: возможности Page.pdf(), ограничения и сценарии применения
Playwright PDF — неофициальное название возможности Microsoft Playwright сохранять отрендеренную веб-страницу в PDF. Отдельного продукта, установщика или тарифа с таким именем нет: в библиотеке экспорт выполняет Page.pdf(), а Playwright MCP предлагает отдельный инструмент сохранения текущей страницы. Это механизм браузерной автоматизации для HTML-to-PDF, а не программа для чтения или ручного редактирования готовых файлов.
| Параметр | Актуальное состояние |
|---|---|
| Разработчик | Microsoft Corporation, проект Playwright |
| Тип | API и инструменты браузерной автоматизации с экспортом страницы в PDF |
| Актуальная стабильная версия Playwright | 1.63.0, выпущена 4 сентября 2026 года |
| PDF-движок | Chromium; PDF-генерация не является кросс-браузерной функцией Firefox и WebKit |
| Вход | Веб-страница, URL или HTML, загруженный в Page |
| Выход | PDF-файл или PDF-буфер в памяти |
| Платформы | Windows 11+, Windows Server 2019+, WSL, macOS 14+, Debian 12/13, Ubuntu 22.04/24.04/26.04 |
| Языки API | TypeScript/JavaScript, Python, Java, .NET |
| Лицензия | Apache License 2.0 |
| Цена | Сам Playwright распространяется бесплатно; отдельной платной PDF-редакции нет |
| Аккаунт и облако | Для локальной библиотеки аккаунт Playwright не нужен; генерация выполняется в запущенном браузере в вашей среде |
Скачать Playwright PDF
Новейшая версия для Виндовс, macOS и Линукс. Удобный редактор PDF под российские реалии.
Скачивать «Playwright PDF» как отдельную программу не нужно и негде: официально такой дистрибутив не выпускается. Безопасный путь — установить сам Playwright через пакетный менеджер выбранного языка, а затем отдельно поставить совместимый браузерный бинарник Chromium. На 12 сентября 2026 года последним стабильным релизом основного проекта является Playwright 1.63.0. Для него в официальных примечаниях к релизу указан Chromium 153.0.8010.12; той же веткой Playwright поддерживаются Firefox 155 и WebKit 26.6, но именно PDF-экспорт относится к Chromium.
Для JavaScript/TypeScript библиотечный сценарий начинается с пакета playwright. После установки пакета браузеры больше не скачиваются автоматически: начиная с Playwright 1.38 их следует устанавливать явной командой. Если задача ограничена PDF, практичнее не тянуть весь набор движков, а установить только Chromium. На Linux официальный CLI умеет одновременно добавить системные зависимости командой установки с параметром with-deps.
Браузерные бинарники по умолчанию загружаются из CDN Microsoft. В корпоративной сети Playwright позволяет задать прокси или собственный репозиторий артефактов, что важно для закрытых контуров. После обновления самого Playwright браузерный бинарник нередко требуется переустановить: каждый релиз привязан к конкретным версиям браузеров.
Что такое Playwright PDF
Playwright — проект Microsoft для автоматизации Chromium, Firefox и WebKit в тестах, скриптах и агентных сценариях. PDF здесь является побочной, но полезной функцией браузерного рендеринга: код открывает страницу, ждёт нужного состояния и просит Chromium «напечатать» её в PDF. В Node.js это метод Page.pdf(), возвращающий Buffer; в Python аналог возвращает bytes, а Java и .NET предоставляют соответствующие методы своих Page API.
Такое позиционирование принципиально отличается от PDF-редактора. Playwright не предназначен для ручного открытия готового PDF, правки текста, OCR, расстановки комментариев, подписания документов или визуальной сборки страниц. Его сильная сторона — превратить уже существующую HTML/CSS-страницу или динамический веб-интерфейс в воспроизводимый PDF внутри автоматизированного процесса.
Отдельно существует Playwright MCP. В его документации PDF Export описан как capability, который даёт инструмент browser_pdf_save для сохранения текущей страницы. Это удобный интерфейс для агентных систем, но он не заменяет Page.pdf() и не должен смешиваться с библиотечным API: конфигурация, жизненный цикл и способ вызова отличаются. Для обычного серверного сервиса, тестового скрипта или генератора счетов базовым объектом обзора остаётся Page.pdf().
Основные функции Playwright PDF
Экспорт страницы в файл или память
Page.pdf() может записать результат по указанному пути или вернуть PDF только в память. Если path не задан, Playwright не создаёт файл на диске. Это удобно для веб-сервиса: буфер можно сразу отправить клиенту, положить в объектное хранилище или передать в следующий этап обработки, не создавая временный файл.
Размер бумаги, ориентация и поля
API принимает готовые форматы Letter, Legal, Tabloid, Ledger и A0–A6. Можно задавать собственные ширину и высоту; поддерживаются px, in, cm и mm, а числовое значение без единицы трактуется как пиксели. Параметр landscape переключает ориентацию. Поля задаются отдельно для верхней, правой, нижней и левой сторон; по умолчанию поля отсутствуют. Если указан format, он имеет приоритет над width и height.
CSS для печати и контроль масштаба
По умолчанию Page.pdf() рендерит страницу с CSS media type print. Если нужен вид, близкий к экранному, перед экспортом можно вызвать emulateMedia с media screen. Опция preferCSSPageSize отдаёт приоритет размеру страницы, заданному в CSS через @page; без неё Playwright масштабирует содержимое под выбранный формат. Параметр scale допускает значения от 0,1 до 2 и по умолчанию равен 1.
Для фоновой графики есть printBackground, которая по умолчанию выключена. Документация отдельно предупреждает, что печатный рендеринг может модифицировать цвета; для максимально точного цвета используется CSS-свойство -webkit-print-color-adjust. Это не гарантирует полиграфическое соответствие ICC-процессу, но позволяет избежать типичного упрощения цветов браузером при печати.
Страницы, колонтитулы и нумерация
pageRanges позволяет вывести только выбранные страницы, например диапазоны и отдельные номера. displayHeaderFooter включает печатные колонтитулы. В headerTemplate и footerTemplate доступны специальные классы для даты, заголовка документа, URL, текущего номера страницы и общего количества страниц. Ограничение существенное: script внутри шаблонов не выполняется, а стили основной страницы не наследуются в эти шаблоны, поэтому оформление колонтитулов нужно задавать самостоятельно.
Структура PDF
Начиная с Playwright 1.42 в Page.pdf() есть две важные опции: tagged для создания тегированного PDF и outline для добавления структуры закладок/outline. Обе в API Playwright по умолчанию выключены. Их наличие делает экспорт пригоднее для доступности и навигации, однако включение флага само по себе не превращает плохо размеченный HTML в качественный доступный документ: исходная семантика, заголовочная структура и порядок чтения по-прежнему определяются страницей и поведением Chromium.
Динамические страницы перед печатью
Главное преимущество Playwright перед простым HTTP-конвертером — перед Page.pdf() можно полноценно управлять страницей: перейти по URL, установить контент, дождаться элементов, выполнить JavaScript в контексте страницы, пройти авторизацию, заполнить форму, выбрать состояние интерфейса или переключить media. Это позволяет печатать SPA и приватные кабинеты уже после завершения клиентского рендеринга. Но именно разработчик отвечает за условие готовности: PDF снимет то состояние DOM, которое существует в момент вызова.
Интерфейс и удобство использования
У Page.pdf() нет графического интерфейса. Основная «рабочая зона» — код проекта, терминал и объект Page. Типичная логика: запуск Chromium, создание BrowserContext/Page, получение HTML и вызов PDF-метода. Для пользователя, ожидающего меню «Файл → Экспорт в PDF», порог входа высокий. Язык интерфейса настольной программы здесь неприменим; имена API и параметров задаются англоязычными идентификаторами.
Порог освоения определяется скорее знакомством с веб-разработкой, чем с PDF. Нужно понимать CSS print, @page, загрузку шрифтов, сетевые запросы и асинхронность. Если эти понятия привычны, Playwright даёт прозрачный контроль. Если задача — вручную объединять файлы, переставлять страницы или править существующий PDF, гораздо удобнее использовать обычный PDF-инструмент, например PDF24 Creator или редактор другого класса.
Поддерживаемые форматы и совместимость
Входом для Playwright PDF является не «формат документа» в классическом смысле, а содержимое веб-страницы, которое способен отрендерить Chromium. Это может быть URL приложения или HTML, загруженный в Page.setContent(). CSS, веб-шрифты, изображения и JavaScript обрабатываются браузером как часть страницы. Поэтому список входных типов фактически определяется возможностями Chromium и доступностью ресурсов, а не таблицей конвертеров DOCX/XLSX/PPTX.
Прямой экспорт у Page.pdf() один — PDF. Функция не конвертирует PDF обратно в HTML, DOCX или изображения и не импортирует готовый PDF для редактирования. Для изображений Playwright имеет отдельный screenshot API, который не следует путать с Page.pdf(). В headless-режиме документация также предупреждает об ограничении навигации непосредственно к PDF-документу; это ещё раз подчёркивает, что Page.pdf() предназначен для печати веб-страницы, а не для обработки уже существующего PDF.
API доступен для TypeScript/JavaScript, Python, Java и .NET на поддерживаемых Windows, macOS и Linux. Playwright в целом управляет Chromium, Firefox и WebKit, но PDF формирует Chromium, поэтому PDF-результат не является кросс-браузерным.
Для дальнейшего чтения итогового файла Playwright не навязывает просмотрщик. PDF можно открыть в Sumatra PDF или другом reader. Здесь роли дополняют друг друга: Playwright создаёт PDF, а Sumatra PDF быстро его показывает. Если же нужен импорт офисных документов с последующей ручной правкой, ближе по классу будет LibreOffice, а не Playwright.
Производительность и стабильность
Playwright PDF использует настоящий браузерный процесс, поэтому его ресурсоёмкость выше, чем у утилиты, которая работает только с готовой разметкой или PDF-структурой. Память и процессор расходуются не только на PDF-вывод, но и на Chromium, JavaScript страницы, шрифты, изображения и сетевые запросы. Официальная документация не задаёт универсального лимита по числу страниц или размеру PDF, поэтому обещать конкретную производительность без измерений на целевой странице неправильно.
Стабильность результата сильнее всего зависит от детерминированности источника. Если страница подгружает данные после load, использует анимации, случайные значения, нестабильные API или шрифты из сети, два запуска могут увидеть разное состояние. Надёжный процесс должен явно ожидать признаки готовности, фиксировать входные данные, использовать предсказуемые шрифты и по возможности контролировать внешние ресурсы. Слепое ожидание фиксированного таймера хуже события или состояния DOM, которое действительно означает готовность документа.
После обновления Playwright меняется и привязанный Chromium. Это повышает совместимость с современным вебом, но делает версию браузера частью воспроизводимости. Если юридически значимый шаблон должен выглядеть одинаково месяцами, версию Playwright и браузерных артефактов разумно фиксировать и обновлять после визуальной проверки, а не по плавающему latest в каждом CI-запуске.
Лицензирование и версии
Playwright распространяется под Apache License 2.0. В репозитории версии 1.63.0 автором указан Microsoft Corporation, а пакетная метаинформация также содержит Apache-2.0. Отдельной лицензии, подписки, бесплатного лимита страниц или пробного периода для Page.pdf() нет. Плата за сам вызов PDF API не взимается.
Для корпоративного внедрения важен и браузерный слой. Playwright по умолчанию скачивает совместимые браузеры из Microsoft CDN; компания может перенаправить загрузку на свой репозиторий. Такой сценарий удобен для контролируемой поставки, но организация самостоятельно отвечает за хранение артефактов, уязвимости, обновления и соответствие внутренним политикам.
Системные требования
JavaScript и TypeScript
Актуальная страница установки Playwright Test указывает последние ветки Node.js 22.x, 24.x или 26.x как поддерживаемые. При этом package.json релиза 1.63.0 содержит техническое ограничение engines Node >=20. Для продакшена разумнее ориентироваться на список поддерживаемых версий из документации, а не только на минимальный engines. Поддерживаемые ОС: Windows 11+, Windows Server 2019+ или WSL; macOS 14 Sonoma и новее; Debian 12/13; Ubuntu 22.04/24.04/26.04 на x86-64 или arm64.
Python
Для Python официально требуется Python 3.8 или выше. Набор ОС совпадает: Windows 11+/Server 2019+/WSL, macOS 14+, Debian 12/13 и Ubuntu 22.04/24.04/26.04 на x86-64 или arm64.
Java
Java-реализация требует Java 8 или выше и тот же актуальный набор поддерживаемых ОС. Браузеры устанавливаются через Playwright CLI, запускаемый из Maven.
.NET
Playwright поставляется как библиотека .NET Standard 2.0; официальная документация рекомендует .NET 8. Поддерживаются те же Windows, macOS и Linux-платформы. Для установки браузеров после сборки используется сгенерированный playwright.ps1 через PowerShell.
Независимо от языка требуется дисковое место под Chromium и его зависимости. Официальная документация подчёркивает, что браузеры занимают сотни мегабайт; точный объём меняется от релиза к релизу. Если нужен только PDF, установка одного Chromium экономнее, чем загрузка Chromium, Firefox и WebKit одновременно.
Преимущества и недостатки Playwright PDF
Плюсы и минусы
Плюсы ✔️
- Использует реальный Chromium, поэтому хорошо подходит для современных HTML/CSS/JavaScript-приложений и SPA.
- Позволяет сначала автоматизировать состояние страницы, а затем печатать именно это состояние.
- Поддерживает размеры бумаги, ориентацию, поля, диапазоны страниц, фон, масштаб, печатные колонтитулы и CSS @page.
- Может возвращать PDF в память, что удобно для API и бессерверных цепочек без временного файла.
- Есть опции tagged и outline, добавленные в Playwright 1.42.
- Бесплатная лицензия Apache 2.0, без лимита страниц и обязательного аккаунта.
- Доступен из TypeScript/JavaScript, Python, Java и .NET.
Минусы ❌
- Это не отдельный PDF-редактор и не GUI-программа; для использования нужен код или агентный/MCP-сценарий.
- PDF-генерация зависит от Chromium, несмотря на общую кросс-браузерность Playwright.
- Браузерный процесс тяжелее специализированного «чистого» движка HTML-to-PDF.
- Результат может зависеть от асинхронных ресурсов, веб-шрифтов, API и текущего состояния страницы.
- Шаблоны headerTemplate/footerTemplate не исполняют script и не наследуют стили основной страницы.
- Playwright не редактирует существующие PDF, не выполняет OCR и не собирает PDF из готовых страниц визуально.
- Обновление Playwright обычно означает обновление совместимого Chromium, что требует регрессионной проверки печати.
Карта критических зависимостей
| Зависимость | Зачем нужна | Что ломается при проблеме | Как снизить риск |
|---|---|---|---|
| Playwright | API управления страницей и вызов PDF | Скрипт не запускается или меняет поведение после обновления | Фиксировать версию и обновлять контролируемо |
| Chromium соответствующей версии | Фактический рендеринг и печать | Page.pdf() недоступен или результат отличается | Устанавливать браузер через CLI той же версии Playwright |
| ОС и системные библиотеки | Запуск браузера, шрифтовый и графический стек | Chromium не стартует, отсутствуют шрифты | Использовать поддерживаемый образ и install —with-deps |
| Шрифты | Метрики текста и переносы | Сдвигается пагинация, появляются подстановки | Поставлять контролируемый набор шрифтов |
| Сеть и внешние ресурсы | API, изображения, CSS, web-fonts | Пустые блоки, неполная верстка, таймауты | Кэшировать или локализовать критичные ресурсы |
| Данные приложения | Фактическое содержимое документа | PDF генерируется в промежуточном состоянии | Ожидать проверяемый сигнал готовности |
Обязательного аккаунта Playwright или облачного сервиса в этой цепочке нет. Однако если исходная страница удалённая, сам браузер выполняет обычные сетевые обращения к её домену и связанным ресурсам. Для закрытых документов это нужно учитывать в модели приватности: локальная генерация не означает автоматически «без сети», если HTML обращается к внешним URL.
При работе с чувствительными данными лучше создавать отдельный BrowserContext для каждой задачи и не автоматизировать повседневный пользовательский профиль Chrome. Документация Playwright отдельно предупреждает, что автоматизация основного Chrome User Data Directory не поддерживается; для persistent context следует использовать отдельную директорию. Это также уменьшает риск случайно утащить в документ чужие cookie или состояние сеанса.
Паспорт обратимости операций
Page.pdf() не изменяет исходный HTML-файл или страницу на сервере сам по себе: он создаёт производный PDF из текущего состояния браузера. Поэтому операция обратима только в организационном смысле — можно снова открыть исходный HTML и сгенерировать новый PDF с другими параметрами. Сам PDF не содержит достаточной информации, чтобы восстановить приложение, его JavaScript, исходные данные и точные стили как редактируемый проект.
| Операция | Что сохраняется | Что теряется | Способ отката |
|---|---|---|---|
| HTML/URL → PDF | Визуальный результат печати, текст и структура в объёме, который сформировал Chromium | Исходный код приложения, интерактивность, бизнес-логика | Перегенерировать из исходной страницы |
| print → screen media | Контент страницы | Может измениться печатная компоновка | Вернуть media print и повторить экспорт |
| Изменение format/полей/scale | Исходный HTML | Предыдущая пагинация в новом файле | Хранить профиль параметров и повторить генерацию |
| Обновление Playwright/Chromium | Шаблоны и данные | Гарантия идентичного браузерного рендеринга | Откатить зафиксированные версии пакета и browser image |
Практический вывод: для воспроизводимых документов нужно версионировать не только готовый PDF, но и HTML-шаблон, входные данные, параметры Page.pdf(), используемые шрифты и версию Playwright. Тогда любой спорный результат можно сравнить с предыдущей конфигурацией и пересобрать.
Сравнение с аналогами
| Решение | Модель | Современный JS | Печатный CSS | Лицензирование | Когда выбирать |
|---|---|---|---|---|---|
| Playwright PDF | Автоматизация Chromium + API | Да, полноценная страница Chromium | Да, через print media и @page | Apache 2.0 | SPA, кабинеты, отчёты после действий в браузере |
| Puppeteer | API автоматизации браузера | Да | Да, Page.pdf() | Открытый проект | Если нужен прежде всего Chrome/Chromium и экосистема Puppeteer |
| Prince | Специализированный HTML/XML-to-PDF движок | JavaScript поддерживается, но цель — типографская верстка | Сильный paged-media набор | Коммерческий для коммерческого использования | Книги, издательские и сложные печатные макеты |
| WeasyPrint | HTML/CSS renderer без полного браузерного движка | Не как браузерное приложение | Ориентирован на печатные стандарты | BSD | Python-проекты и документы, где не нужен клиентский JS |
| Sumatra PDF | Просмотрщик документов | Не относится к генерации | Не относится к генерации | Бесплатный open-source reader | Быстро открыть и проверить уже созданный PDF |
Puppeteer функционально ближе всего: его Page.pdf() тоже печатает страницу через браузер и предлагает похожие параметры. Выбор между ним и Playwright обычно определяется всей системой автоматизации, а не одной PDF-функцией. Если проект уже использует Playwright для авторизации, навигации и тестов, вводить второй браузерный стек только ради PDF редко оправданно.
Prince — специализированный коммерческий HTML/XML-to-PDF движок с сильным paged-media набором. На его официальном сайте актуальной стабильной версией указана 16.2, выпущенная в январе 2026 года. Для сложной издательской верстки он может быть уместнее браузера, но Playwright бесплатен и естественнее для динамических веб-приложений. Среди настольных решений на sumatra-pdf.com близким по идее создания PDF через печать является pdfFactory, хотя это виртуальный принтер, а не серверный HTML-рендерер.
WeasyPrint написан для HTML/CSS→PDF без полного браузерного движка. Он хорошо вписывается в Python и поддерживает специализированные PDF-варианты, но динамическое веб-приложение с клиентским JavaScript — не его профиль. Для статических шаблонов это может быть преимуществом: меньше браузерной инфраструктуры. Для «открыть личный кабинет, дождаться графиков и скачать отчёт» Playwright естественнее.
Sumatra PDF сравнивать как прямой аналог некорректно. Он не генерирует страницу в PDF, а открывает готовый документ. В нормальном процессе эти инструменты стоят по разные стороны: Playwright создаёт, Sumatra показывает. Если пользователю нужен не код, а ручная печать любого Windows-приложения в PDF, ближе будет doPDF; если нужно редактировать итоговый PDF, смотрите класс полноценного редактора вроде Adobe Acrobat Pro.
Инструкция по установке
Node.js: минимальная установка для PDF
- Проверьте, что система входит в актуальный список поддерживаемых ОС и установлен поддерживаемый Node.js. Для текущей документации предпочтительны последние 22.x, 24.x или 26.x.
- Создайте отдельный проект и добавьте пакет Playwright командой npm i -D playwright.
- Установите только Chromium командой npx playwright install chromium. На поддерживаемом Linux для автоматической установки системных зависимостей применяют npx playwright install —with-deps chromium.
- Проверьте версию командой npx playwright —version. Для зафиксированного окружения версия пакета в lock-файле и установленный браузер должны соответствовать друг другу.
- В первом скрипте запустите chromium, создайте page, откройте контролируемую тестовую страницу и вызовите page.pdf с явным path. После сохранения закройте browser.
- Откройте полученный PDF любым независимым просмотрщиком и проверьте число страниц, шрифты, фон, ссылки и переносы.
Python
Для библиотечного сценария официальный путь: обновить pip при необходимости, установить playwright, затем выполнить playwright install. Если PDF — единственная задача, можно установить только Chromium. В коде доступны синхронный и асинхронный API, а page.pdf возвращает bytes и при path сохраняет файл.
Java и .NET
В Java зависимость добавляется через Maven, а браузеры ставятся Playwright CLI, запускаемым из Maven. В .NET добавляется пакет Microsoft.Playwright, проект собирается, после чего сгенерированный playwright.ps1 устанавливает браузеры. В обоих случаях для PDF нужен Chromium; ставить Firefox и WebKit только ради Page.pdf() нет смысла.
Первый безопасный запуск
Для первой проверки лучше использовать локальный или публичный тестовый HTML без авторизации и внешних секретов. Сначала добейтесь стабильного рендера A4/Letter без колонтитулов, затем добавляйте фон, поля и шаблоны. Не начинайте с боевого кабинета: так проще отделить ошибки установки от проблем данных, сети и авторизации.
Удаление
Браузерные бинарники текущей установки можно удалить командой npx playwright uninstall; вариант —all удаляет браузеры, установленные всеми обнаруженными Playwright-инсталляциями, поэтому его стоит применять осторожно. После этого пакет удаляется обычным менеджером зависимостей проекта. Удаление Playwright не должно подменять очистку созданных вами PDF, временных директорий, кэшей приложения или секретов CI — ими управляет сам проект.
Практические кейсы
Счёт из серверной HTML-страницы
Цель: превратить заранее подготовленный HTML-счёт в A4 PDF. Подготовка: локализовать критические шрифты и изображения, определить CSS @page и печатные стили. Шаги: создать страницу, загрузить HTML через setContent, дождаться состояния, при котором все суммы и реквизиты присутствуют в DOM, затем вызвать Page.pdf() с A4, нужными полями и printBackground. Проверка: открыть файл в независимом просмотрщике и сопоставить номер счёта, итоговую сумму, число страниц и отсутствие обрезанного текста. Ограничение: Page.pdf() не проверяет бухгалтерскую корректность данных; он только печатает полученную страницу.
Архивирование приватной страницы после входа
Цель: сохранить страницу, доступную только после авторизации. Подготовка: выделить отдельный BrowserContext и тестовую учётную запись с минимальными правами. Шаги: выполнить вход стандартными действиями Playwright, перейти к нужному представлению, дождаться конкретного элемента с финальными данными, затем создать PDF. Проверка: убедиться, что документ содержит ожидаемый идентификатор пользователя/отчёта и не включает меню или уведомления, которые не должны попасть в архив. Ограничение: такой PDF может содержать персональные данные; политика хранения и передачи определяется вашей системой, а не Playwright.
Экранный дизайн вместо печатной темы
Цель: получить PDF, визуально ближе к экранному состоянию. Подготовка: убедиться, что экранная верстка корректно ведёт себя при пагинации. Шаги: перед Page.pdf() переключить media на screen, включить фон при необходимости и выбрать формат бумаги. Проверка: сравнить ключевые цвета, видимость блоков и ширину контента с экранным эталоном. Ограничение: экранный CSS не обязан быть пригоден для разбиения на страницы; фиксированные панели и широкие таблицы могут печататься неудобно.
Длинный отчёт с нумерацией и закладками
Цель: сформировать многостраничный отчёт с навигацией. Подготовка: выстроить семантические заголовки в исходном HTML и заранее проверить page-break/окна разрыва. Шаги: включить displayHeaderFooter, задать простой footerTemplate с номером страницы и totalPages, включить outline и при необходимости tagged. Проверка: проверить нумерацию от первой до последней страницы и наличие структуры/закладок в просмотрщике, который умеет их показывать. Ограничение: качество доступности зависит от HTML и результата Chromium; флаг tagged не заменяет аудит PDF/UA.
Контроль перед сохранением и передачей
- Проверить, что данные на странице действительно финальные, а не skeleton/loading state.
- Проверить загрузку шрифтов, изображений и диаграмм, особенно если они приходят по сети.
- Сверить format, orientation, margin и preferCSSPageSize с требованиями шаблона.
- Решить, нужен ли printBackground и какая media-тема используется — print или screen.
- Проверить первую, среднюю и последнюю страницу на неожиданные разрывы.
- Проверить, не попали ли в PDF cookies, email, токены, внутренние URL или служебные панели, отображаемые пользователю.
- Открыть итог в другом PDF-просмотрщике; для быстрой проверки подойдёт Sumatra PDF.
Навигатор по сбоям
| Симптом | Первая проверка | Вероятная причина | Безопасное действие |
|---|---|---|---|
| Нет фона | printBackground | По умолчанию фон не печатается | Явно включить опцию и повторить |
| Верстка отличается от экрана | Текущий media type | Page.pdf() использует print CSS | Исправить print-стили или осознанно перейти на screen |
| Обрезаны края | format, width/height, margin | Конфликт размеров или CSS @page | Определить один источник размеров и проверить preferCSSPageSize |
| Шрифт заменён | Наличие файла и состояние загрузки | Шрифт недоступен в окружении | Установить/встроить контролируемый шрифт и дождаться его готовности |
| Пустой график | DOM и сетевые запросы перед pdf | Данные ещё не отрисованы | Ждать сигнал готовности графика, а не фиксированный sleep |
| После обновления изменились переносы | Версия Playwright и Chromium | Новый рендеринг или шрифтовый стек | Сравнить с закреплённой старой версией и провести регрессию |
Часто задаваемые вопросы
Playwright PDF — отдельная программа Microsoft?
Нет. У Microsoft есть проект Playwright, а PDF создаётся его API и инструментами. Для библиотечного использования основная функция — Page.pdf(). Отдельного настольного приложения «Playwright PDF» не существует.
Можно ли генерировать PDF через Firefox или WebKit?
Playwright в целом автоматизирует три движка, но PDF-генерация является Chromium-only возможностью. Поэтому сценарий PDF следует строить на Chromium.
Нужен ли интернет?
Для первичной загрузки пакетов и браузера обычно нужен доступ к репозиторию пакетов и CDN Microsoft, если компания не использует собственный mirror. Во время генерации интернет не нужен для полностью локального HTML и локальных ресурсов. Но страница с внешними API, изображениями или шрифтами будет обращаться в сеть.
Нужен ли аккаунт Microsoft?
Для локального Playwright и Page.pdf() обязательной регистрации нет. Учетные записи могут требоваться уже целевым сайтом, CI-платформой или сторонним облаком, но это не требование PDF API.
Можно ли сделать PDF/A?
В документированном наборе Page.pdf() нет параметра выбора PDF/A-профиля. Если нормативно требуется PDF/A, нужна последующая специализированная обработка или генератор, который официально поддерживает нужный профиль, например инструмент соответствующего класса.
Можно ли получить доступный PDF?
Опция tagged позволяет попросить Chromium создать тегированный PDF, а outline — структуру закладок. Но соответствие конкретному стандарту доступности необходимо валидировать отдельно: результат зависит от исходной семантики HTML и браузерного экспорта.
Почему формат по умолчанию Letter, а не A4?
В API Page.pdf() default для format указан как Letter. Если нужен A4, лучше задавать его явно либо использовать корректный CSS @page вместе с preferCSSPageSize. Не стоит полагаться на региональные настройки машины.
Можно ли сохранить только несколько страниц?
Да. pageRanges принимает диапазоны и отдельные номера страниц. Сначала желательно стабилизировать пагинацию, иначе после изменений шрифтов или полей нужный фрагмент может оказаться на других номерах.
Можно ли вставить JavaScript в headerTemplate?
Нет. Документация прямо указывает, что script внутри шаблонов headerTemplate и footerTemplate не выполняется. Кроме того, стили основной страницы в шаблоны не попадают автоматически.
Что безопаснее для CI: ставить все браузеры или только Chromium?
Если задача конкретно в генерации PDF и кросс-браузерные тесты в этом job не нужны, достаточно Chromium. Это уменьшает загрузку и размер кэша. Если тот же pipeline выполняет тесты Firefox/WebKit, их можно устанавливать отдельно по потребности.
Playwright заменяет PDF-редактор?
Нет. Он создаёт PDF из страницы, но не предоставляет типичный набор редактирования существующего файла. Для правок, форм, подписей, OCR или перестановки страниц нужен инструмент другого класса, например PDF-XChange Editor.
Вывод
Playwright PDF стоит выбирать разработчикам, которые уже работают с веб-приложением и хотят программно получать PDF из реального состояния Chromium: после авторизации, выполнения JavaScript, загрузки данных и применения CSS. В этом сценарии Page.pdf() даёт хороший баланс контроля и простоты: формат бумаги, поля, диапазоны страниц, фон, масштаб, колонтитулы, CSS media, outline и tagged доступны без отдельного коммерческого движка.
Не стоит выбирать Playwright как замену PDF-редактору, OCR-системе или настольному конвертеру. Он также не лучший ответ на задачу сложной книжной верстки, где специализированный paged-media движок может давать больше типографских возможностей, или на статический Python-шаблон без JavaScript, где WeasyPrint проще по архитектуре.
Главное ограничение — зависимость от Chromium и от состояния веб-страницы. При серьёзном использовании нужно фиксировать версию Playwright, контролировать браузер и шрифты, явно ждать готовность данных и регрессионно проверять PDF при обновлениях. А для просмотра уже созданного файла Playwright не нужен: здесь логично передать результат лёгкому reader, включая Sumatra PDF.