首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复“第72行的错误:错误: sh: img2pdf:命令未找到”

如何修复“第72行的错误:错误: sh: img2pdf:命令未找到”
EN

Stack Overflow用户
提问于 2018-12-23 20:39:12
回答 1查看 180关注 0票数 0

以下是脚本编辑器中的错误:Error on line 72: Error: sh: img2pdf: command not found

我正在编写一个JavaScript for Automation (JXA)脚本,用于在询问that question之后自动化在线数学作业收集。剧本终于完成了。

然而,我需要通过Shell使用的程序之一,img2pdf并不真正使用doShellScript()。这是出乎意料的,因为在osascript中,它非常有效。

代码语言:javascript
复制
//Clean sender
function cleanSender(sender) {
  var pos = sender.search("<");
  return sender.slice(0, pos - 1);
}
//Num to string, padding included
function numToString(num) {
  if(num < 10) {
    return '0' + num.toString();
  }
  else {
    return num.toString();
  }
}
//date to time stamp
function genTimeStamp(date) {
  if (!(date instanceof Date)) {
    console.log('Type Error!');
    return undefined;
  }
  var hours = numToString(date.getHours());
  var minutes = numToString(date.getMinutes());
  var seconds = numToString(date.getSeconds());
  var month = numToString(date.getMonth() + 1);
  var day = numToString(date.getDate());
  var year = numToString(date.getFullYear());
  var timeStamp = month+day+year+hours+minutes+seconds;
  return timeStamp;
}

function run() {
  var mail = Application('Mail');
  var finder = Application('Finder');
  var app = Application.currentApplication();
  var keyword = "Test";
  var topFolderPath = "/Users/CatLover/Documents/HWBox";
  var topFolder = finder.startupDisk.folders.byName("Users").folders.byName("CatLover").folders.byName("Documents").folders.byName("HWBox");
  mail.includeStandardAdditions = true;
  finder.includeStandardAdditions = true;
  app.includeStandardAdditions = true;
  var messages = mail.inbox.messages;
  var messagesLength = messages.length;
  for(let i = 0; i < messagesLength; i++) {
    let message = messages[i];
    if (message.subject().includes(keyword) && message.mailAttachments().length != 0) {
      var sender = cleanSender(message.sender());//Name only
      var timeStamp = genTimeStamp(message.dateSent());//Folder name
      var attachments = message.mailAttachments();
      var individualPath = topFolderPath + '/' + sender;
      if (!finder.exists(Path(individualPath))) {
      //No folder!
        finder.make({new: "folder", at: Path(topFolderPath), withProperties:{name: sender}});
      }
      var messagePath = individualPath + '/' + timeStamp;
      if (!finder.exists(Path(messagePath))) {
      //No folder!
        finder.make({new: "folder", at: Path(individualPath), withProperties:{name: timeStamp}});
        var command = "img2pdf ";
        var attachmentsLength = attachments.length;
        for(let j = 0; j < attachmentsLength; j++) {
          let attachment = attachments[j];
          var filename = attachment.name();
          var filePath = messagePath + '/' + filename;
          mail.save(attachment, {in: Path(filePath)});
          command = command + filePath + ' ';
        }
        if (attachmentsLength > 1) {
          //Pics
          var pdfName = sender + timeStamp;
          command = command + '-o ' + messagePath + '/' + pdfName;
          app.doShellScript(command);
        }
      }
      else {
        continue;//Non-spammers aren't going to send two emails at the same time down to the same second. No need to process an already processed email.
      }
    }
  }
}

我期望我的收件箱中包含“测试”和附件的所有电子邮件将按以下方式处理:

  1. 应该提取发件人的名称,如果该文件夹不存在,则在HWBox文件夹中创建具有该名称的文件夹。
  2. 应提取MMDDYYYYHHMMSS表单中电子邮件的时间戳,并在与发件人名称相对应的文件夹中创建该名称的文件夹。如果这样的时间戳已经存在,就应该忽略它。
  3. 应下载电子邮件的所有附件,并将其名称放入由步骤2中的时间戳生成的文件夹中。
  4. 如果有超过一个附件,我假设它们都是图像。在这种情况下,img2pdf程序通过Shell来处理这些图像并将它们转换成PDF格式。

实际上,步骤1-3工作。另一方面,第4步不起作用。

EN

回答 1

Stack Overflow用户

发布于 2018-12-23 21:21:25

好的,我想我现在明白怎么回事了。基本上,doShellScript()实际上并不知道img2pdf的路径。使用完整路径后,此错误将消失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53906997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档