Что такое 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.