Что такое 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 будет более чем достаточно.