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

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

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

Начать курс

Что такое pdf-lib и зачем она нужна?

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

Установка

Для установки в проекте Node.js выполните команду:

npm install pdf-lib

Библиотека не имеет нативных зависимостей и совместима с Node.js 10+.

Основные возможности

  • Создание PDF с нуля (пустые страницы, текст, изображения, встраивание шрифтов).
  • Редактирование существующих PDF (извлечение страниц, вставка, удаление, поворот).
  • Работа с формами (заполнение полей, создание чекбоксов и радио-кнопок).
  • Поддержка Unicode и кастомных шрифтов (TTF, OTF).
  • Добавление метаданных (автор, заголовок, дата).
  • Экспорт в ArrayBuffer, Uint8Array или Blob.

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

Ниже показан простой пример создания PDF с текстом и изображением:

const { PDFDocument, rgb } = require('pdf-lib');
const fs = require('fs');

async function createPDF() {
  const doc = await PDFDocument.create();
  const page = doc.addPage([600, 400]);
  
  // Добавляем текст
  page.drawText('Привет, мир!', {
    x: 50,
    y: 350,
    size: 30,
    color: rgb(0, 0.53, 0.71),
  });
  
  // Встраиваем шрифт (опционально)
  const fontBytes = fs.readFileSync('./fonts/roboto.ttf');
  const font = await doc.embedFont(fontBytes);
  page.drawText('Кастомный шрифт', {
    x: 50,
    y: 300,
    size: 20,
    font: font,
  });
  
  // Сохраняем
  const pdfBytes = await doc.save();
  fs.writeFileSync('output.pdf', pdfBytes);
  console.log('PDF создан!');
}

createPDF().catch(console.error);

Этот код создаёт документ с двумя строками, одна из которых использует встроенный шрифт. Для работы с изображениями используйте doc.embedPng() или doc.embedJpg().

Когда использовать pdf-lib

  • Вам нужно быстро сгенерировать PDF без запуска браузера.
  • Документ не содержит сложной вёрстки (таблицы, колонки) — для этого лучше подходят шаблонизаторы вроде Puppeteer.
  • Требуется лёгкая библиотека с минимальным размером (~500 KB).
  • Вы работаете с формами или редактируете существующие PDF.

Заключение

pdf-lib — отличный выбор для проектов, где нужна генерация PDF на Node.js без лишних зависимостей. Она проста в изучении, хорошо документирована и поддерживает все основные операции. Для сложных макетов рассмотрите Puppeteer или jsPDF, но для 80% задач pdf-lib будет более чем достаточно.

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