[AI CC-CC2021] Как пропустить отсутствующие линки при открытии файла

keramer82

Участник
Топикстартер
Сообщения
52
Реакции
3
Доброго времени суток! Я написал автозапускаемый скрипт.jsx, который сохраняет открытый документ, встраивая все линки. Открытие файла происходит не из скрипта, а из, допустим, проводника, простым двойным кликом, затем автоматически запускается скрипт, все работает, если у линков нет отсутствующих связей, а если связь отсутствует (файл удален или перемещен), нужно нажать кнопку Ignore. Как это сделать без участия пользователя? Информацию найти не могу, прошу помощи. Вот пока мой код:
JavaScript:
var doc = app.activeDocument
var NameFiles = doc.path //файл текущего документа
//если нет линков пропустить ???
if()
{
    
}
//Встроить линки, не трогать настройки по умолчанию
var SaveOptions=new IllustratorSaveOptions();
SaveOptions.pdfCompatible = true;
SaveOptions.embedICCProfile = false;
SaveOptions.compressed = true;
SaveOptions.embedLinkedFiles = true;
doc.saveAs(NameFiles, SaveOptions);
doc.close(SaveOptions.DONOTSAVECHANGES);
app.quit();
 

keramer82

Участник
Топикстартер
Сообщения
52
Реакции
3
Видимо if (doc.path = '') {continue}
Но это же проверка существует ли открываемый файл.ai, разве нет? Мне нужно проверить линки в открываемом документе, а не сам файл.ai. Либо я не так все понял.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
JavaScript:
var linkFile=new File(linkPath);
if (!linkFile.exists)
{
    // Файла не существует линк битый
}
 
  • Спасибо
Реакции: keramer82

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
По сути даже первая строка не нужна, вы ж перебираете все app.activeDocument.placedItems а у них поле file - уже File (каломбур!)
JavaScript:
for (var i=0;i<app.activeDocument.placedItems.length;i++)
{
var linkFile=app.activeDocument.placedItems[i].file;
if (!linkFile.exists)
{
    // Файла не существует линк битый
}
}
 
  • Спасибо
Реакции: keramer82

keramer82

Участник
Топикстартер
Сообщения
52
Реакции
3
По сути даже первая строка не нужна, вы ж перебираете все app.activeDocument.placedItems а у них поле file - уже File (каломбур!)
JavaScript:
for (var i=0;i<app.activeDocument.placedItems.length;i++)
{
var linkFile=app.activeDocument.placedItems[i].file;
if (!linkFile.exists)
{
    // Файла не существует линк битый
}
}
Прошу прощения за назойливость, а какой командой можно пропустить битый линк, без уведомления пользователя?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Аааааа извините спросонья не понял сразу вашу хотелку
Очень сожалею, но, похоже, она не выполнима
В качестве костыля попробуйте app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
 
  • Спасибо
Реакции: dumbm1 и keramer82

keramer82

Участник
Топикстартер
Сообщения
52
Реакции
3
Аааааа извините спросонья не понял сразу вашу хотелку
Очень сожалею, но, похоже, она не выполнима
В качестве костыля попробуйте app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
Жаль... А может если открытие файла будет из скрипта, то возможно ли пропустить битый линк?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Нельзя просто так взять и влезть в открытие файла из скрипта. Вы эту строку вставить пробовали? Она по идее должна подавлять диалоги при открытии. Если не получится, попробовать открывать экшном с подавлением диалогов, если и так не получится то без вариантов.
 
  • Спасибо
Реакции: keramer82

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
в принципе все линки есть в xmp. его можно прочитать и обработать без открывания файла

Код:
<xmpMM:Manifest>
            <rdf:Seq>
               <rdf:li rdf:parseType="Resource">
                  <stMfs:linkForm>EmbedByReference</stMfs:linkForm>
                  <stMfs:reference rdf:parseType="Resource">
                     <stRef:filePath>/Volumes/HDD/Downloads/circle/Circle/circlebagtags/IB317365-19_CBT_back.eps</stRef:filePath>
                     <stRef:documentID>xmp.did:0c65473e-a9e4-41cf-807c-069652094ba3</stRef:documentID>
                     <stRef:instanceID>xmp.iid:0c65473e-a9e4-41cf-807c-069652094ba3</stRef:instanceID>
                  </stMfs:reference>
               </rdf:li>
            </rdf:Seq>
         </xmpMM:Manifest>
 
Последнее редактирование:
  • Спасибо
Реакции: dumbm1

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
ps 1) жестко как у вас скрипт в конце иллюстратор вырубает, так ли это необходимо? 2) SaveOptions вроде как занято под константы, у вас реально работает присвоить ему IllustratorSaveOptions, а после этого опять использовать для SaveOptions.DONOTSAVECHANGES?
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Ты уверен, что при открытии файла иллюстратор линки именно из XMP читает? На мой взгляд - практически гарантировано, что нет
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ты уверен, что при открытии файла иллюстратор линки именно из XMP читает? На мой взгляд - практически гарантировано, что нет

да нет конечно, но пути в xmp правильные, если их специально не вычищать
 

keramer82

Участник
Топикстартер
Сообщения
52
Реакции
3
ps 1) жестко как у вас скрипт в конце иллюстратор вырубает, так ли это необходимо? 2) SaveOptions вроде как занято под константы, у вас реально работает присвоить ему IllustratorSaveOptions, а после этого опять использовать для SaveOptions.DONOTSAVECHANGES?
1. да, думал, что нужно.
2. да все это работает. В итоге при сохранении используются свои параметры, но настройки по умолчанию это не затрагивает.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
да нет конечно, но пути в xmp правильные, если их специально не вычищать
А смысл? Я тоже сперва не вкурил но топикстартеру нужно просто молчаливое открытие-пересохранение без назойливых окон.
 

keramer82

Участник
Топикстартер
Сообщения
52
Реакции
3
Да, у меня есть файл, с некоторыми битыми линками, нужно встроить все линки, которые не битые, а битые не трогать. Но в тихом режиме, без диалоговых окон.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
А смысл? Я тоже сперва не вкурил но топикстартеру нужно просто молчаливое открытие-пересохранение без назойливых окон.

я думал он не хочет открывать файл, если там есть битые линки, вот это можно предусмотреть. а диалоги по идее должны подавляться вот этим app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;

да все это работает. В итоге при сохранении используются свои параметры, но настройки по умолчанию это не затрагивает.

я не о том. у вас имя переменной SaveOptions совпадает с именем enumeration SaveOptions, я бы так не делал. Назовите хоть mySaveOptions.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
просто если линков нет, их все равно не встроить, ну и смысл этот файл вообще обрабатывать? 'hz'
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
я думал он не хочет открывать файл, если там есть битые линки, вот это можно предусмотреть. а диалоги по идее должны подавляться вот этим app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
Ты сообщение #7 глянь, по ходу спишь ты больше меня '))'