[AI CC2022] Скрипт экспорта нескольких документов в PDF

alexadesigns

Топикстартер
12 лет на форуме
Сообщения
144
Реакции
16
Всем желаю здравствовать!
Есть классный скрипт для экспорта в ПДФ с заданным пресетом.
Например, классическая ситуация по работе: сделано 15-20 упаковок, надо все вывести в ПДФ для превью. А потом, опять же, правки... Вручную — это ппц, сами понимаете.
Этот скрипт работает так: открываешь все файлы, запускаешь скрипт, указываешь куда выводить, указываешь номер пресета, он все открытые файлы выводит в указанную папку и все их закрывает. Просто супер в таких ситуациях. Проблема в том, что когда появляется диалоговое окно выбора пресетов, то видны только несколько первых.
Кто-нибудь может допилить его, чтобы диалоговое окно разворачивалось на всю высоту списка пресетов, или чтобы была полоса прокрутки?
Screenshot_49.png


JavaScript:
if (app.documents.length>0){
   
var FolderRef = new Folder();
var folderResult=false;
 
try {
     FolderRef = FolderRef.selectDlg("Folder to save your PDF");
if (FolderRef!=null){folderResult=true;}
} catch (e) {
     alert("! Error on selecting folder:\n"+e+" !");
     folderResult=false;
}
var list=app.PDFPresetsList;
var Plist='';
for (var i in list){Plist+="\n"+i+" : "+list[i]}
var pIndex=prompt ('Choice your PDF preset by number'+Plist,12);
 
for (i=app.documents.length;i>0;i--){
     var PDF = new PDFSaveOptions();
     PDF.pDFPreset =list[pIndex];
     var saveName = new File (FolderRef+"/"+documents[0].name);
     documents[0].saveAs(saveName,PDF);
     documents[0].close();
     }
alert ("Done!");
}
Screenshot_49.png
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Уберите "\n" будет в одну строку и больше влезет
 

imma

15 лет на форуме
Сообщения
3 089
Реакции
2 185
может просто удалить лишние пресеты
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Нарисуйте нормальный диалог выбора пресета и не мучьте пользователя.
 
  • Спасибо
Реакции: ~RA~ и Gad

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Тогда придется диалоговое окно мутить с dropdown :(
 

alexadesigns

Топикстартер
12 лет на форуме
Сообщения
144
Реакции
16
может просто удалить лишние пресеты
Кастомные пресеты используются постоянно, а системные не даёт удалить. Да и зачем?
Может можно как-то выпадающее меню для выбора пресета сделать?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Кастомные пресеты используются постоянно, а системные не даёт удалить. Да и зачем?
Может можно как-то выпадающее меню для выбора пресета сделать?
Можно
Тогда придется диалоговое окно мутить с dropdown :(
Нарисуйте нормальный диалог выбора пресета и не мучьте пользователя.
 

Gad

Сообщения
2 975
Реакции
1 408

Не по теме:

нормальный диалог выбора пресета
Спасибо :) Всегда так лень UI в скриптах делать :)


