0

我被要求为 Adob​​e Illustrator CS 创建一个小脚本,它会自动将项目导出为带有特定选项的 eps。

不管怎样,我整个早上都在研究它,结果发现了一堵砖墙。在 adobe 的脚本参考中,我发现了这些方法:EPSSaveOptions 或 ExportOptionsFlash、ExportOptionsGIF 等。没有导出 EPS 的方法?注意:保存eps不好,必须导出。

所以我的问题是,我是否遗漏了一些东西,并且有一个更全面的方法列表我找不到,或者是通过从头开始编写所有代码来完成此任务的唯一方法?后者我真的做不到,因为我是设计师而不是程序员。

提前感谢您的回答。

PS脚本语言无关紧要,我只是更多地研究了VBS,但如果这可以用javascript完成,我会很乐意用js来完成。

4

3 回答 3

1

类似的脚本已经存在

如果你想看看它是如何工作的,你可以看看那里的源代码。

于 2013-05-14T11:02:13.247 回答
0

您好,我无法完全回答您的问题。但是我来这里是因为我需要批量导出 wmf 文件到 eps。我在adobe 论坛上找到了一个将 wmf 转换为 ai的脚本。结合您使用 eps 对象 EPSSaveOptions 的想法,我想出了这个工作脚本(适用于 illustrator CC 2015)。

我希望这对看到这篇文章的其他人有所帮助。

// script.name = makeAiFilesPDFcompatible.jsx;
// script.description = opens and resaves Ai files with PDF compatibility checked (Folder Batch);
// script.requirements = none
// script.parent = CarlosCanto // 06/4/2013;
// script.elegant = false;
// script.forumPost = http://forums.adobe.com/thread/1224874?tstart=0

var folder = Folder.selectDialog("Select Source Folder..."); // select folder

if (folder==null) {
                    alert("Good Bye");
}

else {

    var files = find_files (folder, ['.wmf']);

          var fileCount = files.length; // count them





          if (fileCount>0) {

                    for (i=0; i<fileCount; i++) {

            var idoc = app.open(files[i]);

            var saveOpts = new EPSSaveOptions();

            saveOpts.pdfCompatible = true;

            idoc.saveAs( files[i], saveOpts );

            idoc.close();

                    }

        alert(fileCount + ' file(s) processed');

          }

          else {

                    alert("There are no Illustrator files in this folder.");

          }

}



// recurse subfolders - Peter Kharel

function find_files (dir, mask_array){

    var arr = [];

    for (var i = 0; i < mask_array.length; i++){

        arr = arr.concat (find_files_sub (dir, [], mask_array[i].toUpperCase()));

    }

    return arr;

}



function find_files_sub (dir, array, mask){

    var f = Folder (dir).getFiles ( '*.*' );

    for (var i = 0; i < f.length; i++){

        if (f[i] instanceof Folder){

            find_files_sub (f[i], array, mask);

        } else if (f[i].name.substr (-mask.length).toUpperCase() == mask){

            array.push (f[i]);

        }

    }

    return array;

}
于 2015-11-23T18:03:58.463 回答
0

这个将每一层导出到带有选项的 eps。隔离函数 saveEPS ,我想这就是你需要的。

var doc = app.activeDocument;
var docname = (doc.name.split('.'))[0]; // name
var doc_artboard = doc.artboards[0].artboardRect;

if (app.documents.length > 1) {
        alert( "Nur ein Dokument darf geöffnet sein. Schließen Sie andere Dokumente und führen Sie das Script erneut aus.");
} else {

    var ok = confirm( "Bitte speichern Sie zuerst Ihr Original.\nDie Ebenen werden im gleichen Ordner wie Ihre Datei gespeichert.\nWeiter?" );

    if (ok) {

        // prepare layers
        for(var i=0; i<doc.layers.length; i++) {
            doc.layers[i].visible = false;
        }

        // go through each layers
        for(var i=0; i<doc.layers.length; i++) {
            app.activeDocument = doc;

            if (i>0) doc.layers[i-1].visible = false;
            doc.layers[i].visible = true;
            doc.activeLayer = doc.layers[i];

            saveEPS( doc.path, doc.activeLayer.name, i );
        }

        // close original file without saving
        doc.close( SaveOptions.DONOTSAVECHANGES );

    }

}

function saveEPS( path, name, id ) {

    var currlayer = doc.layers[id]; 
    var g = currlayer.groupItems.add();
    group( g, currlayer.pageItems );    

    var t = g.top;
    var l = g.left;

    var w = doc.width;
    var h = doc.height;

    /*
    var w = 31.1*2.834645;
    var h = 28.15*2.834645;
    */

    var myPreset = new DocumentPreset;
    myPreset.width = w;
    myPreset.height = h;
    myPreset.units = RulerUnits.Millimeters;
    myPreset.title = docname;
    var newdoc = documents.addDocument( "Druck", myPreset);
    /*
    var newdoc = app.documents.add ( doc.documentColorSpace, doc.width, doc.height, 1,
    DocumentArtboardLayout.Row, 72); 
    */
    newdoc.artboards[0].artboardRect = doc_artboard;
    var newlayer = newdoc.layers[0];

    g.duplicate( newlayer, ElementPlacement.PLACEATBEGINNING );
    newlayer.pageItems[0].top = t;
    newlayer.pageItems[0].left = l;

    path.changePath( name+".eps" );

    var saveOpts = new EPSSaveOptions();
    saveOpts.compatibility = Compatibility.ILLUSTRATOR16;
    saveOpts.embedLinkedFiles = true;
    saveOpts.includeDocumentThumbnails = true;
    saveOpts.embedAllFonts = true;
    saveOpts.saveMultipleArtboards = false;
    saveOpts.cmykPostScript = true;
    saveOpts.preview = EPSPreview.TRANSPARENTCOLORTIFF; 

    newdoc.saveAs( path, saveOpts );
    newdoc.close( SaveOptions.DONOTSAVECHANGES );   

    // wait for the new file to save and close before continue.
    // A callback function (if possible) will be better than a while loop for sure.
    while (app.documents.length > 1) {
        continue;
    }
}

function group( gg, items ) {

    var newItem;
    for(var i=items.length-1; i>=0; i--) {

        if (items[i]!=gg) { 
            newItem = items[i].move (gg, ElementPlacement.PLACEATBEGINNING);
        }
    }
    return newItem;
}
于 2017-05-19T17:00:05.793 回答