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

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
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-команду?
 

dosp

Участник
Сообщения
1 143
Реакции
369
Переложить в нотфолдер Дистиллера не проще?
 
  • Спасибо
Реакции: hulk1776

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Вы как то неправильно формулируете свой вопрос
Вам, наверное, надо не на javascript перевести (тем более не на java) а повторить эту операцию под win через вызов bat файла?
 
  • Спасибо
Реакции: ~RA~

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Да, можно, наверное, вызвать bat. Но вызов должен сделать скрипт из-под Инди (который перед этим сгенерил это PS-файл). То есть как из Javascript'a заставить Дистиллер начать "разматывать" ps'ку?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
JavaScript:
var batFile = File(Folder.myDocuments + '/run.bat');
batFile.open('w');
batFile.write('Тут все команды которые вы хотите вставить в bat');
batFile.close();
batFile.execute();
 
  • Спасибо
Реакции: ~RA~

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Переложить в нотфолдер Дистиллера не проще?
Что-то Distiller не среагировал на наличие. Папка прописана, но дистиллер ничего не начинает "разматывать" (то ли не видит тамошнее содержимое [больше 10 секунд не видит], то ли еще что-то). Придется насильно впихивать в него ПСку (если получится). НО так даже лучше, чтобы полученная ПДФка оказалась сразу в нужном месте.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Придется насильно впихивать в него ПСку (если получится). НО так даже лучше, чтобы полученная ПДФка оказалась сразу в нужном месте.
Я не пойму в чем проблема - дистиллер, насколько я помню, берет имя файла с командной строки - ну и создайте соответствующий батник
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
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();
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
При чем тут эпплскрипт? Вы не можете простой батник для винды сделать в котором два слова - дистиллер с полным путем и ps файл который ему скормить надо?
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
При чем тут эпплскрипт? Вы не можете простой батник для винды сделать в котором два слова - дистиллер с полным путем и ps файл который ему скормить надо?
Батник сделал, из проводника он запускается (хотя вот уже опять не запускается, так как вечная проблема в кодировках [в пути к ПСке есть русские символы]). Вычитал, что надо сохранять в OEM866. Но это полбеды, сам батник же надо запускать из скрипта, который делает ПСку. Сам по себе батник, на который надо будет нажать Enter не особо нужен, так как Enter можно нажать сразу на ps-файле. Да и как батнику передать значение переменной? Да чтобудет с кодировками при перезаписях. Поэтому хотелось бы запускать дистилляцию сразу из Инди-скрипта без переходов в вин-среду.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Батник сделал, из проводника он запускается (хотя вот уже опять не запускается, так как вечная проблема в кодировках [в пути к ПСке есть русские символы]). Вычитал, что надо сохранять в OEM866. Но это полбеды, сам батник же надо запускать из скрипта, который делает ПСку.
Вы внимательно код посмотрите, который вам я и Бутрин прислали. Там именно батник формируется и запускается. Ничего ему передавать не надо, значение переменной сразу в него пишите.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Есть, правда, еще одна тонкость: и ps файл и вызов батника из скрипта вызываются асинхронно (то есть, запустив эти команды, скрипт не ждет их успешного завершения, а продолжает выполняться дальше), поэтому надо как то отслеживать моменты, когда ps сформируется полностью и дистиллер переварит его.
 

dosp

Участник
Сообщения
1 143
Реакции
369
Что-то Distiller не среагировал на наличие
Странно. У меня уже давно работает и не жужжит.
В Дистиллере (у меня на русском почему-то) Настройки - Наблюдаемые папки.
Ну и там все понятно.
Сам Дистиллер должен быть запущен.
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Странно. У меня уже давно работает и не жужжит.
В Дистиллере (у меня на русском почему-то) Настройки - Наблюдаемые папки.
Ну и там все понятно.
Сам Дистиллер должен быть запущен.
Ну да, Watched folders. Мой Дист не реагирует ((( (ни рабочий, ни домашний).
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Вы внимательно код посмотрите, который вам я и Бутрин прислали. Там именно батник формируется и запускается. Ничего ему передавать не надо, значение переменной сразу в него пишите.

Код:
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. Виноват, не так записал. Секунду))))
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Может быть вы имели в виду вот так?
JavaScript:
batFile.write('"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe "+ mF');
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Вот так вроде бы работает.
Код:
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'.
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Может быть вы имели в виду вот так?
JavaScript:
batFile.write('"C:/Program Files (x86)/Adobe/Acrobat DC/Acrobat/acrodist.exe "+ mF');
Да, это недосмотрел, + там еще надо было видоизменить название, передавемого, потому что вначале же берется имя файла верстки, а нужен ПС-файл (который перед этим был сделан).
4 часа вчера + 3 часика сегодня - интересное это дело, передача строк в батники.
 
Последнее редактирование: