[ID CC-CC2022] Как перевести applescript на java

  • Автор темы Автор темы hulk1776
  • Дата начала Дата начала

hulk1776

Топикстартер
15 лет на форуме
Сообщения
746
Реакции
21
Нужно скриптом в дистиллер загрузить имеющийся ps-файл.
На старой работе (на Маке) была такая конструкция:
Код:
var myParameters = ["Mac:Users:d.user:Documents:tmp:", aName];
var myAppleScript = "tell application \"Acrobat Distiller\" to open  ((item 1 of arguments) & item 2 of arguments)";
app.doScript(myAppleScript, ScriptLanguage.applescriptLanguage, myParameters);
Так понимаю, что в первой строке указаны два параметра - путь и название файла. А во второй как раз команда загрузки пути и файла в Дистиллер. Можно ли это действие (загрузку в Дистиллер) перевести с маковского языка? Может проще вставить VBS-команду?
 
Переложить в нотфолдер Дистиллера не проще?
 
  • Спасибо
Реакции: hulk1776
Вы как то неправильно формулируете свой вопрос
Вам, наверное, надо не на javascript перевести (тем более не на java) а повторить эту операцию под win через вызов bat файла?
 
  • Спасибо
Реакции: ~RA~
Да, можно, наверное, вызвать bat. Но вызов должен сделать скрипт из-под Инди (который перед этим сгенерил это PS-файл). То есть как из Javascript'a заставить Дистиллер начать "разматывать" ps'ку?
 
JavaScript:
var batFile = File(Folder.myDocuments + '/run.bat');
batFile.open('w');
batFile.write('Тут все команды которые вы хотите вставить в bat');
batFile.close();
batFile.execute();
 
  • Спасибо
Реакции: ~RA~
Переложить в нотфолдер Дистиллера не проще?
Что-то Distiller не среагировал на наличие. Папка прописана, но дистиллер ничего не начинает "разматывать" (то ли не видит тамошнее содержимое [больше 10 секунд не видит], то ли еще что-то). Придется насильно впихивать в него ПСку (если получится). НО так даже лучше, чтобы полученная ПДФка оказалась сразу в нужном месте.
 
Придется насильно впихивать в него ПСку (если получится). НО так даже лучше, чтобы полученная ПДФка оказалась сразу в нужном месте.
Я не пойму в чем проблема - дистиллер, насколько я помню, берет имя файла с командной строки - ну и создайте соответствующий батник
 
JavaScript:
var batFile = File(Folder.myDocuments + '/run.bat');
batFile.open('w');
batFile.write('Тут все команды которые вы хотите вставить в bat');
[/QUOTE]
[B]В них-то и трудность. Надо перевести с эппл-языка[/B]
[I]var myAppleScript = "tell application \"Acrobat Distiller\" to open  ((item 1 of arguments) & item 2 of arguments)";[/I]
[QUOTE="_MBK_, post: 1233080, member: 17784"]

batFile.close();
batFile.execute();
 
При чем тут эпплскрипт? Вы не можете простой батник для винды сделать в котором два слова - дистиллер с полным путем и ps файл который ему скормить надо?
 
При чем тут эпплскрипт? Вы не можете простой батник для винды сделать в котором два слова - дистиллер с полным путем и ps файл который ему скормить надо?
Батник сделал, из проводника он запускается (хотя вот уже опять не запускается, так как вечная проблема в кодировках [в пути к ПСке есть русские символы]). Вычитал, что надо сохранять в OEM866. Но это полбеды, сам батник же надо запускать из скрипта, который делает ПСку. Сам по себе батник, на который надо будет нажать Enter не особо нужен, так как Enter можно нажать сразу на ps-файле. Да и как батнику передать значение переменной? Да чтобудет с кодировками при перезаписях. Поэтому хотелось бы запускать дистилляцию сразу из Инди-скрипта без переходов в вин-среду.
 
JavaScript:
#target bridge

if( BridgeTalk.appName == "bridge" ) {
    bridgePath = new MenuElement("command", "Copy path to clipboard", "at the end of Thumbnail"); 
}

bridgePath.onSelect = function () {
    pathToClipboard(); 
}

function pathToClipboard() {
    var tmpFile = File(Folder.temp + '/ptcb.bat');
    tmpFile.encoding = 'CP866';
    tmpFile.open('w');
    tmpFile.write("echo " + decodeURI(app.document.presentationPath)  + " | clip");
    tmpFile.close();
    app.system('"' + tmpFile.fsName + '"');
    tmpFile.remove();
}

Вот такой код был для примера написан когда-то.
 
  • Спасибо
Реакции: hulk1776
Батник сделал, из проводника он запускается (хотя вот уже опять не запускается, так как вечная проблема в кодировках [в пути к ПСке есть русские символы]). Вычитал, что надо сохранять в OEM866. Но это полбеды, сам батник же надо запускать из скрипта, который делает ПСку.
Вы внимательно код посмотрите, который вам я и Бутрин прислали. Там именно батник формируется и запускается. Ничего ему передавать не надо, значение переменной сразу в него пишите.
 
Есть, правда, еще одна тонкость: и ps файл и вызов батника из скрипта вызываются асинхронно (то есть, запустив эти команды, скрипт не ждет их успешного завершения, а продолжает выполняться дальше), поэтому надо как то отслеживать моменты, когда ps сформируется полностью и дистиллер переварит его.
 
Что-то Distiller не среагировал на наличие
Странно. У меня уже давно работает и не жужжит.
В Дистиллере (у меня на русском почему-то) Настройки - Наблюдаемые папки.
Ну и там все понятно.
Сам Дистиллер должен быть запущен.
 
Странно. У меня уже давно работает и не жужжит.
В Дистиллере (у меня на русском почему-то) Настройки - Наблюдаемые папки.
Ну и там все понятно.
Сам Дистиллер должен быть запущен.
Ну да, Watched folders. Мой Дист не реагирует ((( (ни рабочий, ни домашний).
 
Вы внимательно код посмотрите, который вам я и Бутрин прислали. Там именно батник формируется и запускается. Ничего ему передавать не надо, значение переменной сразу в него пишите.

Код:
var aD = app.activeDocument;
mF = aD.fullName; //
...
batFile.write('"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe"' mF);
...
Как же можно "не передавать значение перменной" в командный файл?
В батнике появляется такая запись:
"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe" mF
Понятно, что mF батник не понимает.

P.S. Виноват, не так записал. Секунду))))
 
Последнее редактирование:
Может быть вы имели в виду вот так?
JavaScript:
batFile.write('"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe "+ mF');
 
Вот так вроде бы работает.
Код:
var aD = app.activeDocument;
mF = aD.fullName.fsName;
var myFilename = mF.toString();
myFilename =myFilename.substr(0, myFilename.lastIndexOf('.'))
myFilename1 = myFilename + "_" + "PS.ps";
var batFile = File(mPath + "Distiller.bat");
batFile.encoding = 'CP866';
batFile.open('w');
batFile.write('"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe"' + ' "' + decodeURI(myFilename1) + '"');
batFile.close();
batFile.execute();
От вариаций кавычек, кодировок, слешей (левый-правый) можно спятить 'otbline'.
 
Может быть вы имели в виду вот так?
JavaScript:
batFile.write('"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe "+ mF');
Да, это недосмотрел, + там еще надо было видоизменить название, передавемого, потому что вначале же берется имя файла верстки, а нужен ПС-файл (который перед этим был сделан).
4 часа вчера + 3 часика сегодня - интересное это дело, передача строк в батники.
 
Последнее редактирование: