批量导出符号到SVG-Illustrator

Batch Export Symbols to SVG - Illustrator

本文关键字:SVG-Illustrator 符号      更新时间:2023-09-26

问题:

我创建了一个脚本,它遍历Illustrator文档中的所有符号,并将它们导出为PNG。

我也需要它来为SVG工作,但是,它并不像更改文件类型那么简单。

由于Illustrator的默认行为是将最近保存的svg设置为app.activeDocument,因此for循环为每个符号嵌套新的目录。

例如

exports/
  symbol01.svg
  exports/
    symbol02.svg
      exports/
        symbol03.svg
        etc..

我很确定问题出在//create directory//choose directory之间,但我一辈子都搞不清楚。

var doc = app.activeDocument;
var symbolCount = doc.symbols.length;
if (symbolCount >= 1) {
   if (confirm("Are all your layers hidden?")) {
      // create temp layer
      doc.layers.add();
      for (var i = 0; i < doc.symbols.length; i++) {
         // place a symbol instance - temp
         var s = doc.symbolItems.add(doc.symbols[i]);
         // create directory 
         var dest = new Folder(doc.path + "/exports"); 
         if (!dest.exists) dest.create();
         // choose directory
         dest.changePath(doc.symbols[i].name);
         // export symbols
         saveSVG(dest);
         // delete temp symbol instance
         s.remove();
      }
      // remove temp layer
      doc.layers[0].remove();
   }
   function saveSVG(file) {
      // save options
      var type = ExportType.SVG;
      var options = new ExportOptionsSVG();
      // export
      doc.exportFile(file, type, options);
   }
} else {
   alert("You don't have any symbols in this document");
}

有一种存储初始app.activeDocument的方法可能会解决这个问题,但我不知道如何做到这一点。。如果这是最好的方式?

奖金:

这个脚本的另一个问题是艺术板没有根据符号调整大小,所以我找到了一个函数fitArtboardToSelectedArt(),我尝试实现了它,但没有成功。。有人能解释它应该如何工作吗?

PS。以下是Illustrator脚本文档的链接:http://adobe.ly/1JxLlUK

想好了:(

如果您需要使用以下脚本,请随意使用。

/*
 * Export Symbols as SVGs - Illustrator
 * --------------------------------------
 * Created By Shane Parsons - 30PT Design Inc.
 * http://30ptdesign.com/
 */
var doc = app.activeDocument;
var symbolCount = doc.symbols.length;
if (symbolCount >= 1) {
    if (confirm("Are all your layers hidden?")) {
        // choose directory
        var dest = Folder(doc.path).selectDlg();
        // folder chosen
        if (dest) {
            // create temp layer
            doc.layers.add();
            // create temp artboard
            doc.artboards.add(doc.artboards[0].artboardRect);
            // get temp artboard
            var tempAB = doc.artboards.getActiveArtboardIndex();
            // loop through symbols
            for (var i = 0; i < doc.symbols.length; i++) {
                // place a symbol instance - temp
                var symbol = doc.symbolItems.add(doc.symbols[i]);
                // resize artboard
                doc.artboards[tempAB].artboardRect = doc.visibleBounds;
                app.redraw();
                // choose directory
                var filename = doc.symbols[i].name;
                // export symbols
                saveSVG(dest, filename);
                // delete temp symbol instance
                symbol.remove();
            }
            // remove temp layer
            doc.layers[0].remove();
            // remove temp artboard
            doc.artboards[tempAB].remove();
        }
    }
    function saveSVG(dest, filename) {
        // save options
        var type = ExportType.SVG;
        var options = new ExportOptionsSVG();
        // file
        var file = new File(dest + "/" + filename);
        // export
        doc.exportFile(file, type, options);
    }
} else {
    alert("You don't have any symbols in this document");
}