生成动态 PDF 是 Web 开发中的常见要求。无论是发票、报告还是简历,创建强大的 PDF 生成器都是开发人员的一项基本技能。在本文中,我将引导您使用 Node.js 和 Puppeteer(一个强大的无头浏览器库)构建 PDF 生成器。
作为示例,我使用相同的方法来构建我的 CV Maker 项目,它接受用户输入并动态生成 PDF。您可以在此处查看该项目的现场演示:Live Demo。
本指南以简单、适合初学者的语言编写。如果有任何不清楚的地方,请随时发表评论,我会尽快解决。
在我们开始之前,请确保您具备以下条件:
npm install puppeteer
如果您想参考本教程的完整源代码,请查看我的 GitHub 存储库。
首先,创建一个端点,客户端可以在其中发送数据以生成 PDF。为此,我们将在 index.js(或等效的主服务器文件)中定义一个简单的 POST 路由。
app.post("/data", async (req: Request, res: Response) => { let postData = req.body.data; // Storing the data sent from the client });
该端点将接收需要包含在PDF中的数据。
为了保持代码井井有条,请在项目目录中创建一个名为“controllers”的文件夹。在此文件夹中,创建一个名为 PdfController.js 的文件。
控制器文件是我们编写生成 PDF 逻辑的地方。这使我们的代码保持模块化并使其更易于维护。
在 PdfController.js 中,添加以下代码以使用 Puppeteer 生成 PDF:
export default (async function (postData) { try { const browser = await puppeteer.launch({ headless: true, args: ["--no-sandbox", "--disable-gpu"], }); const page = await browser.newPage(); const content = `<html><body><h1>${postData}</h1></body></html>`; await page.setContent(content); await page.emulateMediaType('screen'); await page.pdf({ path: 'resume.pdf', format: 'A4', printBackground: true, }); console.log('PDF created'); await browser.close(); } catch (err) { console.error('Error:', err); } });
以下是这段代码的作用:
现在,将 PdfController 函数连接到 index.js 中的 POST 端点:
import PdfController from "./controllers/controller.js"; app.post("/data", async (req: Request, res: Response) => { let postData = req.body.data; // Storing the data sent from the client await PdfController(postData); });
这确保每当调用 /data 端点时,都会执行生成 PDF 的逻辑。
此时,您可以使用 Postman 或任何其他 HTTP 客户端来测试端点。当您发送带有相关文本数据的 POST 请求时,将在项目的根目录中创建一个名为resume.pdf 的 PDF。
要将生成的 PDF 作为响应发送回客户端,请安装 fs-extra 软件包:
npm install puppeteer
然后按如下方式更新 POST 端点:
app.post("/data", async (req: Request, res: Response) => { let postData = req.body.data; // Storing the data sent from the client });
此代码将resume.pdf 文件作为可下载附件发送给客户端。
就是这样! ?您已经使用 Node.js 和 Puppeteer 构建了一个完整的 PDF 生成器。此设置根据用户输入动态生成 PDF 并将其作为可下载文件发送回。
这是您取得的成就:
如果您想生成结构良好且格式良好的 PDF(例如带有表格和样式的简历或发票),请在评论中告诉我。我很乐意为高级用例编写另一篇教程。
此外,请随时查看完整的项目代码。它有详细的文档并且适合初学者。
祝你有美好的一天!
以上是使用 puppeteer 和 Node 来创建 PDF!的详细内容。更多信息请关注PHP中文网其他相关文章!