如何使用 javascript 在 Illustrator 中加载符号库?
How to load a symbol library in Illustrator using javascript?
通过代码,我正在尝试将符号库从一个参考 Illustrator 文件加载到另一个。
我想做同样的加载,当你在 UI 中点击 'Other Library' 然后你必须选择一个 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;
}
但是我在向第一个文档添加符号时出现错误。
根据 Adobe 文档,我需要一个 PageItem
和一个 SymbolRegistrationPoint
来创建一个具有 add()
函数的符号。
[编辑]
我也试过这样加载包含符号的文档:
var openOptions = new OpenOptions();
openOptions.openAs = LibraryType.SYMBOLS;
var symbolDocument = app.open(symbolAiFile, null, openOptions);
这会在 Illustrator 中打开一个符号 window,但我不知道如何通过代码处理它,因为调用 symbolDocument.symbols
会产生 'The document is no longer open' 错误。
首先,清楚地知道 SymbolItem 是 Symbol 和 Document 有这两个。
如果传递的符号不在该文档的符号列表中,Illustrator 将不允许调用 Document.symbolItems.add()
。就个人而言,我认为这是一个错误。这是一个包装器 class,它将符号库作为新文档打开(注意排除相关的 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('#########');
通过代码,我正在尝试将符号库从一个参考 Illustrator 文件加载到另一个。 我想做同样的加载,当你在 UI 中点击 'Other Library' 然后你必须选择一个 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;
}
但是我在向第一个文档添加符号时出现错误。
根据 Adobe 文档,我需要一个 PageItem
和一个 SymbolRegistrationPoint
来创建一个具有 add()
函数的符号。
[编辑]
我也试过这样加载包含符号的文档:
var openOptions = new OpenOptions();
openOptions.openAs = LibraryType.SYMBOLS;
var symbolDocument = app.open(symbolAiFile, null, openOptions);
这会在 Illustrator 中打开一个符号 window,但我不知道如何通过代码处理它,因为调用 symbolDocument.symbols
会产生 'The document is no longer open' 错误。
首先,清楚地知道 SymbolItem 是 Symbol 和 Document 有这两个。
如果传递的符号不在该文档的符号列表中,Illustrator 将不允许调用 Document.symbolItems.add()
。就个人而言,我认为这是一个错误。这是一个包装器 class,它将符号库作为新文档打开(注意排除相关的 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('#########');