2016-03-02 12 views
0

Я пытаюсь выполнить команду в 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}; 

Однако есть две проблемы:

  1. Не удается получить ожидаемый результат

    Каждый раз, когда я выполняю код, я получаю сообщение об ошибке, как это:

    {"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.

  2. Команда не блокирует процесс

    я обнаружил, что команда soffice .... вернется непосредственно перед PDF генерируется, что означает, что я не могу убедиться, когда файл генерируется.

ответ

0

Это работает для меня, чтобы преобразовать слова в HTML:

 execHTML = exec('soffice --headless --invisible --nolockcheck --convert-to html --outdir ' + fileNameHTML + ' ' + filesString, 
     function(error, stdout, stderr) { 
     if (error !== null) { 
      console.log('exec error: ', error); 
     } 
     }); 

    execHTML.on('close', function(code) { 
     if (code > 0) { 
     return callback(code); 
     } else { 
     callback(); 
     } 
    }) 
Смежные вопросы