@nestjsforge/pdfme
Quick Start
Generate your first PDF with @nestjsforge/pdfme in minutes.
1. Import PdfmeModule
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
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
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
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));
}
}