【问题标题】:Execute command in Node.js在 Node.js 中执行命令
【发布时间】:2016-03-02 01:54:31
【问题描述】:

我正在尝试在 Node.js 中执行命令以使用 libreoffice 将办公文档转换为 PDF。这是核心代码:

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之前立即返回,这意味着我无法确定文件何时生成。

【问题讨论】:

    标签: node.js process libreoffice


    【解决方案1】:

    这对我来说可以将 word 转换为 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();
          }
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2023-03-24
      • 2012-12-27
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2012-05-24
      相关资源
      最近更新 更多