如何将PDF文件转换为Base64

3

我正在尝试将PDF转换为Base64并作为附件发送到电子邮件中,但是我无法将其转换为Base64,而不是创建文件。我想将其转换为Base64以便作为附件发送。以下是代码:

const fs = require("fs");
const path = require("path");
const utils = require("util");
const puppeteer = require("puppeteer");
const hb = require("handlebars");
const readFile = utils.promisify(fs.readFile);
(async () => {
const A = "invoice";
const htmlContent = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h2>Approve Page ,${A}</h2>
</body>
</html>
`;
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setContent(htmlContent);
  await page.pdf({ path: "html.pdf", format: "A4" });

  await browser.close();
})();

我想将一个HTML文件转换成Base64格式,以便于能够通过电子邮件发送,而不是创建一个html.pdf文件。


@kelvin不在这里。我正在创建一个文件,但我不想创建文件,我只想创建一个base64。 - ramb tumber
@kelvin,你的链接是关于 java 的,而问题是关于 node.js 的。 - namgold
很好的问题。我正在寻找类似的解决方案。我在考虑使用 PDFkit 而不是 puppeteer;不过还在决定中。 - Caio Mar
1个回答

9

尝试这个:

const puppeteer = require("puppeteer");

(async () => {
  const A = "invoice";
  const htmlContent = `<!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  </head>
  <body>
  <h2>Approve Page ,${A}</h2>
  </body>
  </html>
  `;
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setContent(htmlContent);

  const buffer = await page.pdf({ format: "A4" });
  const base64 = buffer.toString('base64');
  console.log(`data:application/pdf;base64,${base64}`); // Test it in a browser.

  await browser.close();
})();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接