前言
在前端开发中,经常需要将数据以 PDF 格式的文件进行保存和分享。本文将介绍如何使用 Express.js 库快速地生成并下载 PDF 文件。
准备工作
在开始正式代码编写之前,需要安装以下几个模块:
express
:一个处理 HTTP 请求的库。pdfmake
:一个快速生成 PDF 文件的库。
运行以下命令进行安装:
npm install express pdfmake
编写代码
在创建 Express 应用的主文件 app.js
中,我们首先需要引入依赖的模块:
const express = require('express'); const pdfmake = require('pdfmake');
接下来需要配置 pdfmake
,注意:在此期间需要进行中英文的映射。
const printer = new pdfmake({ font: { Roboto: { normal: 'fonts/Roboto-Regular.ttf', bold: 'fonts/Roboto-Medium.ttf', italics: 'fonts/Roboto-Italic.ttf', bolditalics: 'fonts/Roboto-MediumItalic.ttf' } }, lang: 'zh-cn' });
其中 font
属性用于设置字体,需要首先在项目中准备好字体文件,放置在 fonts
目录下,这里使用了 Roboto
字体。lang
属性用于指定语言为中文。
接下来,我们使用 express.Router()
创建一个路由器实例,并在其中编写生成 PDF 文件的代码。
const router = express.Router(); router.post('/generate-pdf', (req, res) => { const docDefinition = { content: [ { text: '这是一份测试 PDF 文件', fontSize: 25, bold: true, alignment: 'center', margin: [0, 0, 0, 20] }, { text: 'PDF 文件生成时间:' + new Date().toLocaleString() }, { text: 'PDF 文件生成用户:' + req.body.username }, ], }; const pdfDoc = printer.createPdfKitDocument(docDefinition); res.setHeader('Content-Type', 'application/pdf'); pdfDoc.pipe(res); pdfDoc.end(); }); module.exports = router;
这里我们定义了一个 POST 请求 /generate-pdf
,其中形参 req.body.username
表示用户名,用于在 PDF 文件中展示。docDefinition
对象表示 PDF 文件的内容,包含了标题和相关信息。res.setHeader('Content-Type', 'application/pdf');
表示返回的文件类型为 PDF 格式,使用 res
对象将 PDF 文件返回给前端。
客户端代码
在 HTML 页面中设置一个表单,填写用户信息并点击按钮生成 PDF 文件。代码如下:
<form id="generate-pdf-form" method="post" action="/api/generate-pdf"> <input type="text" name="username" placeholder="请输入用户名"> <button type="submit">生成 PDF 文件</button> </form> <script> document.getElementById('generate-pdf-form').addEventListener('submit', (e) => { e.preventDefault(); const form = e.target; const xhr = new XMLHttpRequest(); xhr.open('POST', form.action, true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.responseType = 'blob'; xhr.onload = function() { var url = window.URL.createObjectURL(new Blob([this.response], { type: 'application/pdf' })); const a = document.createElement('a'); a.href = url; a.download = 'test.pdf'; document.body.appendChild(a); a.click(); a.remove(); }; xhr.send(JSON.stringify({ username: form.username.value, })); }); </script>
这里使用了 XHR 对象进行 POST 请求,并将请求的数据格式设置为 JSON 格式。在返回的 PDF 文件中,我们使用 Blob
对象将其转化为二进制数据类型,并将其通过创建一个 <a>
元素的 URL 属性使其可以被浏览器下载保存。
总结
使用 Express.js 和 pdfmake 库,可以快速地生成并下载 PDF 格式的文件,实现了数据的可视化和分享。本篇文章详细介绍了如何使用 PDFmake 库生成 PDF 文件并通过 Express.js 进行传输,同时也展示了如何在客户端进行下载。通过学习这些内容,希望读者可以在实际项目中实现 PDF 文件的生成和分享。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659f0211add4f0e0ff7b77a4