【问题标题】:How to load a symbol library in Illustrator using javascript?如何使用 javascript 在 Illustrator 中加载符号库?
【发布时间】:2016-02-04 11:16:17
【问题描述】:

通过代码,我正在尝试将符号库从参考 Illustrator 文件加载到另一个文件。 我想做与在 UI 中单击“其他库”时相同的加载,然后您必须选择一个 Ai 文件以获取其所有符号。

有人知道怎么做吗?有没有简单的方法或者我应该一个接一个地复制符号?

我尝试加载另一个文档,然后将每个符号复制到第一个文档:

var loadSymbolLibrary = function(fromAiFile) {
    var thisDocument = activeDocument;
    app.open(fromAiFile);
    var fromAiDocument = activeDocument;

    var symbols = fromAiDocument.symbols;
    for(var i = 0; i < symbols.length; i++) {
        var symbol = symbols[i];
        thisDocument.symbols.add(symbol);
    }

    fromAiDocument.close();
    activeDocument = thisDocument;
}

但在第一个文档中添加符号时出现错误。 根据 Adob​​e 文档,我需要一个 PageItem 和一个 SymbolRegistrationPoint 来使用 add() 函数创建符号。

[编辑]

我也试过用这种方式加载包含符号的文档:

    var openOptions = new OpenOptions();
openOptions.openAs = LibraryType.SYMBOLS;
var symbolDocument = app.open(symbolAiFile, null, openOptions);

这会在 Illustrator 中打开一个符号窗口,但我不知道如何通过代码处理它,因为调用 symbolDocument.symbols 会产生“文档不再打开”错误。

【问题讨论】:

    标签: javascript adobe-illustrator extendscript


    【解决方案1】:

    首先,为了清楚起见,知道 SymbolItemSymbol 的放置实例并且 Document 两者都有这将很有用其中。

    如果传递的符号不在该文档的符号列表中,Illustrator 将不允许调用 Document.symbolItems.add()。就个人而言,我认为这是一个错误。这是一个包装类,它将符号库作为新文档打开(注意排除相关的 openAs 属性),将符号放入该文档,然后将符号项复制到另一个文档。

    #target illustrator-18
    
    
    //class
    function SymbolLibrary(){
    
        this.symbolsDoc = null;
        this.len = 0;
    
        this.begin = function(symbolFileName){
            var file1 = File(symbolFileName);
            //open the symbol library
            var optRef = new OpenOptions();
            //optRef.openAs = LibraryType.SYMBOLS; //broken. just open as regular doc
            this.symbolsDoc = app.open( file1 , null , optRef);
            this.len = this.symbolsDoc.symbols.length;
            return this.symbolsDoc;
        }
    
        this.list = function(){
            for(var i=0;i<symbolsDoc.symbols.length;i++){
                $.writeln( symbolsDoc.symbols[i] );
            }
            return symbolsDoc.symbols;
        }
    
        this.place = function(targetDoc,index){
            var symbolItem = this.symbolsDoc.symbolItems.add(this.symbolsDoc.symbols[index]);
            finalItem = symbolItem.duplicate( targetDoc,ElementPlacement.PLACEATEND );
            symbolItem.remove();
            return finalItem;
        }
    
        this.end = function(){
        this.symbolsDoc.close(SaveOptions.DONOTSAVECHANGES);
        }
    }
    
    var filename =  "/Applications/Adobe\ Illustrator\ CC\ 2014/"+
        "Presets.localized/en_US/Symbols/Nature.ai";
    
    
    //create new document
    var mydoc = app.documents.addDocument('',new DocumentPreset());
    
    //instantiate the symbol library handler class
    var lib1 = new SymbolLibrary();
    
    lib1.begin(filename);
    for(var i=0;i<lib1.len;i++){
        lib1.place(mydoc,i).position = [((i%10)*100),i*10];
    }
    lib1.end();
    
    $.writeln('#########');
    

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2023-03-29
      • 1970-01-01
      • 2018-12-01
      相关资源
      最近更新 更多