📅  最后修改于: 2023-12-03 15:17:53.587000             🧑  作者: Mango
如果你是一位前端工程师,你可能已经在寻找一种方法,将你在浏览器中设计的 HTML 转换成 PDF 格式。在这篇文章中,我们将探讨使用 Node.js 来创建 PDF 的方法。
首先,你需要安装两个 npm 包:puppeteer 和 handlebars。puppeteer 是一个 Headless Chrome Node.js API,用于生成 PDF,而 handlebars 则是一个 JavaScript 模板引擎,用于为 puppeteer 提供 HTML 模板。
npm install puppeteer handlebars --save
接下来,在根目录中创建一个名为 template.html 的文件,我们将在这个文件中编写 HTML 模板。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
<h1>{{heading}}</h1>
<p>{{content}}</p>
</body>
</html>
在这个模板中,我们使用了 handlebars 语法,它允许我们在模板中插入变量。在运行时,这些变量将由 puppeteer API 动态替换为真实值。
接下来,在根目录中创建一个名为 index.js 的文件,并在其中添加以下代码,使用 puppeteer 生成 PDF 文件。
const puppeteer = require('puppeteer');
const Handlebars = require('handlebars');
const fs = require('fs');
(async () => {
// 读取 HTML 模板
const templateHtml = fs.readFileSync('./template.html', 'utf8');
// 编译模板
const template = Handlebars.compile(templateHtml);
// 获取编译后的 HTML
const html = template({
title: 'My PDF',
heading: 'Hello, World!',
content: 'This is a sample PDF generated with Node.js and Puppeteer.'
});
// 创建浏览器实例并打开页面
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(html);
// 生成 PDF 文件
await page.pdf({ path: 'my-pdf.pdf', format: 'A4' });
// 关闭浏览器实例
await browser.close();
})();
在这个示例中,我们首先读取了 template.html 文件,并将其编译为 Handlebars 模板。然后,我们将模板传递为参数,在运行时使用 puppeteer API 替换变量,最后生成 PDF 文件并保存到 my-pdf.pdf 文件中。
最后,我们可以使用以下命令,运行我们的程序并生成 PDF 文件。
node index.js
现在,你应该已经成功地使用 Node.js 和 puppeteer 生成了一个 PDF 文件,它的内容与我们在 HTML 模板中定义的相同。
在本文中,我们已经了解了如何使用 Node.js 和 puppeteer 来生成 PDF 文件。我们使用 handlebars 模板引擎编写了一个 HTML 模板,并通过 puppeteer API 动态替换其变量。最后,我们成功地将 HTML 转换为 PDF 文件,并将其保存到磁盘上。