[AI CC2025] PlugIn для Illustrator 2025

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

Dmitri_J

Участник
Топикстартер
Сообщения
64
Реакции
0
Есть ли тут кто-то с опытом написания плагинов CEP для Illustrator
Поделитесь опытом 🙏 потому как у меня на самом начальном етапе возникли сложности и ряд вопросов
А если более точно то создал я тестовый плагин куда хочу пока что подключить свой скрипт jsx, подписал его сертом и даже получилось увидеть его в Windows > Extension > myPlugInTEST (спустя около недели мучений, перепробовав все версии CSXS и поисков информации в документации'shok2')для понимания что все работает в main.jsx добавил создание прямоугольника и текста и он даже сработал но к моему сожалению и не пониманию только один раз после чего просто молчал.
По этому первое что меня очень интересует как дебажить это все дело и быть может все же есть какая-нибуть консоль ? по совету gpt через браузер - ничего не видит логов тоже не нашел.. ну вернее какие-то логи нашел но там ни слова о плагинах.

Буду очень благодарен за любую помощь !
 
дайте ссылку на исходники, пожулуйста
Есть ссылка на стак там в посте добавил код
 
Есть ссылка на стак там в посте добавил код
Я так понимаю, что речь идет не о плагине в полном смысле этого слова, а о панели расширения - html/css/js extension panel?

1. Возьмите какую нибудь мою панель для Иллюстратора на гитхаб и посмотрите, что как: dumbm1 - Overview
2. Отлаживать можно через консоль браузера chrome, для этого в корне должен лежать файл .debug с определенным содержанием - посмотрите как у меня в панелях сделано.
3.Что хотите, чтобы ваша панель делала? Могу быстро накидать несложный демо-код.
 
с помощью location.reload() можно обновить только js/css/html, но не код, который изменен в jsx-файле
 
Я так понимаю, что речь идет не о плагине в полном смысле этого слова, а о панели расширения - html/css/js extension panel?

1. Возьмите какую нибудь мою панель для Иллюстратора на гитхаб и посмотрите, что как: dumbm1 - Overview
2. Отлаживать можно через консоль браузера chrome, для этого в корне должен лежать файл .debug с определенным содержанием - посмотрите как у меня в панелях сделано.
3.Что хотите, чтобы ваша панель делала? Могу быстро накидать несложный демо-код.
Ну вообще у меня потребность в плагине возникла исключительно в целях защитить свои скрипты и так как в сам скрипт я особо не могу "запихнуть" к примеру связь с сервером или поставить лицензию которую я смогу в случае чего отключить то решил сделать плагин который будет выполнять уже существующие скрипты и в идеале конечно что б сам код скрипта был на сервере а не на компе в файлах плагина. Знаю что через Node.js это реально реализовать, а для начала хочу попробовать с помощью простой кнопки запустить исполнение jsx скрипта:)
 
с помощью location.reload() можно обновить только js/css/html, но не код, который изменен в jsx-файле
ну я думаю тут проще так как сам скрипт jsx можно написать и протестировать как и ранее
 
ну я думаю тут проще так как сам скрипт jsx можно написать и протестировать как и ранее
Ну если скрипт вы умеете тестировать и писать, то вот вам краткая памятка, как это все собрать в экстеншен.
 
Ну если скрипт вы умеете тестировать и писать, то вот вам краткая памятка, как это все собрать в экстеншен.
Спасибо за ответ и памятку, отладку и обновление/сброс настроил но пока не понимаю почему скрипт выполняется только один раз? потом нужно перезапуск делать
 
Я так понимаю, что речь идет не о плагине в полном смысле этого слова, а о панели расширения - html/css/js extension panel?

1. Возьмите какую нибудь мою панель для Иллюстратора на гитхаб и посмотрите, что как: dumbm1 - Overview
2. Отлаживать можно через консоль браузера chrome, для этого в корне должен лежать файл .debug с определенным содержанием - посмотрите как у меня в панелях сделано.
3.Что хотите, чтобы ваша панель делала? Могу быстро накидать несложный демо-код.
Заинтересовал ваш плагин ai_exp_jpg. Подскажите, пожалуйста, как его инсталировать в Илюстратор?
 
