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

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

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

Начать курс

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

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

Установка

Установка через npm проста:

npm install pdf-lib

Затем импортируйте в проект:

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

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

  • Создание PDF с нуля — добавление страниц, текста, изображений.
  • Редактирование существующих PDF — копирование страниц, вставка текста поверх, объединение документов.
  • Работа со шрифтами — поддержка стандартных (Helvetica, TimesRoman) и встраивание пользовательских TTF-шрифтов.
  • Рисование фигур — линии, прямоугольники, эллипсы с настройкой цвета и прозрачности.
  • Формы и аннотации — создание текстовых полей, кнопок, ссылок.
  • Экспорт в Uint8Array — результат можно сохранить в файл или отправить клиенту.

Пример кода на 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),
  });
  
  // Прямоугольник
  page.drawRectangle({
    x: 50,
    y: 200,
    width: 200,
    height: 100,
    color: rgb(0.9, 0.1, 0.1),
    borderColor: rgb(0, 0, 0),
    borderWidth: 2,
  });
  
  // Встраивание изображения (PNG)
  const imageBytes = fs.readFileSync('logo.png');
  const image = await doc.embedPng(imageBytes);
  page.drawImage(image, {
    x: 300,
    y: 250,
    width: 100,
    height: 100,
  });
  
  const pdfBytes = await doc.save();
  fs.writeFileSync('output.pdf', pdfBytes);
}

createPDF().catch(console.error);

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

pdf-lib — лучший выбор, если вы работаете в среде Node.js (или браузере) и вам нужно:
- Быстро генерировать PDF без запуска браузера (экономия памяти и времени).
- Встраивать пользовательские шрифты (например, для кириллицы).
- Редактировать готовые PDF (добавлять водяные знаки, объединять документы).
- Создавать интерактивные формы.

Избегайте pdf-lib, если вам нужен рендеринг сложного HTML/CSS в PDF (тут лучше подойдет Puppeteer) или работа с большими объемами данных (тяжелые PDF могут замедлить работу).

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