我已经在Windows PC上用几个月的时间开发了一个带有NodeJS后端的MERN堆栈应用程序。在我的开发环境中,它运行良好,并且在将其部署在DigitalOcean提供的Ubuntu Droplet上时,该应用程序的大多数功能都可以正常工作。
例外情况是一项功能,它通过将值插入excel工作簿并使用第三方软件LibreOffice将其打印为pdf,从而为用户提供pdf文件。这是通过产生一个执行.exe的子进程来完成的。
这是我收到的错误消息:
Error when executing file Error: Command failed: /home/user/projectFolder/libreOffice/program/soffice.exe --headless --convert-to pdf --outdir /home/user/projectFolder/calc /home/user/projectFolder/calc/file942534.xlsx
/home/user/projectFolder/libreOffice/program/soffice.exe: 1: /home/user/projectFolder/libreOffice/program/soffice.exe: MZ������: not found
/home/user/projectFolder/libreOffice/program/soffice.exe: 2: /home/user/projectFolder/libreOffice/program/soffice.exe: Syntax error: Unterminated quoted string
at ChildProcess.exithandler (child_process.js:303:12)
at ChildProcess.emit (events.js:323:22)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5) {
killed: false,
code: 2,
signal: null,
cmd: '/home/user/projectFolder/libreOffice/program/soffice.exe --headless --convert-to pdf --outdir /home/user/projectFolder/calc /home/user/projectFolder/calc/file942534.xlsx'
}
这是产生子进程的Java Script代码:
sheetToPdf = (tempName, finalCallBack) => {
const sofficePath = path.resolve("./libreOffice/program/soffice.exe");
const calcDirr = path.resolve("./calc/");
const child = execFile(
sofficePath,
[
"--headless",
"--convert-to",
"pdf",
"--outdir",
calcDirr,
calcDirr + "/" + tempName
],
err => {
if (err) console.log("Error when executing file", err);
}
);
child.on("close", () => sendPdf(tempName, calcDirr, finalCallBack));
};
为什么会导致此错误,为什么它会在Windows而不是Ubuntu上工作?
之所以不起作用,是因为我试图在ubuntu上使用libre office的Windows安装,就像一个真正的傻人。