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

Node.js中pdfmake生成PDF上传Cloudinary后无法打开的排查求助

问题排查与解决方案

可能的原因及修复步骤

1. 显式指定Cloudinary资源类型为raw

Cloudinary的resource_type: 'auto'有时会误判PDF文件类型,导致文件被错误处理。明确设置为raw可确保文件以原始PDF格式存储:

const uploadResult = await cloudinary.v2.uploader.upload(tempFilePath, {
  folder: 'invoices',
  resource_type: 'raw', // 替换auto为raw
});

2. 修正PDF Buffer生成逻辑

使用createPdfKitDocument收集流块的方式可能未生成完整有效的PDF。建议改用pdfmake内置的createPdf方法直接生成Buffer,可靠性更高:

// 替换原PDF Buffer生成代码
const pdfBuffer = await new Promise((resolve, reject) => {
  const pdfmakes = new pdfmake(fonts);
  const pdfDoc = pdfmakes.createPdf(documentDefinition);
  pdfDoc.getBuffer((buffer) => {
    resolve(buffer);
  });
});

3. 直接上传Buffer(跳过临时文件)

写入临时文件再读取可能引入文件权限、写入不完整等额外问题。可以将Buffer转为Base64字符串直接上传:

const base64Pdf = `data:application/pdf;base64,${pdfBuffer.toString('base64')}`;
const uploadResult = await cloudinary.v2.uploader.upload(base64Pdf, {
  folder: 'invoices',
  resource_type: 'raw',
});

4. 验证本地PDF有效性

先检查本地生成的temp.pdf是否能正常打开。如果本地文件也无法打开,说明PDF生成逻辑本身存在问题,需要核对documentDefinition的结构、字体配置等是否符合pdfmake要求。


内容的提问来源于stack exchange,提问作者Aditya Cholkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:30:11