Спасибо за ответ и памятку, отладку и обновление/сброс настроил но пока не понимаю почему скрипт выполняется только один раз? потом нужно перезапуск делать
Ну я вам дал пособие по быстрой компиляции докера. Дайте код скрипта (jsx), который выполняется всего один раз — я проверю.
От панели это не зависит. Я памятку для себя написал )). И все не соберусь написать, какие нюансы при VScode. Но напишу )). Думаю, что какой-то параметр не сбрасывается для повторного запуска.

Вы можете сделать кнопку, которая выводит количество выбранных объектов и убедиться, что это работает не один раз.
 
Последнее редактирование:
Заинтересовал ваш плагин ai_exp_jpg. Подскажите, пожалуйста, как его инсталировать в Илюстратор?
У меня все панели работают в режиме разработчика, потому что я их разработчик 😆
1. Кидаете папку расширения с гитхаба в зависимости от системы по какому-то из путей, как тут объясняется.
У меня на Win 11 все тут лежит C:\Users\<username>\AppData\Roaming\Adobe\CEP\extensions
(на самом деле я все кидаю в папку git на диске C , а на C:\Users\<username>\AppData\Roaming\Adobe\CEP\extensions лежит символьная ссылка на git, так вроде удобнее работать с гитом)
2. В реестре в ветке HKEY_CURRENT_USER\Software\Adobe
- создаете разделы от CSXS.4 до CSXS.11 - для каждой версии иллюстратора свой номер, я не помню, для какой версии какой номер, может можно найти соответствия на https://github.com/Adobe-CEP/CEP-Resources;
- в разделе надо создать строковый параметр PlayerDebugMode со значением 1.
Перезагрузить Иллюстратор и заработает. Только это не плагин, а панель расширения. Плагины пишут на C++. А тут у нас попроще - html/css/js (+jsx) 😆
 
Последнее редактирование:
  • Спасибо
Реакции: siv05
Ну я вам дал пособие по быстрой компиляции докера. Дайте код скрипта (jsx), который выполняется всего один раз — я проверю.
От панели это не зависит. Я памятку для себя написал )). И все не соберусь написать, какие нюансы при VScode. Но напишу )). Думаю, что какой-то параметр не сбрасывается для повторного запуска.

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

JavaScript:
var doc = app.activeDocument;

var rect = doc.pathItems.rectangle(200,200,100,100);

var textFrame = doc.textFrames.add();
textFrame.contents = "Hello, Adobe Illustrator!";
textFrame.position = [100,500];
 
ну скрипт вообще простой, я ж покиа тестирую что и как и по мере прогреса буду добавлять функционал

JavaScript:
var doc = app.activeDocument;

var rect = doc.pathItems.rectangle(200,200,100,100);

var textFrame = doc.textFrames.add();
textFrame.contents = "Hello, Adobe Illustrator!";
textFrame.position = [100,500];
Ну все работает, сколько не нажимай раз. Может вы событие на кнопку не поставили?:
1741574967181.png

В html:
Код:
<div class='refreshbutt'><button  id='tester' >Test</button></div>
В js:

Код:
var tester = document.querySelector("#tester");
tester.addEventListener("click", testPanel);

function testPanel() {     
     csInterface.evalScript('sayHello()');
    }
в jsx:

Код:
function sayHello(){
    
var doc = app.activeDocument;

var rect = doc.pathItems.rectangle(200,200,100,100);
var textFrame = doc.textFrames.add();
textFrame.contents = "Hello, Adobe Illustrator!";
textFrame.position = [100,500];


}
 
  • Спасибо
Реакции: Dmitri_J и Oleg Butrin
Ну все работает, сколько не нажимай раз. Может вы событие на кнопку не поставили?:
Посмотреть вложение 171632
В html:
Код:
<div class='refreshbutt'><button  id='tester' >Test</button></div>
В js:

Код:
var tester = document.querySelector("#tester");
tester.addEventListener("click", testPanel);

function testPanel() {    
     csInterface.evalScript('sayHello()');
    }
в jsx:

Код:
function sayHello(){
   
var doc = app.activeDocument;

var rect = doc.pathItems.rectangle(200,200,100,100);
var textFrame = doc.textFrames.add();
textFrame.contents = "Hello, Adobe Illustrator!";
textFrame.position = [100,500];


}
Благодарю !
Действительно, обернул скрипт в функцию и всё заработало как и ожидал.
Вот только теперь еще один вопрос если я хочу подключить 2 и более своих скриптов ? Нужно добавить все файлы jsx в соответствующую папку и прописать в manifest ?
JavaScript:
                <Resources>
                    <MainPath>./index.html</MainPath>
                    <ScriptPath>./jsx/script1.jsx</ScriptPath>
                    <ScriptPath>./jsx/script2.jsx</ScriptPath>
                    <ScriptPath>./jsx/script3.jsx</ScriptPath>
                </Resources>
или всё же должен быть только один main.jsx и туда добавлять все свои скрипты предварительно обернув в функции ?
и как реализоать например связь с серером или бд ? (не конкретно реализация а связь с панелью или куда и как прописать и подключить)
 
если я хочу подключить 2 и более своих скриптов
Достаточно это сделать в main.js (обработчик index.html)
JavaScript:
evalFile ("script1.jsx");
evalFile ("script2.jsx");
evalFile ("script3.jsx");
function evalFile (fileName) {
    var extensionPath = csInterface.getSystemPath (SystemPath.EXTENSION) + "/jsx/";
    csInterface.evalScript ('$.evalFile("' + extensionPath + fileName + '")');
}
конечно что б сам код скрипта был на сервере а не на компе в файлах плагина.
Скрипты jsx загружаются вместе с иллюстратором, без перезапуска программы их изменение никак не сказываются на работе расширения.
Единственный способ защиты это применение jsxbin, но это тоже условность.

Если
загружать скрипты которые будут работать только в панели, так себе защита.
 
Связь с сервером можно осуществить через запросы из самого Js (в jsx лезть не надо -- туда только результат запроса ).
Для этого подключите в html библиотеку для запросов, вы можете подключить jquery даже, если вам удобно писать с ним.

По первому вопросу.
Допустим, у вас файлы jsx лежат в подпапке host.
Главный main -- его только подключаете в ресурсах.
дополнительный файл func2.jsx
В main подгружаете свой дополнительный:
Код:
(function main () {

var csInterface = new CSInterface();

function loadJSX (fileName) {
    var extensionRoot = csInterface.getSystemPath (SystemPath.EXTENSION) + "/host/";
    csInterface.evalScript ('$.evalFile("' + extensionRoot + fileName + '")');
  }

  loadJSX ("func2.jsx");
 
function testPanel() {
     csInterface.evalScript('func22()');
    }

    } ());

Ну а функция func22 находится в файле host/func2.jsx

Но подгрузка, сразу скажу, глючит время от время при отладке. Выражается это в том, что при выгрузке экстеншена, и повторной его загрузке может ничего не подгрузиться. Тогда придется Иллюстратор перезапускать.
Но потом все будет работать нормально. Поэтому я обычно в конце разработки разделял на файлы функционал.
 
  • Огонь
Реакции: Dmitri_J
Связь с сервером можно осуществить через запросы из самого Js (в jsx лезть не надо -- туда только результат запроса ).
Для этого подключите в html библиотеку для запросов, вы можете подключить jquery даже, если вам удобно писать с ним.

По первому вопросу.
Допустим, у вас файлы jsx лежат в подпапке host.
Главный main -- его только подключаете в ресурсах.
дополнительный файл func2.jsx
В main подгружаете свой дополнительный:
Код:
(function main () {

var csInterface = new CSInterface();

function loadJSX (fileName) {
    var extensionRoot = csInterface.getSystemPath (SystemPath.EXTENSION) + "/host/";
    csInterface.evalScript ('$.evalFile("' + extensionRoot + fileName + '")');
  }

  loadJSX ("func2.jsx");
 
function testPanel() {
     csInterface.evalScript('func22()');
    }

    } ());

Ну а функция func22 находится в файле host/func2.jsx

Но подгрузка, сразу скажу, глючит время от время при отладке. Выражается это в том, что при выгрузке экстеншена, и повторной его загрузке может ничего не подгрузиться. Тогда придется Иллюстратор перезапускать.
Но потом все будет работать нормально. Поэтому я обычно в конце разработки разделял на файлы функционал.
То есть всё же лучше разбивать на разные файлы jsx ?
потому что я уже думаю чего и как запихивать в один файл и как лучше оформить для более простой читабельности, просто тут второй вопрос не будет ли лагать если запихать в один файл 10 скриптов а там некоторые строк по 700 а може и больше