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

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

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

Начать курс

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

Создание PDF-документов — одна из частых задач в веб-разработке. TypeScript, благодаря строгой типизации и современным возможностям, позволяет писать надёжный код для генерации PDF как на клиенте, так и на сервере. В этой статье мы рассмотрим популярные библиотеки и инструменты для генерации PDF на TypeScript, их особенности и примеры использования.

1. PDFKit — мощная серверная библиотека

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

Установка и пример:

npm install pdfkit @types/pdfkit
import PDFDocument from 'pdfkit';
import * as fs from 'fs';

const doc = new PDFDocument();

doc.pipe(fs.createWriteStream('output.pdf'));

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

doc.end();

PDFKit отлично подходит для:

  • Создания PDF на сервере (Express, NestJS)
  • Работы с пользовательскими шрифтами и кодировками (включая кириллицу)
  • Добавления изображений, таблиц и графических примитивов

2. jsPDF — генерация PDF на клиенте

jsPDF — это клиентская библиотека для создания PDF прямо в браузере. Она проста в использовании, поддерживает текст, изображения, аннотации и базовые фигуры. Для TypeScript доступны типы через DefinitelyTyped.

Установка:

npm install jspdf @types/jspdf

Пример генерации PDF в браузере:

import { jsPDF } from 'jspdf';

const doc = new jsPDF();

doc.text('Привет, TypeScript!', 10, 10);
doc.text('Это PDF, созданный в браузере.', 10, 20);

doc.save('document.pdf');

jsPDF подходит для:

  • Скачивания PDF на стороне клиента (отчёты, чеки)
  • Простых документов без сложной вёрстки
  • Быстрого прототипирования

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

Puppeteer — это библиотека для управления браузером Chrome/Chromium. Она позволяет конвертировать HTML-страницы в PDF с полным сохранением стилей, шрифтов и вёрстки. Отлично подходит для создания сложных документов, отчётов и визиток.

Установка:

npm install puppeteer

Пример конвертации HTML в PDF:

import puppeteer from 'puppeteer';

async function generatePDF(html: string, outputPath: string): Promise<void> {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.setContent(html, { waitUntil: 'networkidle0' });
    await page.pdf({ path: outputPath, format: 'A4' });

    await browser.close();
}

// Использование
const htmlContent = `<h1 style="color: blue;">Заголовок</h1><p>Текст с HTML-стилями</p>`;
generatePDF(htmlContent, 'output.pdf');

Puppeteer идеален для:

  • Конвертации сложных HTML-шаблонов в PDF
  • Создания PDF с CSS-стилями, Flexbox, Grid
  • Генерации PDF на сервере с полным контролем внешнего вида

4. pdf-lib — лёгкая и быстрая библиотека

pdf-lib — это современная библиотека для создания и модификации PDF-документов без внешних зависимостей. Работает как в Node.js, так и в браузере. Поддерживает шрифты, изображения, формы и аннотации.

Установка:

npm install pdf-lib

Пример создания простого PDF:

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

async function createPDF() {
    const pdfDoc = await PDFDocument.create();
    const page = pdfDoc.addPage([600, 400]);
    const font = await pdfDoc.embedFont(StandardFonts.Helvetica);

    page.drawText('PDF с помощью pdf-lib', {
        x: 50,
        y: 200,
        size: 30,
        font: font,
        color: rgb(0, 0.53, 0.71),
    });

    const pdf                    

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