PDF генерация в JavaScript: библиотека PDFKit

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое PDFKit?

PDFKit — это мощная библиотека для генерации PDF-документов на JavaScript (Node.js). Она позволяет создавать сложные многостраничные PDF-файлы с текстом, изображениями, таблицами, векторной графикой и аннотациями. PDFKit полностью реализует спецификацию PDF 1.7 и не требует внешних зависимостей, что делает её идеальным выбором для серверных приложений на Node.js.

Зачем нужна PDF генерация в JavaScript?

Генерация PDF на серверной стороне востребована в различных сценариях: создание счетов и чеков, формирование отчётов, генерация сертификатов, экспорт данных в портативный формат. PDFKit позволяет автоматизировать эти процессы, работая полностью в среде Node.js без браузера. Вы можете динамически создавать документы, вставлять данные из базы, добавлять водяные знаки и подписи.

Установка PDFKit

Установка библиотеки проста и выполняется через npm:

npm install pdfkit

Также рекомендуется установить pdfkit-table для удобной работы с таблицами или svg-to-pdfkit для вставки SVG-графики.

Основные функции PDFKit

  • Текст и шрифты: поддержка Unicode, встраивание шрифтов, выравнивание, перенос строк, кернинг.
  • Векторная графика: линии, прямоугольники, круги, кривые Безье, градиенты.
  • Изображения: вставка JPEG, PNG, SVG (через плагин).
  • Таблицы: создание таблиц с автошириной колонок, стилями и заголовками.
  • Аннотации: ссылки, закладки, метаданные (автор, тема), водяные знаки.
  • Страницы: добавление, настройка размера, ориентации, полей, нумерация.

Пример кода на JavaScript (Node.js)

const PDFDocument = require('pdfkit');
const fs = require('fs');

// Создаём документ
const doc = new PDFDocument();

// Сохраняем в файл
const stream = fs.createWriteStream('output.pdf');
doc.pipe(stream);

// Добавляем заголовок
doc.fontSize(25).text('Привет, мир!', 100, 100);

// Добавляем текст с переносом
doc.fontSize(12).text('Это пример PDF, созданный с помощью PDFKit.', 100, 150);

// Рисуем линию
doc.moveTo(100, 200).lineTo(400, 200).stroke();

// Вставляем изображение (если есть)
// doc.image('path/to/image.png', 100, 250, {width: 200});

// Новая страница
doc.addPage();
doc.fontSize(20).text('Страница 2');

// Добавляем таблицу (через pdfkit-table)
// doc.table({ headers: ['Имя', 'Возраст'], rows: [['Анна', 25], ['Иван', 30]] });

// Завершаем документ
doc.end();

stream.on('finish', () => {
  console.log('PDF создан успешно');
});

Когда использовать PDFKit?

PDFKit подходит для задач, где требуется полный контроль над содержимым PDF: от простых текстовых документов до сложных отчётов с графиками, таблицами и водяными знаками. Он быстрее и легче, чем Puppeteer, если не нужна вёрстка HTML. Используйте PDFKit, если вы создаёте документы на сервере Node.js и хотите избежать запуска браузера. Для простых задач, где нужен HTML-to-PDF, лучше подойдёт Puppeteer.

Рекомендаций