@nestjsforge/pdfme

Quick Start

Generate your first PDF with @nestjsforge/pdfme in minutes.

1. Import PdfmeModule

app.module.ts
import { Module } from '@nestjs/common';
import { PdfmeModule } from '@nestjsforge/pdfme';
import { readFileSync } from 'fs';

@Module({
  imports: [
    PdfmeModule.forRoot({
      fonts: {
        NotoSans: {
          data: readFileSync('./assets/fonts/NotoSans-Regular.ttf'),
          fallback: true,
        },
      },
    }),
  ],
})
export class AppModule {}

2. Define a template

templates/hello.template.ts
import { Template } from '@pdfme/common';

export const helloTemplate: Template = {
  basePdf: { width: 210, height: 297, padding: [10, 10, 10, 10] },
  schemas: [
    [
      {
        name: 'greeting',
        type: 'text',
        position: { x: 10, y: 20 },
        width: 190,
        height: 20,
        fontSize: 24,
        fontColor: '#E0234E',
      },
      {
        name: 'body',
        type: 'text',
        position: { x: 10, y: 50 },
        width: 190,
        height: 200,
        fontSize: 12,
      },
    ],
  ],
};

3. Generate the PDF

pdf.service.ts
import { Injectable } from '@nestjs/common';
import { PdfmeService } from '@nestjsforge/pdfme';
import { helloTemplate } from './templates/hello.template';

@Injectable()
export class PdfService {
  constructor(private readonly pdfme: PdfmeService) {}

  async generateHello(name: string): Promise<Uint8Array> {
    return this.pdfme.generate({
      template: helloTemplate,
      inputs: [
        {
          greeting: `Hello, ${name}!`,
          body: 'This PDF was generated with @nestjsforge/pdfme.',
        },
      ],
    });
  }
}

4. Serve it via HTTP

pdf.controller.ts
import { Controller, Get, Param, Res } from '@nestjs/common';
import { Response } from 'express';
import { PdfService } from './pdf.service';

@Controller('pdf')
export class PdfController {
  constructor(private readonly pdf: PdfService) {}

  @Get('hello/:name')
  async getHello(@Param('name') name: string, @Res() res: Response): Promise<void> {
    const pdf = await this.pdf.generateHello(name);
    res.setHeader('Content-Type', 'application/pdf');
    res.setHeader('Content-Disposition', `inline; filename="hello-${name}.pdf"`);
    res.end(Buffer.from(pdf));
  }
}