Node.js6 min read

PDF Generation with PDFKit

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

Michael Torres
December 19, 2025
0.0k0

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