Skip to main content
Inspiring
January 31, 2021
Answered

javascript内でのapp.copyの挙動について

  • January 31, 2021
  • 2 replies
  • 1342 views

javascriptでaiファイル上の複数のアートボードを順番に複製していくコードを作成中です。

以下のようなコードで、元のアートボードのデータを選択。クリップボードにコピー。アートボードを追加。貼り付け。と行っています。

var srcDoc = activeDocument;
var originArtBoarts = srcDoc.artboards;
for (l = 0l < originArtBoartLenl++) {
  originArtBoarts.setActiveArtboardIndex(l);
      srcDoc.selectObjectsOnActiveArtboard();
      app.executeMenuCommand("copy");
      /*アートボード追加処理*/
      app.executeMenuCommand("pasteFront");
      srcDoc.selection = null;
}
が手持ちのWindowsPC2台で動作させたところ1台は、正常に複製できますが
もう一台は1つ目のアートボードは複製できるのですが、それ以降のアートボードには
選択したデータが張り付けられない状態です。(アートボードの追加はできるが、元のアートボード上のオブジェクトなどは複製できていない)追加の情報として正常に動作しないほうのPCでも app.executeMenuCommand("copy");の後にalertで適当な文字を表示->OKとすると正常にオブジェクトの複製ができました。alertではなくwhileループなどで時間経過させてた場合はNG。
 
illustratorのバージョンはどちらも25.1で各コンポーネントのバージョンもすべて同じでした。
 
This topic has been closed for replies.
Correct answer NAO5FC3

解決しました!!

Windowsの設定で「クリップボードの履歴」の機能をOFFにすると動作しました!

履歴機能をONしていると2回目以降のcopyがクリップボードに貼り付けられていなかったみたいです。

ありがとうございました。

2 replies

Ten A
Community Expert
Community Expert
February 1, 2021
特に環境に左右されるような話も聞きませんので以下のコードでの挙動を確認してみてください。
var ab = app.activeDocument.artboards;
var targetArtboard;
var rct = ab[0].artboardRect;
var wd = rct[2];
var ht = rct[3];
var stp = rct[2] + 20;
var x = y = 0;
app.executeMenuCommand("selectallinartboard");
app.executeMenuCommand("copy");
app.executeMenuCommand("deselectall");
for (var i=1; i<10; i++) 
{
x += stp;
ab.add([x, y, x+wd, ht]);
ab.setActiveArtboardIndex(i);
app.executeMenuCommand("pasteFront");
srcDoc.selection = null;
}
NAO5FC3Author
Inspiring
February 2, 2021

ありがとうございます。貼り付けていただいたコードを実行した場合、ab[0]のコピーは正常にできること確認できました。

ただやはり、元のアートボードなどが複数枚あった際のコピー処理はうまく動いていないです。

(ab[1]やab[2]のアートボード上のオブジェクトはコピーできない)

・対象のアートボードをアクティブ出来ていない?

・アクティブになったアートボード上のオブジェクトを選択できていない?

・クリップボードへコピーできていない?

・貼り付けが出来ていない?

 

NAO5FC3AuthorCorrect answer
Inspiring
February 2, 2021

解決しました!!

Windowsの設定で「クリップボードの履歴」の機能をOFFにすると動作しました!

履歴機能をONしていると2回目以降のcopyがクリップボードに貼り付けられていなかったみたいです。

ありがとうございました。

Ten A
Community Expert
Community Expert
January 31, 2021

全体のコードが見えていないのではっきりしたことは言えないのですが、アートボード追加後にapp.redraw()入れてみるとどうでしょう。

NAO5FC3Author
Inspiring
February 1, 2021

ご助言ありがとうございます。

app.redrawを追加してみましたが、特に変化無しでした。

正常動作するPCと環境を比較してみるとOpenGLのバージョンが異なっていました。

正常動作PCは4.6

異常動作PCは4.5

その他の動作環境の違いももう少し追ってみます。