From 8f6dbc17d39ea4c1c9f85d553db8b7d9e1945cc6 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sun, 5 Apr 2026 09:30:57 +0330 Subject: [PATCH] add pdf maker --- .npmrc | 2 ++ .../print/controller/print.controller.ts | 26 ++++++++++++++++++- src/modules/print/provider/print.service.ts | 17 ++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..e9eecbb --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +registry=https://mirror-npm.runflare.com +# registry=https://package-mirror.liara.ir/repository/npm/ diff --git a/src/modules/print/controller/print.controller.ts b/src/modules/print/controller/print.controller.ts index c398702..8477171 100644 --- a/src/modules/print/controller/print.controller.ts +++ b/src/modules/print/controller/print.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards } from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Res } from '@nestjs/common'; import { PrintService } from '../provider/print.service'; import { CreateSectionDto } from '../dto/create-section.dto'; import { ApiBearerAuth, ApiOperation } from '@nestjs/swagger'; @@ -6,6 +6,8 @@ import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard'; import { UpdateSectionDto } from '../dto/update-section.dto'; import { Permissions } from 'src/common/decorators/permissions.decorator'; import { PermissionEnum } from 'src/common/enums/permission.enum'; +import type { FastifyReply } from 'fastify'; + @Controller('admin') @UseGuards(AdminAuthGuard) @@ -52,4 +54,26 @@ export class PrintController { return this.printService.remove(id); } + /// front end must send form with its selected fields + @Post('pdf') + @Permissions(PermissionEnum.VIEW_PRINT) + @ApiOperation({ summary: 'Create Pdf' }) + async createPDf(@Body() dto: CreateSectionDto, @Res() res: FastifyReply) { + const html = ` + + +

Hello from NestJS PDF

+

This PDF was generated using Puppeteer.

+ + + `; + + const pdfBuffer = await this.printService.generatePdf(html); + + res + .header('Content-Type', 'application/pdf') + .header('Content-Disposition', 'attachment; filename="file.pdf"') + .send(pdfBuffer); + + } } diff --git a/src/modules/print/provider/print.service.ts b/src/modules/print/provider/print.service.ts index e4eb092..6b4953d 100644 --- a/src/modules/print/provider/print.service.ts +++ b/src/modules/print/provider/print.service.ts @@ -7,6 +7,7 @@ import { Print } from '../entities/print.entity'; import { UpdateSectionDto } from '../dto/update-section.dto'; import { FieldService } from 'src/modules/form-builder/provider/field.service'; import { PrintWithFields } from '../interface/print'; +// import * as puppeteer from 'puppeteer'; @Injectable() @@ -80,4 +81,20 @@ export class PrintService { return printSection } + + async generatePdf(html: string): Promise { + // const browser = await puppeteer.launch(); + // const page = await browser.newPage(); + + // await page.setContent(html, { waitUntil: 'networkidle0' }); + + // const pdf = await page.pdf({ + // format: 'A4', + // printBackground: true, + // }); + + // await browser.close(); + // return pdf; + return true as any + } }