PDF генерация в JavaScript (Node.js): библиотеки и инструменты для создания PDF

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

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

Начать курс

PDF генерация в JavaScript (Node.js): полное руководство по библиотекам и инструментам

Генерация PDF-документов — одна из самых востребованных задач в веб-разработке. От создания счетов и отчетов до формирования сложных многостраничных документов — Node.js предлагает мощные инструменты для работы с PDF. В этой статье мы рассмотрим основные библиотеки и подходы к созданию PDF-файлов на серверной стороне JavaScript.

Зачем генерировать PDF на сервере?

Серверная генерация PDF позволяет:

  • Создавать документы динамически на основе данных из базы
  • Обеспечивать консистентность форматирования
  • Работать с большими объемами данных без загрузки клиента
  • Интегрироваться с существующими системами отчетности

Основные библиотеки для генерации PDF в Node.js

1. pdfkit — классическое решение

pdfkit — одна из самых популярных библиотек для создания PDF с нуля. Она предоставляет полный контроль над содержимым документа: текст, изображения, таблицы, векторная графика.

const PDFDocument = require('pdfkit');
const fs = require('fs');

const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));

// Добавляем текст
doc.fontSize(25).text('Привет, мир!', 100, 100);

// Рисуем линию
doc.moveTo(100, 150).lineTo(400, 150).stroke();

// Вставляем изображение
doc.image('logo.png', 100, 200, { width: 100 });

doc.end();

Плюсы: легковесный, быстрый, поддерживает Unicode и кириллицу, множество шрифтов.

Минусы: требует ручной настройки макета, нет встроенной поддержки HTML.

2. Puppeteer — генерация из HTML

Puppeteer — это библиотека для управления headless-браузером Chrome. Она позволяет конвертировать HTML-страницы в PDF с сохранением всех стилей и скриптов.

const puppeteer = require('puppeteer');

async function generatePDF() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  
  await page.setContent('<h1 style="color: red;">Заголовок PDF</h1><p>Текст документа</p>');
  await page.pdf({
    path: 'output.pdf',
    format: 'A4',
    margin: { top: '20px', bottom: '20px' }
  });
  
  await browser.close();
}

generatePDF();

Плюсы: идеально для сложных HTML-макетов, поддерживает CSS, JavaScript, шрифты.

Минусы: тяжеловесный (требует Chromium), медленнее других библиотек.

3. pdf-lib — модификация существующих PDF

pdf-lib специализируется на редактировании существующих PDF-документов. Позволяет добавлять текст, изображения, заполнять формы.

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

async function editPDF() {
  const existingPdfBytes = fs.readFileSync('template.pdf');
  const pdfDoc = await PDFDocument.load(existingPdfBytes);
  
  const pages = pdfDoc.getPages();
  const firstPage = pages[0];
  
  firstPage.drawText('Новый текст', {
    x: 50,
    y: 50,
    size: 20,
    color: rgb(0, 0, 0)
  });
  
  const pdfBytes = await pdfDoc.save();
  fs.writeFileSync('modified.pdf', pdfBytes);
}

editPDF();

Плюсы: легковесный, не требует внешних зависимостей, отлично работает с формами.

Минусы: ограниченные возможности для создания сложных макетов с нуля.

4. jsPDF — клиент-серверное решение

jsPDF изначально создавалась для браузера, но работает и в Node.js. Подходит для простых документов.

const { jsPDF } = require("jspdf");

const doc = new jsPDF();
doc.text("Hello world!", 10, 10);
doc.save("output.pdf");

Плюсы: простой API, работает на клиенте и сервере.

Минусы: ограниченная поддержка кириллицы, меньше возможностей.

Сравнение библиотек

  • pdfkit — лучший выбор для создания PDF с нуля с полным контролем
  • Puppeteer — идеален для конвертации HTML в PDF
  • pdf-lib — незаменим для редактирования существующих PDF
  • jsPDF — простой вариант для базовых задач

Практический пример: создание счета

Рассмотрим созда

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