NextJS中使用pdfkit-Table生成PDF时Helvetica字体文件找不到错误的解决方法
NextJS中使用pdfkit-Table生成PDF时Helvetica字体文件找不到错误的解决方法
嘿,我之前也碰到过一模一样的问题!这个错误本质是pdfkit在NextJS的服务器运行环境里,找不到默认依赖的Helvetica字体文件——毕竟NextJS的打包机制会改变文件的存放路径,导致pdfkit默认的字体查找路径失效了。给你几个亲测有效的解决办法:
方法一:手动引入本地字体(最可靠)
这个方法彻底绕开默认路径的问题,直接用你自己控制的字体文件:
- 先找一份Helvetica字体文件(推荐用
.ttf格式,更容易获取),把它放到项目的public/fonts目录下(没有这个目录就新建一个)。 - 修改你的代码,创建PDFDocument实例时手动指定字体路径,注意要用绝对路径避免服务器端路径混乱:
const path = require('path'); const PDFDocument = require('pdfkit'); const fs = require('fs'); // 生成PDF的代码部分 const imagePath = path.resolve(process.cwd(), `./test-results/${testCase.title}_${testCase.reportDate}.jpg`); // 这里手动指定字体路径 const fontPath = path.resolve(process.cwd(), 'public/fonts/Helvetica.ttf'); let doc = new PDFDocument({ font: fontPath }); // 注意你代码里的路径拼写:test-results 和 test_results 不一致,后续可能会出问题哦 doc.pipe(fs.createWriteStream(path.resolve(process.cwd(), `./test_results/REPORT_${testCase.title}_${testCase.reportDate}.pdf`))); const tableArray = { headers: ["Country", "Conversion rate", "Trend"], rows: [ ["Switzerland", "12%", "+1.12%"], ["France", "67%", "-0.98%"], ["England", "33%", "+4.44%"], ], }; doc.table(tableArray, { width: 300 }); doc.moveDown(); // 后续添加图片的代码...
方法二:修正pdfkit的默认字体查找路径
如果你不想额外添加字体文件,可以尝试手动指定pdfkit查找Helvetica字体的正确路径:
const path = require('path'); const PDFDocument = require('pdfkit'); // 覆盖pdfkit默认的Helvetica字体路径 PDFDocument.prototype._fontFamilies.Helvetica = [ { // 指向node_modules里pdfkit自带的字体文件 src: path.resolve(process.cwd(), 'node_modules/pdfkit/js/data/Helvetica.afm'), }, ]; // 之后再正常创建PDF实例即可 let doc = new PDFDocument();
不过要注意,NextJS的打包可能会移动node_modules里的文件,这个方法的稳定性不如第一种,适合快速测试。
方法三:检查并修复依赖
有时候依赖安装不完整也会导致这个问题,先确保所有相关依赖都正确安装:
npm install pdfkit pdfkit-table fs path
另外提醒一下你代码里的小细节:test-results和test_results的拼写不一致(一个是横杠,一个是下划线),后续写文件或者读图片时可能会出现路径找不到的问题,记得统一哦!
备注:内容来源于stack exchange,提问作者Luominous
相关产品推荐
相关产品推荐

