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

Node.js(Express)中fs.writeFile保存PDF打开空白问题咨询

问题根因

你遇到的PDF打开空白问题,核心错误是写入PDF文件时错误指定了utf-8编码。PDF是标准二进制格式文件,不是纯UTF-8文本,写入时强制用UTF-8做编码转换,会破坏PDF的二进制字节结构,导致PDF阅读器无法正常解析文件内容,最终显示空白。你贴出的PDF内容示例里第二行的乱码字符,本身就是PDF二进制头的特殊字节,用UTF-8转义后这些字节会被篡改,直接导致文件损坏。

修复方法

根据你拿到的pdfData.data的类型,选择对应写法,核心原则是写入二进制文件不要指定文本编码:

  • 如果pdfData.data本身是Buffer类型(比如PDF生成库直接返回的结果、二进制接口返回转好的Buffer),直接移除encoding: "utf-8"配置即可,Node.js写入Buffer时默认走二进制模式,不会做编码转换:
fs.writeFile(
  "response.pdf",
  pdfData.data,
  function (err) {
    if (err) throw err;
    console.log("File is created successfully.");
  }
);
  • 如果pdfData.data是ArrayBuffer、Uint8Array类型(比如从前端传过来的二进制数据、HTTP接口拿到的原始二进制响应),先转成标准Buffer再写入,同样不要加UTF-8编码配置:
fs.writeFile(
  "response.pdf",
  Buffer.from(pdfData.data),
  function (err) {
    if (err) throw err;
    console.log("File is created successfully.");
  }
);

如果你是通过HTTP请求拉取的PDF内容,记得请求时要配置responseType: 'arraybuffer',不要让请求库默认把响应当成UTF-8文本解析,从数据源层面避免二进制被破坏。

后续排查要点
  • 写入完成后对比文件大小:正常生成的PDF文件大小,应该和pdfData.data的字节长度基本一致,如果大小差距明显,说明中间存在编码转义导致的字节丢失/篡改。
  • 不要尝试将PDF二进制内容转成普通字符串做拼接、修改操作,只要经过UTF-8等文本编码转义,PDF的非文本字节就会被破坏。
  • 如果使用pdfkit、puppeteer等第三方库生成PDF,直接使用库返回的Buffer/流写入文件即可,不要额外做编码处理。

内容的提问来源于stack exchange,提问作者Oluwaseun Fabiyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:36:44