Немного потыкал по сайту :
JavaScript:
#target Illustrator
if (app.documents.length>0){
var list = app.PDFPresetsList;
// WINDOW
var dialog = new Window("dialog");
    dialog.text = "Dialog";
    dialog.preferredSize.width = 200;
    dialog.orientation = "column";
    dialog.alignChildren = ["center","top"];
    dialog.spacing = 10;
    dialog.margins = 16;
// GROUP1
// ======
var group1 = dialog.add("group", undefined, {name: "group1"});
    group1.orientation = "row";
    group1.alignChildren = ["left","center"];
    group1.spacing = 10;
    group1.margins = 0;

var edittext1 = group1.add('edittext {properties: {name: "edittext1"}}');
    edittext1.text = "Path to save folder";
    edittext1.preferredSize.width = 200;
var button1 = group1.add("button", undefined, undefined, {name: "button1"});
    button1.text = "Folder";
    button1.preferredSize.width = 45;
    button1.onClick = function() {
        var FolderSelectDlg = new Folder();
        FolderSelectDlg = FolderSelectDlg.selectDlg("Specify the folder to save your PDF");
        edittext1.text = FolderSelectDlg
    }
// DIALOG
// ======
var dropdown1_array = ["list"];
var dropdown1 = dialog.add("dropdownlist", undefined, undefined, {name: "PDF Presets List", items: list});
    dropdown1.selection = 0;
    dropdown1.preferredSize.width = 250;
var button2 = dialog.add("button", undefined, undefined, {name: "button2"});
    button2.text = "Save";
    button2.onClick = function() {
        for (i=app.documents.length;i>0;i--){
            var PDF = new PDFSaveOptions();
            PDF.pDFPreset = dropdown1.selection;
            var SaveFolder = new Folder();
            SaveFolder = Folder(edittext1.text)
            if (SaveFolder.exists) {var saveName = new File (SaveFolder+"/"+documents[0].name);} else { alert ("The target directory is not specified or does not exist.")}
            documents[0].saveAs(saveName, PDF);
            documents[0].close();
        }
        dialog.close();
    }
dialog.show();
}
 
Последнее редактирование:
  • Спасибо
Реакции: Slx1

alexadesigns

Топикстартер
12 лет на форуме
Сообщения
144
Реакции
16

Не по теме:


Спасибо :) Всегда так лень UI в скриптах делать :)


Немного потыкал по сайту :
JavaScript:
#target Illustrator
if (app.documents.length>0){
var list = app.PDFPresetsList;
// WINDOW
var dialog = new Window("dialog");
    dialog.text = "Dialog";
    dialog.preferredSize.width = 200;
    dialog.orientation = "column";
    dialog.alignChildren = ["center","top"];
    dialog.spacing = 10;
    dialog.margins = 16;
// GROUP1
// ======
var group1 = dialog.add("group", undefined, {name: "group1"});
    group1.orientation = "row";
    group1.alignChildren = ["left","center"];
    group1.spacing = 10;
    group1.margins = 0;

var edittext1 = group1.add('edittext {properties: {name: "edittext1"}}');
    edittext1.text = "Path to save folder";
    edittext1.preferredSize.width = 200;
var button1 = group1.add("button", undefined, undefined, {name: "button1"});
    button1.text = "Folder";
    button1.preferredSize.width = 45;
    button1.onClick = function() {
        var FolderSelectDlg = new Folder();
        FolderSelectDlg = FolderSelectDlg.selectDlg("Specify the folder to save your PDF");
        edittext1.text = FolderSelectDlg
    }
// DIALOG
// ======
var dropdown1_array = ["list"];
var dropdown1 = dialog.add("dropdownlist", undefined, undefined, {name: "PDF Presets List", items: list});
    dropdown1.selection = 0;
    dropdown1.preferredSize.width = 250;
var button2 = dialog.add("button", undefined, undefined, {name: "button2"});
    button2.text = "Save";
    button2.onClick = function() {
        for (i=app.documents.length;i>0;i--){
            var PDF = new PDFSaveOptions();
            PDF.pDFPreset = dropdown1.selection;
            var SaveFolder = new Folder();
            SaveFolder = Folder(edittext1.text)
            if (SaveFolder.exists) {var saveName = new File (SaveFolder+"/"+documents[0].name);} else { alert ("The target directory is not specified or does not exist.")}
            documents[0].saveAs(saveName, PDF);
            documents[0].close();
        }
        dialog.close();
    }
dialog.show();
}
Урррра! Спасибо Вам огромное!
Даже лучше, чем я представлял! :)
 

Slx1

15 лет на форуме
Сообщения
944
Реакции
106
Коллеги, можно это скрипт упростить чтобы просто записывал копию текущего открытого в AI документа в ту же папку с фиксированным Прессетом, без диалогов? (в идеале с нужным суффиксом) ?
Чтобы одной кнопкой ***_preview.pdf или ***_print.pdf
 
Последнее редактирование:

Drawer

Участник
Сообщения
1 795
Реакции
793
упростить чтобы просто записывал копию
Не сказал бы что это упрощает задачу :) Ибо через скрипт копию сохранить не выйдет, но можно через двойное сохранение, что не кошерно и на больших файлах будет заметно... тем не менее:

JavaScript:
#target Illustrator
if (app.documents.length > 0 ) {
    var doc = app.activeDocument;
    try { doc.save();
        docPath = doc.fullName;
        docFolder = docPath.path;
        var PDF = new PDFSaveOptions();
        PDF.pDFPreset = "PresetName";
        SaveFolder = Folder(docFolder);
        var FileNameExt = doc.name.toString();
        var FileName = FileNameExt.substring(0, (FileNameExt.lastIndexOf(".")));
        if (SaveFolder.exists) {var saveName = new File (SaveFolder+"/"+FileName+"_preview.pdf");} else { alert ("The target directory is not specified or does not exist.")};
            doc.saveAs(saveName, PDF);
            doc.saveAs(docPath);
    } catch (e) { alert ("The document was not saved after creation, save it and try again.")};
};
 

Slx1

15 лет на форуме
Сообщения
944
Реакции
106
Супер, спасибо!

Save a Copy... нет в скриптинге?

Пробовал что то подобное через Экшен записать (без суфиксов конечно), но AI зараза запоминает и папку и имя! ))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Save a Copy... нет в скриптинге?
Уже тут обсуждали этот вопрос.
Ленивые и необязательные индусы сперва начали это делать, но не доделали и так и забросили на много лет и версий.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Супер, спасибо!

Save a Copy... нет в скриптинге?

Пробовал что то подобное через Экшен записать (без суфиксов конечно), но AI зараза запоминает и папку и имя! ))
Для этого есть костыль с редактируемым экшеном.
 
  • Спасибо
Реакции: Slx1 и Drawer

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213

Не по теме:
Привет, куда пропал? Вчера мимо твоего хутора проезжал, костылем тебе помахал... ;)

Не по теме:
Будете еще проезжать мимо - проезжайте мимо :)
Я вчера как раз по городу ездил и ругался - три из пяти автомашин в пробках - не местные регионы.
Я не пропал, а перешел на 8-часовой рабочий день, переквалифицировался в пограммисты окончательно, но не бесповоротно.

 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844

Не по теме:
Будете еще проезжать мимо - проезжайте мимо :)
Я вчера как раз по городу ездил и ругался - три из пяти автомашин в пробках - не местные регионы.
Я не пропал, а перешел на 8-часовой рабочий день, переквалифицировался в пограммисты окончательно, но не бесповоротно.


Не по теме:
Ну трудись, а я за тебя на анапском пляже полежу '))'

 

Drawer

Участник
Сообщения
1 795
Реакции
793
костыль с редактируемым экшеном
JavaScript:
#target Illustrator
if (app.documents.length > 0 ) {
    var doc = app.activeDocument;
    savePDFaCopy("presetName", "postFix");
};

