Что такое 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 могут замедлить работу).
Также в библиотеке
Работа с S3 и облачными хранилищами в Kotlin: AWS SDK и MinIO
Конфигурация приложений на Go: лучшие практики и инструменты
Winston для JavaScript (Node.js): полное руководство с примерами
JSON обработка в Java: библиотеки и инструменты для работы с JSON
Swagger/OpenAPI генерация для Rust: Utoipa и Aide