Node.js Azure Function使用pdf2pic转换PDF时出现write EOF错误如何解决
问题解决:Azure Function中pdf2pic转换PDF报EOF错误
错误原因
- 依赖配置不匹配:已安装GraphicsMagick,但代码中gm初始化时强制启用ImageMagick模式,两者不兼容导致流写入提前中断
- 异步逻辑未等待:async函数中调用
convert.bulk()未加await,函数在转换完成前提前退出,资源被回收触发EOF - 临时目录权限问题:Azure Function运行环境无当前工作目录写入权限,直接使用
./tmp/路径会触发写入失败
修复步骤
- 移除多余的gm初始化配置,或将imageMagick参数改为false匹配已安装的GraphicsMagick
- 给异步转换方法添加await,确保转换完成前函数不会退出
- 使用Azure Function系统提供的临时目录路径,若不需要生成本地临时文件可删除文件存储相关配置,直接获取转换后的buffer数据
修正后代码
const pdf2pic = require('pdf2pic'); module.exports = async function (context, pdfBuffer) { try { if (!context.bindingData.blobTrigger.toLowerCase().endsWith('.pdf')) { throw new Error('The uploaded file is not in PDF format') } const options = { format: "jpg", density: 100, width: 600, height: 600, // 若需要临时存储文件,取消下方注释使用系统临时目录 // savePath: process.env.TEMP || '/tmp', // saveFilename: "tmp-file" }; context.log('Converting pdf to jpg...'); const convert = pdf2pic.fromBuffer(pdfBuffer, options); // 第二个参数为false表示不写入本地文件,直接返回转换结果 const output = await convert.bulk(-1, false); context.log('OUTPUT:', output); // 此处添加将output中的buffer/base64上传到目标存储的逻辑 } catch (error) { context.log("ERROR CONVERTING PDF:", error); return; } };
额外验证点
- 确认GraphicsMagick、Ghostscript的安装路径已添加到Azure Function的PATH环境变量中,运行时可正常调用两个命令行工具
- 若使用Linux消费级计划的Azure Function,需确认运行环境已完成两个依赖的安装,没有缺失运行时库
内容的提问来源于stack exchange,提问作者Bruno Cereda
相关产品推荐
相关产品推荐

