服务端pdfmake基础脚本报错:无法找到../src/printer模块
解决Linux服务器上pdfmake无法找到
../src/printer模块的问题 我之前也碰到过一模一样的问题,核心原因是你引入PdfPrinter的方式不对——不用手动去指向模块内部的src路径,直接从安装好的pdfmake包引入即可。
问题根源
你代码里写的var PdfPrinter = require('../src/printer');是在当前脚本所在目录的上级目录找src/printer文件,但实际上PdfPrinter已经作为pdfmake包的导出内容存在了,不需要你自己去定位模块内部的文件结构。这种相对路径写法只适合在pdfmake源码项目里使用,而不是在你自己的项目中引用已安装的包。
修正后的代码
把引入PdfPrinter的代码替换掉,同时建议用绝对路径处理字体文件(避免服务器上相对路径出错),修改后的完整脚本如下:
const pdfmake = require('pdfmake'); const fs = require('fs'); const path = require('path'); // 用绝对路径指定字体文件位置,避免相对路径歧义 const fonts = { Roboto: { normal: path.resolve(__dirname, 'fonts/Roboto-Regular.ttf'), bold: path.resolve(__dirname, 'fonts/Roboto-Medium.ttf'), italics: path.resolve(__dirname, 'fonts/Roboto-Italic.ttf'), bolditalics: path.resolve(__dirname, 'fonts/Roboto-MediumItalic.ttf') } }; // 直接从pdfmake包引入PdfPrinter const PdfPrinter = require('pdfmake'); const printer = new PdfPrinter(fonts); const docDefinition = { content: [ 'First paragraph', 'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines' ] }; const pdfDoc = printer.createPdfKitDocument(docDefinition); pdfDoc.pipe(fs.createWriteStream('pdfs/basics.pdf')); pdfDoc.end();
额外注意事项
- 字体文件检查:确保服务器上
fonts文件夹确实存在,且字体文件路径和代码里的一致,用path.resolve可以彻底避免相对路径带来的定位错误。 - npm警告处理:你安装时出现的
npm WARN enoent等警告,是因为当前目录没有package.json文件,可在项目目录下执行npm init -y快速生成一个,这些警告不影响pdfmake使用,但规范项目结构会更稳妥。 - 权限问题:用
sudo执行脚本后,生成的pdfs文件夹和文件可能会有root权限,后续若需要其他服务访问,记得调整权限;或者直接不用sudo运行(确保node进程有写入目标文件夹的权限)。
内容的提问来源于stack exchange,提问作者B.T
相关产品推荐
相关产品推荐

