PDF Generation in TypeScript: Overview of Tools
Generating PDF documents is a common task in web development. Thanks to TypeScript and powerful libraries, you can create complex reports, invoices, certificates, and other documents directly in the browser or on the server (Node.js). In this article, we will review the main libraries for working with PDF in TypeScript, their features, and usage examples.
1. jsPDF — Lightweight and Popular Library
jsPDF is one of the most widespread libraries for creating PDF on the client side. It allows you to generate documents directly in the browser using only JavaScript/TypeScript. The library supports text, images, tables, and basic formatting.
Installation
npm install jspdf @types/jspdfExample: Creating a Simple PDF
import { jsPDF } from 'jspdf';
const doc = new jsPDF();doc.text('Hello, world!', 10, 10);doc.save('document.pdf');Pros and Cons
- ✅ Ease of use
- ✅ Works in the browser and Node.js (with additional modules)
- ❌ Limited support for complex layouts
- ❌ Difficult to work with tables (requires manual configuration)
2. PDFKit — Powerful Tool for Server-Side Generation
PDFKit is a library for Node.js that provides full control over PDF creation. It is ideal for server-side generation of complex documents: reports, invoices, brochures. It supports fonts, gradients, vector graphics, and multi-page documents.
Installation
npm install pdfkit @types/pdfkitExample: Creating a PDF with Text and an Image
import PDFDocument from 'pdfkit';import fs from 'fs';
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(25).text('Heading', 100, 100);doc.image('path/to/image.png', 100, 150, { width: 200 });doc.end();Pros and Cons
- ✅ Flexibility and full control
- ✅ Support for complex graphics
- ❌ Does not work in the browser (Node.js only)
- ❌ More complex API compared to jsPDF
3. Puppeteer — HTML to PDF Generation
Puppeteer is a library for controlling a headless Chrome browser. It allows you to convert HTML pages to PDF, which is convenient if you already have a document layout (e.g., an invoice or report). It is suitable for both client-side and server-side generation.
Installation
npm install puppeteerExample: Generating a PDF from HTML
import puppeteer from 'puppeteer';
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setContent('<h1>Hello, PDF!</h1><p>This is a report.</p>'); await page.pdf({ path: 'report.pdf', format: 'A4' }); await browser.close();}
generatePDF();Pros and Cons
- ✅ Full use of CSS and HTML
- ✅ Support for complex layouts and styles
- ❌ Requires Chrome installation (large size)
- ❌ Slower than specialized libraries
4. pdfmake — JSON-Based Generation
pdfmake is a library that uses a declarative approach: you describe the document structure in JSON, and the library builds the PDF itself. It is excellent for creating tables, lists, and reports.
Installation
npm install pdfmake @types/pdfmakeExample: Creating a PDF with a Table
import pdfMake from 'pdfmake/build/pdfmake';import pdfFonts from 'pdfmake/build/vfs_fonts';
pdfMake.vfs = pdfFonts.pdfMake.vfs;
const docDefinition = { content: [ { text: 'Report'