Настройка формата и полей PDF

Puppeteer предоставляет мощные средства для автоматизации браузерных операций и, в том числе, для работы с генерацией PDF-документов. Браузерный движок Chromium, используемый в Puppeteer, позволяет настраивать внешний вид PDF-документов с помощью различных опций. Работа с форматом и полями PDF является важной частью тестирования, особенно при создании отчетов, вывода данных и подготовки документации.

Настройка формата страницы

Параметры формата страницы позволяют точно контролировать размеры и ориентацию PDF-документа. Для задания этих настроек используется опция format в методе page.pdf(). В Puppeteer поддерживаются стандартные форматы бумаги, такие как A4, A3, Letter и другие. Также возможно указать произвольные размеры страницы, задав их в пикселях.

await page.pdf({
  path: &
  format: 'A4',
});

В случае, если требуется задать нестандартный размер, можно использовать опции width и height, определяя размеры страницы в пикселях:

await page.pdf({
  path: 'custom-size.pdf',
  width: '210mm',
  height: '297mm',  // A4
});

Такой подход полезен, когда стандартные форматы не подходят под требования проекта или нужно соответствовать специфическим условиям печати.

Ориентация страницы

Один из важных параметров при создании PDF — ориентация страницы. Это можно настроить с помощью параметра landscape. По умолчанию Puppeteer генерирует страницы в портретной ориентации, но для ландшафтного формата необходимо явно указать:

await page.pdf({
  path: 'landscape.pdf',
  format: 'A4',
  landscape: true,
});

Ориентация может существенно повлиять на структуру контента в документе, особенно при работе с таблицами или длинными текстами. Правильная настройка ориентации помогает обеспечить корректное отображение информации.

Маржи и отступы

Настройка отступов является важным аспектом при создании PDF, поскольку они определяют пространство вокруг содержимого. В Puppeteer можно указать маржи страницы с помощью параметров marginTop, marginBottom, marginLeft и marginRight. Все значения задаются в пикселях или миллиметрах:

await page.pdf({
  path: 'with-margins.pdf',
  format: 'A4',
  marginTop: '20mm',
  marginBottom: '20mm',
  marginLeft: '10mm',
  marginRight: '10mm',
});

Отступы могут быть полезны для соблюдения стандартов оформления документа или для подготовки документов к печати, где важно оставить пространство для переплета, штампов и других элементов.

Настройка качества PDF

Одним из дополнительных параметров является quality, который управляет качеством выходного файла. В Puppeteer можно настроить этот параметр для получения либо более высококачественного, но большого файла, либо более сжато сформированного PDF:

await page.pdf({
  path: 'high-quality.pdf',
  format: 'A4',
  quality: 100,  // наибольшее качество
});

Для получения меньшего по размеру файла можно задать значение качества ниже 100, что приведет к дополнительной компрессии графики и других элементов в PDF.

Включение фона в PDF

По умолчанию фоны веб-страниц не включаются в PDF-документ, что может быть неудобно для точного воспроизведения внешнего вида страницы. Для включения фона необходимо использовать параметр printBackground, который позволяет сохранить фоновое изображение, цвета и другие декоративные элементы:

await page.pdf({
  path: 'with-background.pdf',
  format: 'A4',
  printBackground: true,
});

Этот параметр полезен для сохранения целостности дизайна страницы при преобразовании её в PDF.

Прокси-страницы и области вывода

В случае, если требуется создать PDF только из определенной части страницы, например, из конкретного блока, Puppeteer предоставляет параметр clip, который позволяет задать область вывода. Этот параметр указывается как объект с координатами верхнего левого угла и размерами области:

await page.pdf({
  path: 'clipped.pdf',
  format: 'A4',
  clip: {
    x: 0,
    y: 0,
    width: 800,
    height: 600,
  },
});

Это позволяет создавать PDF только из части содержимого страницы, что полезно при необходимости вырезать излишки и экспортировать только определенные разделы.

Автоматическое масштабирование

При работе с PDF можно также настроить масштабирование содержимого, чтобы оно подгонялось под размеры страницы. Это можно сделать с помощью параметра scale, который определяет коэффициент масштабирования относительно исходного размера страницы. Значение по умолчанию — 1:

await page.pdf({
  path: 'scaled.pdf',
  format: 'A4',
  scale: 0.8, // уменьшение размера на 20%
});

Этот параметр полезен, когда нужно уменьшить или увеличить содержимое документа для адаптации под конкретный формат.

Генерация PDF с сохранением полей формы

В некоторых случаях необходимо не только сохранить внешний вид страницы, но и сохранить интерактивные элементы, такие как формы, в PDF. Хотя Puppeteer не поддерживает динамическое взаимодействие с элементами формы на этапе генерации PDF, можно сохранить текущее состояние полей ввода, таких как текст, флажки, радио-кнопки, в PDF-документе. Для этого достаточно вызвать метод pdf() после того, как все поля были заполнены и стилизованы:

await page.type('#name', 'John Doe');
await page.pdf({
  path: 'form-filled.pdf',
  format: 'A4',
});

Этот метод сохранит все текущее состояние формы, включая введенные данные, при создании PDF.

Сложные сценарии: страницы с несколькими колонками

Для более сложных макетов, таких как страницы с несколькими колонками, важно правильно настроить параметры PDF, чтобы документ сохранял читаемость и структуру. В таких случаях можно использовать параметры масштабирования, отступов и ориентации страницы в комбинации, чтобы достичь оптимального результата. Например, для страницы с двумя колонками текста можно использовать горизонтальную ориентацию и небольшие отступы для лучшего восприятия текста.

await page.pdf({
  path: 'multi-column.pdf',
  format: 'A4',
  landscape: true,
  marginTop: '10mm',
  marginBottom: '10mm',
  marginLeft: '5mm',
  marginRight: '5mm',
});

Такая настройка обеспечит адекватное отображение контента на странице с несколькими колонками.

Заключение

Настройка формата и полей PDF с использованием Puppeteer предоставляет гибкость и точность в процессе создания и тестирования PDF-документов. Используя параметры для настройки размера страницы, ориентации, отступов, качества и других аспектов, можно добиться нужного результата, обеспечивая высококачественные PDF-документы с любым содержимым.