Node.js5 min read

PDF Generation with PDFKit

Generate PDFs in Node.js. Create invoices and reports.

Michael Torres
Dec 18, 2025
17.8k499

PDF Generation with PDFKit

Setup

npm install pdfkit

Basic PDF

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

const doc = new PDFDocument();

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

doc.fontSize(25).text('Hello World!', 100, 100);

doc.addPage()
   .fontSize(15)
   .text('Second page', 100, 100);

doc.end();

Invoice Example

function generateInvoice(invoice, res) {
  const doc = new PDFDocument({ margin: 50 });
  
  doc.pipe(res);
  
  doc.fontSize(20).text('INVOICE', 50, 50);
  doc.fontSize(10).text(`Invoice #: ${invoice.id}`, 50, 80);
  
  doc.moveTo(50, 120).lineTo(550, 120).stroke();
  
  doc.fontSize(12).text('Bill To:', 50, 140);
  doc.fontSize(10).text(invoice.customer.name, 50, 160);
  
  doc.end();
}

app.get('/invoice/:id', async (req, res) => {
  const invoice = await Invoice.findById(req.params.id);
  
  res.setHeader('Content-Type', 'application/pdf');
  res.setHeader('Content-Disposition', `attachment; filename=invoice-${invoice.id}.pdf`);
  
  generateInvoice(invoice, res);
});

Key Takeaway

PDFKit creates PDFs programmatically. Pipe to response for downloads. Good for invoices and reports.

#Node.js#PDF#PDFKit#Documents