Вот ошибка, которую я имею в Редакторе сценариев: Error on line 72: Error: sh: img2pdf: command not found
Я пишу сценарий JavaScript для автоматизации (JXA), чтобы автоматизировать коллекцию домашних заданий по математике в Интернете после того, как задаю этот вопрос ,Сценарий наконец закончен.
Однако одна из программ, которые мне нужно использовать через Shell, img2pdf на самом деле не работает с использованием doShellScript ().Это неожиданно, потому что в osascript
он отлично работает.
//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.
}
}
}
}
Я ожидаю, что все электронные письма в моем почтовом ящике с темами, содержащими «Тест» и вложения, будут обрабатываться следующим образом:
Необходимо извлечь имя отправителя и создать папку с таким именем в папке HWBox
, если она не существует.
Отметка времени электронного письма вФорма MMDDYYYYHHMMSS должна быть извлечена, и в папке, соответствующей имени отправителя, должна быть создана папка с таким именем.Если такая отметка времени уже существует, ее следует игнорировать.
Все вложения в электронное письмо должны быть загружены и помещены в папку с именем, созданным отметкой времени на шаге 2.
Если имеется более 1 вложения, я предполагаю, что все они являются изображениями.В этом случае программа img2pdf
используется через Shell для обработки таких изображений и их преобразования в PDF.
В действительности, шаг 1-3 работает.Шаг 4, с другой стороны, не работает.