Я пытаюсь выполнить команду в Node.js для преобразования офисного документа в PDF с помощью libreoffice
. Это основной код:Выполнение команды в Node.js
var fs = require('fs');
var path = require('path');
var exec = require('child_process').exec;
var convert = function (file, cb) {
try {
var p = path.parse(file);
var pdf = path.join(p.dir, p.name) + '.pdf';
var cmd = 'soffice --headless --convert-to pdf --outdir "' + p.dir + '" "' + file + '"';
console.info(cmd);
exec(cmd, function (err, stdout, stderr) {
if (err) {
cb(err);
return;
}
if (fs.existsSync(pdf)) {
cb(null, pdf);
} else {
cb("not exist");
}
});
} catch (err) {
cb(err);
}
};
module.exports = {convert: convert};
Однако есть две проблемы:
Не удается получить ожидаемый результат
Каждый раз, когда я выполняю код, я получаю сообщение об ошибке, как это:
{"error": {"killed":false, "code":1, "signal":null, "cmd":"C:\\WINDOWS\\system32\\cmd.exe /s /c \"soffice --headless --convert-to pdf --outdir \"D:/test\" \"D:/test/a.doc\"\"" } }
Но когда я запускаю команду вручную:
soffice --headless --convert-to pdf --outdir "D:/test" "D:/test/a.doc"
Я могу получить PDF.
Команда не блокирует процесс
я обнаружил, что команда
soffice ....
вернется непосредственно перед PDF генерируется, что означает, что я не могу убедиться, когда файл генерируется.