Illustrator에서 JSX를 사용하여 여러 아티팩트 만들기
8739 단어 illustratorJSX
전치
Illustrator에서 여러 아티팩트를 제작했을 때의 비틀거리는 메모입니다.
개발 환경
했던 일
500장 가까운 같은 레이아웃의 아티팩트를 만들었습니다.
템플릿에 넣는 데이터는 CSV로 읽습니다.
절차
일러스트레이터로 템플릿 만들기
1. 템플릿을 만듭니다.
하나의 아티팩트에 들어갈 곳만 한 세트로 그룹화합니다.
2. 지원해 주는 illustroter 변수 의 기능을 사용합니다.
변수를 설정하면 아트보드의 변경 가능한 개체를 스크립트에서 변경할 수 있습니다.
변수의 설정은 「윈도우」>「변수」로 윈도우를 열어 설정합니다.
변수를 설정하려는 객체를 선택하고 빨간색 테두리 아이콘을 클릭하면 변수가 설정됩니다.
이런 느낌입니다.
이것으로 설정해 두면, 디폴트로 testForme에 넣은 문자를 이용해 텍스트의 재기록을 할 수 있습니다.
템플릿으로 로드할 데이터 만들기
엑셀로 작성한다.
엑셀의 인코딩 shift-jis에서는, 문자화해 버리는 경우는, xlsx로 작성해, UTF-18의 텍스트로 보존.
텍스트 편집기에서 열고 csv 파일과 동일한 쉼표로 구분된 데이터로 만듭니다.
이번에는 위와 같은 데이터 참조.
1행째의 타이틀은 textframe에 디폴트로 넣어 두는 문자와 레이아웃의 위치를 동일하게 해 두는 것.
JSX 쓰기
먼저 쓸 때 조금 버릇이 있습니다.
console.log()가 없습니다. 대신\$.write() 또는\$.writeln()을 사용합니다.
\$.write() 줄 바꿈 없는 콘솔 로그
\$.writeln() 개행이 있는 콘솔 로그
또한 가격 등 쉼표를 넣는 함수를 사용할 수 없었습니다.
toLocaleString();
그래서 자력으로 넣을 수밖에 없습니다.
사내의 우수한 엔지니어 씨에게 도와 주셨습니다.
커스터마이즈와 약간의 미세 조정으로 확실히 사용할 수 있어, 감사 감사.
이쪽의 기사, 참고가 되었습니다. 감사합니다.
숫자를 쉼표로 구분
(function() {
//CSVを読み込む関数を定義。
var CSVConverter = function() {
//csvの中身を一度格納しておく配列を作成
this.lines = [];
this.textGroups = [];
this.pathGroups = [];
this.textWords = null;
//現在開いているドキュメントを指定
this.variables = app.activeDocument.variables;
this.path = String(app.documents[0].fullName).replace(app.documents[0].name, "");
for (var i = 0, n = this.variables.length; i < n; i++) {
//開いているドキュメントの変数の数ぶん、一度、groupに格納
var group = this.variables[i].pageItems[0];
//文字の数が0でないのならば
//this.textGroupsにpush()
if (group.textFrames.length != 0) {
this.textGroups.push(group);
}
}
};
function add_comma(str){
$.writeln("add_comma----->" + str);
//空の箱を用意
var new_str = '';
//実際の数字の文字列を入れる
var old_str = str;
//文字数を数える
var len = old_str.length;
//3より大きい
//文字数が3で割り切れないかつ、3より多い場合は
if(len > 3){
//3ずつ足してゆく
for(cnt = 3 ; cnt < len ;cnt+=3) {
if(cnt < len + 3) {
//後ろから3っつ切り抜く
new_str = old_str.substr(-cnt,3) + new_str;
new_str = "," + new_str;
$.writeln("if(cnt < len + 3) new_str----->" + new_str);
}
}
//0,len%3 前から0番目で全ての文字数を3で割ったあまりの数の個数の数字を抽出。
var num = len%3;
new_str=old_str.substr(0,(3-num))+new_str;
$.writeln("if(cnt < len + 3) new_str22222----->" + new_str);
//3以下
}else{
//3以下はなにもしない
new_str = textFrame.contents;
};
$.writeln("function add_comma return new_str----->" + new_str);
return new_str;
}
CSVConverter.prototype = {
read: function() {
var path = File.openDialog("CSVファイルを選択してください。");
if (! path) {
return;
}
/*---------------------------------
Fileオブジェクト生成して、CSVを読み込みモードに設定
w:書き込みモード r:読み込みモード e:編集モード
---------------------------------*/
var csv = new File(path);
if (! csv.open("r", "", "")) {
return;
}
this.lines = [];
// CSVを読み込む。全ての内容をtextに格納
var text = csv.read();
/*---------------------------------
var LF = String.fromCharCode(10);
読み込んだ全ての文字列を改行コードで配列に変換
1行ずつの2次元配列
---------------------------------*/
var lines = text.split(String.fromCharCode(10));
$.writeln("lines" + lines);
//読み込んだ行数を数えてline配列に格納
for (var i = 0, n = lines.length; i < n; i++) {
var line = lines[i];
if (! line) {
// 読み込めるlineがもし無くなったら、現在のfor文の現在反復中の文の実行を終了して、次の反復でループの実行を続ける
continue;
}
// 最初の行はインデックスなので"textWords"へ
if (i == 0) {
this.textWords = line.split(",");
// 2行目以降はデータの中身なので"line配列"へ格納
} else {
this.lines.push(line.split(","));
}
}
/*---------------------------------
ここまでのfor文を通ると2次元配列ができます。
textWords[name1.name2,name3,name4];
lines[
[おにぎり,しゃけとタラコと梅で美味しいです,1000,1080]
[卵焼き,だし巻き卵の味がついた感じでふわふわ,400,432]
[お刺身,お寿司用で手巻きにも使えます,20000,20800]
];
-----------------------------------*/
// 開いた文章は閉じます
csv.close();
$.writeln("よみおわり");
},
writeText: function() {
$.writeln("よみはじめ");
for (var i = 0, n = this.textGroups.length; i < n; i++) {
var textFrames = this.textGroups[i].textFrames;
$.writeln("textFrames----->" + textFrames);
for (var j = 0, o = textFrames.length; j < o; j++) {
try {
var textFrame = textFrames[j];
var text = textFrame.contents;
for (var key in this.textWords) {
if (text.indexOf(this.textWords[key]) != -1) {
textFrame.contents = this.lines[i][key];
$.writeln("this.textWords----->" + this.textWords[key]);
switch (this.textWords[key]){
//税抜き
case 'taxfree':
$.writeln('税抜き:textFrame.contents----->' + textFrame.contents);
textFrame.contents = "¥ " + add_comma(textFrame.contents);
break;
//税込
case 'tax':
$.writeln('税込:textFrame.contents----->' + textFrame.contents);
textFrame.contents = "¥ " + add_comma(textFrame.contents) + "税込";
break;
//デフォルト
default:
$.writeln('商品名と注釈');
textFrame.contents = textFrame.contents.replace( "||" , "\n\n" );
textFrame.contents = textFrame.contents.replace( "|||" , "\n" );
break;
}
$.writeln("-----------------------------------");
}
}
} catch (e) {}
}
}
}
};
var converter = new CSVConverter();
converter.read();
converter.writeText();
})();
최종 확인
넣은 문자에 손실이 없는지 육안 확인은 반드시.
예상 밖의 일이 있기 때문에, 반드시 확인합니다.
스크립트를 과신(?)해서는 안 됩니다.
요약
JSX 사용할 수 없는 함수는 어느 정도 알아 두는 것.
그리고, adobe의 Script 가이드도 쓸 때에는 수중에 두고 싶다.
Reference
이 문제에 관하여(Illustrator에서 JSX를 사용하여 여러 아티팩트 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomoka/items/773aa54237e8570a4ecc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)