NodeJS 如何在我的nestjs应用程序中使用object/ json数据生成pdf文件?

zd287kbt  于 2023-04-05  发布在  Node.js
关注(0)|答案(1)|浏览(190)

我有一个从DB查询返回的对象,其中包含一些简单的键值对和一个小尺寸的图像。我想使用该对象生成一个pdf,并将其从我的nestjs服务器上传到我的S3桶中。我如何实现这一点?我搜索了npm库,但它们似乎没有多大帮助,因为大多数建议我首先使用我的对象创建一个html文件,然后从因为我的对象很小,我不想经历首先创建一个html文件并从中生成pdf的冗长过程。
我手上的东西是-

"finalReport": {
"taskId": "myId",
"report": "all done",
"signatureHandyman": "data:image/png;base64,iVBORw0KGgoAAAA...",
"notesCustomer": "done",
"signatureCustomer": "data:image/png;base64,iVBORw0KGgoAAAANSUh...",
"nameCustomer": "Cust",
"createdAt": "2023-03-31T03:14:32.015Z",
"user": {
  "id": "uuid",
  "email": "email@gmail.com",
  "phone": "",
  "name": "Handyman",
  "role": "HANDYMAN",
}

我想显示一些标题和键值对从我的对象沿着签名图像在pdf中。提前谢谢你!

c9x0cxw0

c9x0cxw01#

您可以使用Puppeteer从HTML字符串生成PDF。只需创建一些函数从您的对象生成HTML(字符串,而不是文件)并将其传递给Puppeteer。

import * as puppeteer from 'puppeteer';

let puppeteerOptions: puppeteer.PuppeteerLaunchOptions = {};
// config for Alpine linux
puppeteerOptions = {
  headless: true,
  executablePath: "/usr/bin/chromium-browser",
  args: [
    "--no-sandbox",
    "--headless",
    "--disable-gpu",
    "--disable-dev-shm-usage",
  ],
};

// config for windows
puppeteerOptions = {
  headless: true,
};

const browser = await puppeteer.launch(puppeteerOptions);

const page = await browser.newPage();

await page.setContent(
  htmlInString
);

await page.emulateMediaType("screen");
const pdf = await page.pdf({
  format: "A4",
  printBackground: true,
  margin: { top: "45px", right: "45px", bottom: "45px", left: "45px" },
});

await browser.close();

res.setHeader("Content-Type", "application/pdf");
res.setHeader(
  "Content-Disposition",
  `attachment; filename="someName${andMaybeId}.pdf"`
);

相关问题