PDF генерация в TypeScript: библиотеки, инструменты и примеры кода

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

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

Начать курс

PDF генерация в TypeScript: полное руководство для разработчиков

Создание PDF-документов — одна из востребованных задач в современной веб-разработке. На языке TypeScript существует несколько мощных библиотек, которые позволяют генерировать PDF как на стороне клиента, так и на сервере (Node.js). В этой статье мы рассмотрим три основных инструмента: PDFKit, jsPDF и pdf-lib, а также покажем практические примеры их использования.

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

TypeScript добавляет статическую типизацию, что особенно важно при работе с документами сложной структуры. Использование TypeScript для генерации PDF позволяет:

  • Избежать ошибок типов при формировании таблиц и стилей
  • Упростить рефакторинг крупных проектов
  • Интегрировать генерацию PDF с существующими TypeScript-проектами (React, Angular, Node.js)

Обзор библиотек для генерации PDF

1. PDFKit (Node.js)

PDFKit — самая популярная библиотека для создания PDF на сервере. Она предоставляет низкоуровневый доступ к объектам PDF, поддерживает шрифты, изображения, встраивание векторной графики и кириллицу (при подключении соответствующих шрифтов).

import PDFDocument from 'pdfkit';
import fs from 'fs';

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

doc.fontSize(24).text('Привет, мир!', 100, 100);
doc.fontSize(12).text('Это PDF, созданный с помощью PDFKit и TypeScript', 100, 150);
doc.end();

Особенности:

  • Работает только в Node.js (не подходит для браузера)
  • Требует ручной настройки шрифтов для кириллицы
  • Поддерживает сложные макеты, таблицы и графику

2. jsPDF (браузер и Node.js)

jsPDF — универсальная библиотека, работающая как в браузере, так и на сервере. Она проще в освоении, но имеет ограничения по сложности макетов.

import { jsPDF } from 'jspdf';

const doc = new jsPDF();
doc.text('Генерация PDF на TypeScript', 10, 10);
doc.save('document.pdf');

Особенности:

  • Простой API для базовых документов
  • Поддержка кириллицы (требует подключения шрифтов через addFont)
  • Может работать с canvas и HTML-элементами

3. pdf-lib (современный и гибкий)

pdf-lib — легковесная библиотека с отличной поддержкой TypeScript. Она позволяет создавать PDF с нуля или редактировать существующие документы.

import { PDFDocument, StandardFonts, rgb } from 'pdf-lib';

async function createPDF() {
  const doc = await PDFDocument.create();
  const page = doc.addPage();
  const font = await doc.embedFont(StandardFonts.Helvetica);

  page.drawText('PDF с pdf-lib', {
    x: 50,
    y: 700,
    size: 24,
    font,
    color: rgb(0, 0, 0),
  });

  const pdfBytes = await doc.save();
  // Сохранение или отправка
}

Особенности:

  • Полная поддержка TypeScript (типы включены)
  • Может работать в браузере и Node.js
  • Позволяет модифицировать существующие PDF
  • Требует ручной работы со шрифтами для кириллицы

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

Характеристика PDFKit jsPDF pdf-lib
Среда выполнения Node.js Браузер + Node.js Браузер + Node.js
Поддержка TypeScript Частичная (через @types) Частичная Полная
Кириллица Требует шрифты Требует шрифты Требует шрифты
Сложные макеты Отлично Средне Хорошо
Размер библиотеки ~2 MB ~500

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