//Functions++++++++++++++++++++++++++++++++++++++++
function savePDFaCopy(pSet, postFix) {
    var plist = app.PDFPresetsList;
    var pIndex = "0";
    for ( var i =0; i < plist.length; i++ ){
        if (plist[i] == pSet) {pIndex = (i+3).toString()};
    };
    docPath = doc.fullName;
    docFolder = docPath.path;
    if (doc.fullName.exists) {
        if (!doc.saved) {doc.save()};
        var saveFolder = Folder(docFolder);
        var FileNameExt = doc.name.toString();
        var FileName = FileNameExt.substring(0, (FileNameExt.lastIndexOf(".")));
        if (saveFolder.exists) {var saveName = new File (saveFolder+"/"+FileName+postFix+".pdf");
            saveName = decodeURI(saveName.fsName);
//beginning Action Set==========================================
var ActionString = [ '/version 3',
'/name [ 9',
'    536372697074536574',
']',
'/isOpen 1',
'/actionCount 1',
'/action-1 {',
'    /name [ 12',
'        536372697074416374696f6e',
'    ]',
'    /keyIndex 0',
'    /colorIndex 0',
'    /isOpen 1',
'    /eventCount 1',
'    /event-1 {',
'        /useRulersIn1stQuadrant 0',
'        /internalName (adobe_saveACopyAs)',
'        /localizedName [ 11',
'            53617665204120436f7079',
'        ]',
'        /isOpen 0',
'        /isOn 1',
'        /hasDialog 1',
'        /showDialog 0',
'        /parameterCount 18',
'        /parameter-1 {',
'            /key 1869640814',
'            /showInPalette -1',
'            /type (integer)',
'            /value '+pIndex,
'        }',
'        /parameter-2 {',
'            /key 1987077222',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 0',
'        }',
'        /parameter-3 {',
'            /key 1970500209',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 0',
'        }',
'        /parameter-4 {',
'            /key 1970499699',
'            /showInPalette -1',
'            /type (ustring)',
'            /value [ 0',
'',
'            ]',
'        }',
'        /parameter-5 {',
'            /key 1836282481',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 0',
'        }',
'        /parameter-6 {',
'            /key 1836281971',
'            /showInPalette -1',
'            /type (ustring)',
'            /value [ 0',
'',
'            ]',
'        }',
'        /parameter-7 {',
'            /key 1886220402',
'            /showInPalette -1',
'            /type (enumerated)',
'            /name [ 16',
'                5072696e74696e6720416c6c6f776564',
'            ]',
'            /value 3',
'        }',
'        /parameter-8 {',
'            /key 1886217064',
'            /showInPalette -1',
'            /type (enumerated)',
'            /name [ 15',
'                4368616e67657320416c6c6f776564',
'            ]',
'            /value 5',
'        }',
'        /parameter-9 {',
'            /key 1700946800',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 1',
'        }',
'        /parameter-10 {',
'            /key 1700946275',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 1',
'        }',
'        /parameter-11 {',
'            /key 1700946785',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 1',
'        }',
'        /parameter-12 {',
'            /key 1700950132',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 0',
'        }',
'        /parameter-13 {',
'            /key 1851878757',
'            /showInPalette -1',
'            /type (ustring)',
'            /value [ '+toHex(saveName).length/2,
                toHex(saveName),
'            ]',
'        }',
'        /parameter-14 {',
'            /key 1718775156',
'            /showInPalette -1',
'            /type (ustring)',
'            /value [ 15',
'                5044462046696c6520466f726d6174',
'            ]',
'        }',
'        /parameter-15 {',
'            /key 1702392942',
'            /showInPalette -1',
'            /type (ustring)',
'            /value [ 3',
'                706466',
'            ]',
'        }',
'        /parameter-16 {',
'            /key 1936548194',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 1',
'        }',
'        /parameter-17 {',
'            /key 1935764588',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 1',
'        }',
'        /parameter-18 {',
'            /key 1936875886',
'            /showInPalette -1',
'            /type (ustring)',
'            /value [ 0',
'',
'            ]',
'        }',
'    }',
'}'].join('\n');
//end Action Set================================================
            var f = new File('~/ScriptSet.aia');
            f.open('w');
            f.write(ActionString);
            f.close();
            loadAction (f);
            f.remove();
            ActionString = null;
            app.doScript("ScriptAction", "ScriptSet");
            unloadAction("ScriptSet", "");
        } else { alert ("The target directory is not specified or does not exist.")};
    } else { alert ("The document was not saved after creation, save it and try again.")};
};

function toHex(string) {
    var string = unescape(encodeURIComponent(string));
    var h = "";
    for (var i = 0; i < string.length; i++) {
        h += string.charCodeAt(i).toString(16)
    };
    return h;
};
Функции savePDFaCopy передаются два параметра presetName и postFix
Если использовать не существующее имя пресета, то сохранит pdf с последним пресетом, который использовался. Файл должен быть сохранен после создания иначе неоткуда взять путь сохранения, в таком случае выдаст предупреждение и ничего не сделает.
По поводу
Если запускать гор. клавишей через макрос, работать не будет. Для этого нужно мудрить с запуском макроса сохранения через бридж. Вроде все...
 
  • Спасибо
Реакции: Slx1