You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务端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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:58