Toggle Widget

return this.instances.pop()!;

static async acquire(): Promise<Browser> if (this.instances.length < this.max) const browser = await puppeteer.launch( headless: true ); this.instances.push(browser);

// Option 3: Return base64 (for email attachments) @Post('base64') async getBase64(@Body() data: any) const pdfBuffer = await this.pdfService.generateReport('sales', data); return base64: pdfBuffer.toString('base64') ;

// Option 2: Inline preview @Post('preview') async previewReport(@Body() data: any, @Res() res: Response) const pdfBuffer = await this.pdfService.generateReport('dashboard', data); res.set( 'Content-Type': 'application/pdf' ); res.send(pdfBuffer); // Opens in browser

// 3. Generate PDF const page = await this.browser.newPage(); await page.setContent(html, waitUntil: 'networkidle0' );

npm install @nestjs/core @nestjs/common puppeteer handlebars @types/puppeteer Create a dedicated module:

res.setHeader('Content-Type', 'application/pdf'); res.setHeader('Content-Disposition', 'attachment; filename=large-report.pdf');

FROM ghcr.io/puppeteer/puppeteer:20.0.0 WORKDIR /app COPY package*.json ./ RUN npm ci COPY . .

Ваш браузер устарел рекомендуем обновить его до последней версии
или использовать другой более современный.