-
当业务需要生成pdf,并且需要做成模版一样的东西,并且添加一些文字,此次我们实现这个功能
我们先安装插件npm install puppeteer
-
service文件
// pdf.service.ts
import { Injectable } from '@nestjs/common'; import * as puppeteer from 'puppeteer'; import * as fs from 'fs'; import { join } from 'path'; @Injectable() export class PdfService { async generatePdfWithSignature() { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 这里的文件换成自己的模版文件地址 const filePath = join(process.cwd(), 'upload', 'template.html'); console.log('nnnnnww', filePath); // 读取 HTML 模板文件 const htmlContent = fs.readFileSync(filePath, 'utf8'); console.log(htmlContent); // 在页面中加载 HTML 内容 await page.setContent(htmlContent); // 添加签名到 HTML 页面 await page.evaluate(() => { // 这边可以自己自行添加需要的文字 const signatureElement = document.createElement('div'); signatureElement.textContent = 'Signed by John Doe'; document.body.appendChild(signatureElement); }); // 生成 PDF 文件 const pdfBuffer = await page.pdf({ format: 'A4' }); // 保存 PDF 文件到本地 fs.writeFileSync('output.pdf', pdfBuffer); await browser.close(); } }