Illustrator에서 JSX를 사용하여 여러 아티팩트 만들기

8739 단어 illustratorJSX

전치



Illustrator에서 여러 아티팩트를 제작했을 때의 비틀거리는 메모입니다.

개발 환경


  • IllustratorCC2017
  • mac Sierra

  • 했던 일



    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 가이드도 쓸 때에는 수중에 두고 싶다.

    좋은 웹페이지 즐겨찾기