71774
InD-BOARD
他人を誹謗中傷する発言や個人売買・違法コピーに関する書き込みは禁止です。
トラブルに関する質問は、OSやアプリケーションのバージョン、周辺機器等の情報も記入して下さい。
質問へのレスには必ずお礼のコメントを付けましょう。

- HOME - 記事検索 - 投稿回数 - 携帯用URL - フィード - ヘルプ - 管理人用 -
新規投稿フォーム(返信は各スレッドの返信ボタンからお願いします。)
※「投稿キー」を入力しないと投稿できませんので注意して下さい。
InDesignのchangeText()について / まるこめ
初めて投稿させていただきます。どうぞよろしくお願いいたします。

InDesignのスクリプトに関しての質問です。
changeText()の戻り値をとろうとすると、最後の1文字がきちんと取得できません。
例えば"test"を"abc"で置換する場合、app.changeText()[0].contentsが"ab"となります。
changeGrep()では"abc"となります。
どこか書き方を間違っていますでしょうか。
changeGrep()を使えば望む結果が得られるので火急の問題というわけではないのですが、気になったため質問させていただきました。
ご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

# 環境
Windows 10
InDesgin 14.0.3
VSCode 1.46.1

# コード
```
function myChangeText(findStr, changeStr) {
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = findStr;
app.changeTextPreferences.changeTo = changeStr;
var result = app.changeText()[0];
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
return result;
}

function myChangeGrep(findRgx, changeStr) {
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = findRgx;
app.changeGrepPreferences.changeTo = changeStr;
var result = app.changeGrep()[0];
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
return result;
}

// テスト1
// var tmp1 = myChangeText("test", "abc");
// $.writeln(tmp1.toSpecifier())
// $.writeln(tmp1.contents); // ab

// テスト2
var tmp2 = myChangeGrep("test", "abc");
$.writeln(tmp2.toSpecifier())
$.writeln(tmp2.contents); // abc

```

No.9937 2020/06/25(Thu) 09:00:15
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignのchangeText()について / Uske_S URL
まるこめさん:
僕も InDesign 2019、2020 で再現しました。
しかし調べた限りでは原因がイマイチわかりませんでした。
changeText()[0].contents は確かに "ab" になってしまいますね。
一方で、以下のように findText() したものを後から参照すると正しく contents を取得できます。

function myChangeText(findStr, changeStr) {
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = findStr;
app.changeTextPreferences.changeTo = changeStr;
var fd = app.activeDocument.findText();
var ch = app.activeDocument.changeText();
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
return fd;
}

function myChangeGrep(findRgx, changeStr) {
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = findRgx;
app.changeGrepPreferences.changeTo = changeStr;
var result = app.changeGrep()[0];
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
return result;
}

// テスト1
var tmp1 = myChangeText("test", "abc");
$.writeln(tmp1[0].toSpecifier())
$.writeln(tmp1[0].contents); // abc

元の検索語句から置換後の文字列 "abc" を取得できるのに、changeText() では取得できないというのは不具合な気がします…。
(なぜ検索語句の contents が "test" ではないか、の説明は必要でしょうか?)

僕自身は普段から(よほどの事情がない限り) changeGrep() しか使っていないので、この件は知りませんでした。 一応、Adobeのスクリプティングガイド等も当たってみましたがそれらしい記述は見つからず。

おっしゃるように changeGrep() で対処されるほかないのですが、ちょっと気持ち悪いですね……

No.9938 2020/06/25(Thu) 12:00:50
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: InDesignのchangeText()について / まるこめ
Uske_Sさま

早速お教えいただきありがとうございます!
自分の環境でも、findText()から取得することができました。

重ね重ね恐縮ですが、もう一点お教えいただけないでしょうか…。
>検索語句の contents が "test" ではないか
についてです。
戻り値が、toSpecifier()で示されるように「どのテキストフレームの何文字目から何文字目」という参照先の指示だからではないかと思ったのですが、

var tmp1 = myChangeText("test", "abcdef");
$.writeln(tmp1[0].toSpecifier())
$.writeln(tmp1[0].contents);

を実行すると、下記のようになります。

(/document[@id=12]//story[@id=113195]/character[0] to /document[@id=12]//story[@id=113195]/character[3])
cdef

自分の仮説が正しいなら、「abcd」となるように思います。
どこかに誤解がありますでしょうか。それとも根本的に間違っていますでしょうか。

もし気が向かれましたら、またお教えいただけますと幸いです。
何卒よろしくお願いいたします。

No.9941 2020/06/25(Thu) 14:50:34
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignのchangeText()について / Uske_S URL
おっしゃるとおりの理解でいいと思います。
これについては僕自身も「結果からの予測」なので確実なことは言えないのですが、僕もそういう理解です。
要するに「何文字目」を参照するから test ではなく abc が参照できるというわけです。
ただし、これは置換後の文字列が置換前の文字列と同数か少ない場合です。提示されたように、置換後の文字列のほうが多い場合は結果が異なります。

僕が掲示したコードの一部を下記のように書き換えた上で、test という文字列を選択した状態でテストしてみてください。

var fd = app.activeDocument.selection[0].findText();

選択範囲が cdef に移ることが分かっていただけるかと思います。

実は話がややこしくなるので前回の回答には書いていないのですが、InDesignの検索置換の都合上このようになります。これが最初にお問い合わせいただいた "ab" としてしか contents を取得できないことと関係があるような気はしています。

なぜこうなるかですが、以下についても「結果からの予測」です。あしからず。
InDesignの検索置換の特性上、test という文字列に対して abcdef という文字列が直接挿入されるわけではありません。
t の代わりに a 、 e の代わりに b 、s の代わりに c 、また t の代わりに d というように、文字それぞれの contents プロパティを置き換えるようにして置換されます。それぞれ別々の色の文字色を当てて置換してみるとそれが分かると思います。
しかし、残りの ef はもう入るべき文字がありません。なので最後の文字 d (元は2回目の t )と同じ文字属性を用意し、そこに e と f も入れられます。
この時、選択範囲も同じように e 、f 、と引きずられます。
しかし選択していた範囲は4文字なので、2文字増えた分だけずれてcdef に選択範囲が移ってしまった、というのが僕の理解です。

このことがスクリプトの結果からも言えるのです。
ただ changeText() と changeGrep() の結果の違いの説明にはならないので、これが先の問題とどこまで関係しているかはわかりません。

いずれにせよ、スクリプトで検索置換を行う場合はこういうケースもあります(選択範囲が後ろへずれる)のでご注意ください。

なんとなく伝わったでしょうか?

No.9942 2020/06/25(Thu) 19:35:28
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: InDesignのchangeText()について / まるこめ
Uske_S様

お返事が遅くなり申し訳ございません。

文字色を変えて試してみて、おっしゃっていることがよく分かりました。
character1つずつのcontentsを置換しているというのは、個人的には驚きでした。
スクリプトを書き始めて日が浅いので、こういったことが起こりうると事前に知っておくことができて良かったです。
大変勉強になりました。
重ね重ね、本当にありがとうございました!

No.9943 2020/06/26(Fri) 14:49:02
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignのchangeText()について / Uske_S URL
伝わったようで良かったです。

検索置換では、置換前後で文字数が変わる場合に注意が必要です。せっかくなので置換後に文字数が減る場合のリスクもお伝えしておきます(ご存知でしたらすみません)。

正規表現検索置換でもテキスト検索置換でも、先般お伝えした通り、InDesignの検索置換は検索マッチした文字に対して頭から順番に contents の中身を置換していきます。
文字属性が途中から変わる、そして文字数が減る場合、添付画像のような結果になることがあります。
(端 の字の色が変わっています)
先の検索置換の仕組み?を理解していればこの結果もご理解いただけると思います。このような事があるので検索置換は気をつけなばなりませんし、ましてやスクリプトで一括ドン! は本当に気をつけてください。

この例では 釜戸(?=端次郎) で検索し、 竈 だけで置換すれば「端」の文字属性は変わりません。
検索置換は便利ですが安易に行うと痛い目を見るので、スクリプトで操作する場合は本当に注意してくださいね。
蛇足ながら失礼しました。

No.9944 2020/06/29(Mon) 09:56:42
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
ページパネル / kk
お願いします。
indesign cc2014
mac os 10.9.5

Timemachineからバックアップして
osを10.9.5から10.12.6に上げた状態で
過去の10.9.5のosで作成したIndesign cc2014の
ファイルを開くとページパネルのノンブル表記が全て1からに
なっていて、ドキュメントと違う状態になっています。
ノンブルを再指定しても、マスター上で作り直しても
idmlから開いても直りません。
解決方法があればお願いいたします。

No.9939 2020/06/25(Thu) 13:11:47
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: ページパネル / YUJI
環境設定の[一般]で、[ページ番号]の[表示]を[ページごと]から[セクションごと]に変更すれば直りませんか。
No.9940 2020/06/25(Thu) 13:25:09
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
お世話になります。
よろしくお願いします。

以下のExtend Scriptソースがあるのですが、後半にあるアラートをコメントアウトするしないで、InDesignドキュメントの動作結果が変わります。

アラートを実行した時の動作が、本来求めている動作です。
動作が変わってしまう理由を説明できるようになりたいのですが、どなたかご教示いただけないでしょうか。

長方形オブジェクトを変数に代入した後、何かしらプロパティを参照するかしないかで動作が変わっているようだというところまでは気づきました。
以下のソースでは、この参照をアラートの部分で行っています。
(ですので、アラートの部分は、コンソールへ書き出すでも何でもいいので、アラートにしている部分はあまりつっこまないでいただけるとうれしいです。)

実は、職場の高卒のルーキーが一生懸命勉強してくれていて、以下のようなソースを書いてくれたのですが……理由が説明できず、今回こちらに質問をさせていただきました。

私以外プログラマーが職場にいないので、わからないで終わらすのは申し訳なく、かと言ってなんとググらせればいいかヒントもだせず、とりあえず調べると言って宿題をあずかりましたw

お手数をおかけします。
よろしくお願いします。





///// ここから下がソースです。 //////////


var doc = app.documents.add();


// ● 長方形を適当に作成
var rct;

for (var i = 0; i < 5; i++) {
rct = doc.rectangles.add();
rct.geometricBounds = [
i * i * 10,
i * i * 5,
i * i * 10 + i * i + 10,
i * i * 5 + i * i + 5
];
rct.fillColor = doc.swatches[i + 4];
rct.name = (i + 1).toString();
}


// ● 作成した全長方形から、もっとも上下左右にある長方形を調査して取得
var mTop = doc.rectangles[0].geometricBounds[0];
var mTopRct = doc.rectangles[0];

var mLeft = doc.rectangles[0].geometricBounds[1];
var mLeftRct = mTopRct;

var mBottom = doc.rectangles[0].geometricBounds[2];
var mBottomRct = mTopRct;

var mRight = doc.rectangles[0].geometricBounds[3];
var mRightRct = mTopRct;

var rct = doc.rectangles;
for (var i = 1; i < rct.length; i++) {
if (rct[i].geometricBounds[0] < mTop) {
mTop = rct[i].geometricBounds[0];
mTopRct = rct[i];
}

if (rct[i].geometricBounds[1] < mLeft) {
mLeft = rct[i].geometricBounds[1];
mLeftRct = rct[i];
}

if (rct[i].geometricBounds[2] > mBottom) {
mBottom = rct[i].geometricBounds[2];
mBottomRct = rct[i];
}

if (rct[i].geometricBounds[3] > mRight) {
mRight = rct[i].geometricBounds[3];
mRightRct = rct[i];
}
}


// ● 以下のアラートの実行有無で、InDesignドキュメントの動作が変わります
alert(
mTopRct.geometricBounds[0] + ", " +
mLeftRct.geometricBounds[1] + ", " +
mBottomRct.geometricBounds[2] + ", " +
mRightRct.geometricBounds[3]
);


// ● 作成
var rctLast = doc.rectangles.add();
rctLast.geometricBounds = [
mTopRct.geometricBounds[0],
mLeftRct.geometricBounds[1],
mBottomRct.geometricBounds[2],
mRightRct.geometricBounds[3]
];

No.9926 2020/06/22(Mon) 22:39:56
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / お〜まち URL
これは「値渡し」と「参照渡し」を理解していないと説明が難しいですね。
私も正確には理解していないので、うまく説明できないのですが(^^;

端的に言うと「// ● 作成」の次の行
var rctLast = doc.rectangles.add();
で長方形が新たに作られることによって、mTopRct、mLeftRct、mBottomRct、mRightRctの参照先が移動しちゃうんです。
ここを
var rctLast = doc.ovals.add();
というふうに楕円にしてしまうと、Alert行の有無に関係なく、望んだ大きさの楕円がつくられますので試してみてください。

逆にAlert行があることによって参照先の移動が起こらないことが、私には説明できません。そこは誰か詳しい人、お願いします。

No.9927 2020/06/23(Tue) 00:53:11
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.98 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
お〜まちさん


ご返信ありがとうございます。
スレ主です。

「値渡し」と「参照渡し」については、私は理解できているレベルだとご認識いただければと思います。
(昔、思うように動作してくれず、一人でデバッグしながらネットでググり、長時間かけてなんとか理解にこぎつけることが出来ました。)

ですので、今回の動作はバグではなく、『var rctLast = doc.rectangles.add();』で参照先が移動しているんだろうなぁ〜というのは、想像しました。
だとしても、『Alert行の有無で動作が変わることが謎』という状況です。
どなたかご返信いただけること、気長に待ちたいと思います。


>>
>> var rctLast = doc.ovals.add();
>> というふうに楕円にしてしまうと、Alert行の有無に関係なく、望んだ大きさの楕円がつくられますので試してみてください。
>>

こちらの情報、ありがとうございました。
早速試し、動作の確認が取れました。
前述した「『var rctLast = doc.rectangles.add();』で参照先が移動しているんだろうなぁ〜」という想像で終わらせていたので、これで検証ができたのかなと認識しています。

想像で終わらさず検証の実施を、もっとクセ付けないとですね。
ありがとうございました。

No.9928 2020/06/23(Tue) 08:50:02
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / Uske_S URL
ヒースさん:
これはExtendScriptの仕様というかクセというか見方によってはバグみたいなものです。
例えば、alertメソッドをコメントアウトして以下の4行を同じ場所に追加して見てください。

mTopRct = mTopRct.getElements()[0];
mLeftRct = mLeftRct.getElements()[0];
mBottomRct = mBottomRct.getElements()[0];
mRightRct = mRightRct.getElements()[0];

alertメソッドの有無に関わらず同じ結果になるはずです。

これの詳細は下記のブログに書かれています。
http://sysys.blog.shinobi.jp/Entry/113/

コレクションオブジェクトへの追加と削除はちょっと厄介でして、コレクションオブジェクトのid、for文でループさせる際のindexを見てもらうとなんとなく変なことはわかっていただけるかもしれません。

いずれにせよ、コレクションオブジェクトへの追加や削除はgetElementsメソッドを利用してもらったほうが確実です。

No.9929 2020/06/23(Tue) 15:24:16
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / Uske_S URL
追記です。

alertメソッドなどにオブジェクトを引数として渡すと、内部的にはStringコンストラクタを経由し、オブジェクトの参照先が文字列に変換されます(暗黙的型変換)。
このタイミングでブログのisValidの副作用にあるような、オブジェクト参照先の再取得が起こっていると僕は考えています。

先ほどのgetElementsメソッドのところを下記のようにしても同じ結果が得られます。

String(mTopRct.geometricBounds[0]);
String(mLeftRct.geometricBounds[0]);
String(mBottomRct.geometricBounds[0]);
String(mRightRct.geometricBounds[0]);

特に値を代入せずとも、値をStringコンストラクタに通すだけで結果が変わるわけです。

No.9930 2020/06/23(Tue) 15:30:56
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / Uske_S URL
もういっこ追記です。

getElementsを利用するケースはもうひとつあって、オブジェクトのインスタンスを変更するケースです。
例えばコード中でTextFrameをRectangleに変えるようなケース。
InDesignのスクリプトであればTextFrames.add()したあとにContentTypeを変更するなどして実装できます。

具体的には下記のような場合に有効です。
var doc = app.activeDocument;

var f = doc.textFrames.add(); //この時点で f は TextFrame
f.contentType = ContentType.GRAPHIC_TYPE; //グラフィックフレームに変更しても…
$.writeln(f.toSpecifier()); //結果は TextFrame
$.writeln(f.hasOwnProperty("contents")); //結果は true
//f.contents = "hoge"; //<-これはエラーになる

f = f.getElements()[0]; //getElementsメソッドを挟むと…
$.writeln(f.toSpecifier()); //結果は rectangle
$.writeln(f.hasOwnProperty("contents")); //結果は false

No.9931 2020/06/23(Tue) 15:43:38
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / (z-) URL
流れ上、ゴミみたいな返信になりますがw

for (var i = rct.length - 1; i >= 0; i--) {

でも回避できますね。

No.9932 2020/06/23(Tue) 16:42:14
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
Uske_Sさん
(z-)



ご返信ありがとうございます。
スレ主です。

取り急ぎのお礼です。
ちょっと、じっくり読み、実際に動かしてみてから、改めて返信させていただきます。

No.9933 2020/06/23(Tue) 17:06:14
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
(z-)さん

スレ主です。
敬称モレ、大変失礼しました。

No.9934 2020/06/23(Tue) 17:07:42
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / あるふぁ
Uske_Sさんが紹介してくれたブログを書いたものですが、
いやこれはそこに書いたことでは説明できない、というかそれを書いたときかなり調査不足だったなあと反省するところでして

私も今知ったばかりなので想像というか1つの解釈でしかないのですが、

rct[i]を変数に代入した段階では、doc.rectanglesのi番目という情報が入っただけ

何かしらのプロパティを取得したとき、はじめてInDesign上のオブジェクトと紐づけされる

紐づけされた後はrectangleを増減しても参照がずれることはない

ということかなと思います。

いやはや私も経験上はPageItem系オブジェクトはアイテムが増減してもずれないイメージだったのですが、これ(http://sysys.blog.shinobi.jp/Entry/113/)を書くとき実験したらずれたので、あれ?と思いながらもずれるものとして書いちゃったのですが、もう少し詳しく検証しておくべきでした。


ただ本当に「1つでもプロパティを取得すれば参照がずれることはない」と言えるのかは不明です。
既知の例外としては上記ブログ記事に書いたように、アイテム増減後にisValidプロパティにアクセスするとずれます。

ご承知の上だろうと思いますが今回の例で言えばmTopRctから取得しなおさずにmTop等を使っておけばよかったわけで、
ほかにもUske_SさんのおっしゃるようにgetElementsを使ったり、
(z-)さんのおっしゃるようにずれても問題ない順番で処理するとか、
そんなふうにできるだけ「ずれないはず」に頼らないコードを書くようにしたいものですね

No.9935 2020/06/23(Tue) 17:48:48
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
あるふぁさん


ご返信ありがとうございます。
スレ主です。

取り急ぎのお礼です。
他の方の返信確認後、改めて返信させていただきます。

No.9936 2020/06/24(Wed) 10:33:35
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36
バイナリ化したときのBridgeTalk / masa
いつもお世話になっております。
今回は、BridgeTalkの動作で投稿させていただきます。

下記のようなスクリプトで、InDesignからPhotoshopを起動し、
EPSファイルをPNGファイルに変換しています。

#targetengine "eps2png"
var bridgeTalkPH = new BridgeTalk();
bridgeTalkPH.target = 'photoshop';

for(var i=0; i<oldFileSplit.length; i++){
bridgeTalkPH.body = uneval(epsChange) + '("' + epsFile[i] + '","' + pngFile[i] + '");';
bridgeTalkPH.send();
}

function epsChange(epsFile, pngFile){
var fileObj = new File(epsFile);
epsOpt = new EPSOpenOptions();
epsOpt.antiAlias = true;
epsOpt.resolution = 96;
epsOpt.constrainProportions = false;
epsOpt.mode = OpenDocumentMode.RGB;
var theDoc = app.open(fileObj, epsOpt);

var newFile = new File(pngFile);
pngOpt = new PNGSaveOptions();
pngOpt.interlaced = false;
theDoc.saveAs(newFile, pngOpt , true);
theDoc.close(SaveOptions.DONOTSAVECHANGES);
}


ところが、jsxファイルをバイナリ化したところ、動作しなくなってしまいました。
いろいろ調べたところ、BridgeTalkで実行する部分(function epsChange()のところ?)をバイナリ化すると動く、という記事をみつけ、
下記のように試行錯誤してみたのですが、動作しません。

var bridgeTalkPH = new BridgeTalk();
bridgeTalkPH.target = 'photoshop';

#targetengine "eps2png"
eval("@JSXBIN@ES@2.0@MyBbyBnABMAbyBn0AMJBnASzHjGjJjMjFiPjCjKBAEjzEiGjJjMjFCfRBVzHjFjQjTiGjJjMjFDfDftnftJCnABjzGjFjQjTiPjQjUEfEjzOiFiQiTiPjQjFjOiPjQjUjJjPjOjTFfntnfJDnABXzJjBjOjUjJiBjMjJjBjTGfjEfnctfJEnABXzKjSjFjTjPjMjVjUjJjPjOHfjEfndjAfJFnABXzUjDjPjOjTjUjSjBjJjOiQjSjPjQjPjSjUjJjPjOjTIfjEfncffJGnABXzEjNjPjEjFJfjEfXzDiSiHiCKfjzQiPjQjFjOiEjPjDjVjNjFjOjUiNjPjEjFLfnfJHnASzGjUjIjFiEjPjDMBEXzEjPjQjFjONfjzDjBjQjQOfRCVBfAjEfffnftJJnASzHjOjFjXiGjJjMjFPCEjCfRBVzHjQjOjHiGjJjMjFQfEftnftJKnABjzGjQjOjHiPjQjURfEjzOiQiOiHiTjBjWjFiPjQjUjJjPjOjTSfntnfJLnABXzKjJjOjUjFjSjMjBjDjFjETfjRfncffJMnAEXzGjTjBjWjFiBjTUfVMfBRDVPfCjRfFctffJNnAEXzFjDjMjPjTjFVfVMfBRBXzQiEiPiOiPiUiTiBiWiFiDiIiBiOiHiFiTWfjzLiTjBjWjFiPjQjUjJjPjOjTXfffAFM4B0AiAB40BiAP4C0AiAD40BhAQ4B0AhACDAzJjFjQjTiDjIjBjOjHjFYAO0EzAZByB");

for(var i=0; i<oldFileSplit.length; i++){
bridgeTalkPH.body = uneval(epsChange) + '("' + epsFile[i] + '","' + pngFile[i] + '");';
bridgeTalkPH.send();
}

どうすれば、動作するのでしょうか。
よろしくお願いいたします。

No.9917 2020/06/16(Tue) 20:41:59
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: バイナリ化したときのBridgeTalk / あるふぁ
返信ボタンが遠い(笑)

まずは
$.writeln(bridgeTalkPH.body)
をやってみて、BridgeTalkで何を送ってるのか見てみましょう。
動かない理由がわかるはずです。

No.9918 2020/06/17(Wed) 12:06:01
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

Re: バイナリ化したときのBridgeTalk / masa
コメントありがとうございます。

すみません、、返信ボタンが押しづらくなってしまって、、

(function epsChange(){[compiled code]})("epsファイル名4623","pngファイル名");

と出てきますね。
[compiled code]と出てくるのが、ダメなのでしょうか。

No.9919 2020/06/17(Wed) 12:55:08
Mozilla/5.0 (Linux; Android 10; SHV42) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36

Re: バイナリ化したときのBridgeTalk / あるふぁ
そうです、JSXBIN内で定義した関数はunevalしても元のコードにならないというのが動かない原因です。(そんな簡単にJSXBINによる難読化が破られたら困りますもんね)

「BridgeTalkで実行する部分をバイナリ化すると動く」という話は本当で、
たとえば「alert(1)」をバイナリ化したのは"@JSXBIN@ES@2.0@MyBbyBn0ABJAnAEjzFjBjMjFjSjUBfRBFdBff0DzACByB"ですが、これをそのままBridgeTalkのbodyに入れたら動きます。

このやり方は送信先で実行するコード全部がバイナリ化されてる場合は使えますが、今回のように引数として素のコードをくっつけて送らないといけない場合は使えません。
どうしましょう

No.9920 2020/06/17(Wed) 14:34:38
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

Re: バイナリ化したときのBridgeTalk / masa
BridgeTalkを使わず、executeScript()を使って解決することができました。

var scriptText = "";
var scriptText = scriptText + "epsOpt = new EPSOpenOptions(); ";
var scriptText = scriptText + "epsOpt.antiAlias = true; ";
var scriptText = scriptText + "epsOpt.resolution = 96; ";
var scriptText = scriptText + "epsOpt.constrainProportions = false; ";
var scriptText = scriptText + "epsOpt.mode = OpenDocumentMode.RGB; ";
var scriptText = scriptText + "pngOpt = new PNGSaveOptions(); ";
var scriptText = scriptText + "pngOpt.interlaced = false; ";

for(var i=0; i<oldFileSplit.length; i++){
var scriptText = scriptText + "var epsFile = '" +epsFile[i]+"'; ";
var scriptText = scriptText + "var fileObj = new File(epsFile); ";
var scriptText = scriptText + "var theDoc = app.open(fileObj, epsOpt); ";
var scriptText = scriptText + "var pngFile = '"+pngFile[i]+"'; ";
var scriptText = scriptText + "var newFile = new File(pngFile); ";
var scriptText = scriptText + "theDoc.saveAs(newFile, pngOpt , true); ";
var scriptText = scriptText + "theDoc.close(SaveOptions.DONOTSAVECHANGES); ";
}
}
photoshop.executeScript(scriptText);

本当に助かりました。
ありがとうございました。

No.9921 2020/06/18(Thu) 00:00:18
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: バイナリ化したときのBridgeTalk / あるふぁ
なるほどそれならそのままバイナリ化しても動きますね。
ただ、BridgeTalkを監視するだけでバイナリ化前の生のコードが見えてしまうので(executeScriptも中身ではBridgeTalkを使っています)、バイナリ化によるコード秘匿効果がちょっと薄れます。
そのくらい気にしない感じでしたら以下は余談なのでスルーしてください。

バイナリのままphotoshopに送るなら、

bridgeTalkPH.body = 'eval("' + epsChangeの宣言部分をJSXBIN化した文字列 + '"); epsChange("' + epsFile[i] + '","' + pngFile[i] + '");';

のようにphotoshop側でevalする手があります。



あるいは下のように複数回に分けてphotoshopに送るという手もあります。

bridgeTalkPH.body = epsChangeの関数定義部分をJSXBIN化した文字列;
bridgeTalkPH.send();

for(var i=0; i<oldFileSplit.length; i++){
bridgeTalkPH.body = 'epsChange("' + epsFile[i] + '","' + pngFile[i] + '");';
bridgeTalkPH.send();
}

ただしこのとき「epsChangeの関数定義部分をJSXBIN化した文字列」は、
epsChange=function(...){
...
}
という形のコードをバイナリ化したものである必要があります。(宣言なしの変数に代入することで無理やりグローバルな関数にしています。複数に分けて送ったBTは同じスコープで実行されないためです。誰かに怒られそう)

No.9924 2020/06/19(Fri) 13:49:48
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

Re: バイナリ化したときのBridgeTalk / (z-) URL
(もう、なんでそうしたのか、当時のこと覚えてないんですが)過去にリリースしたスクリプトのうち、バイナリ化で提供してあるやつをいくつか開いてみたら、
#targetengine の定義だけは外に出してありました。

#targetengine "hoge"
#target fuga

を削除してバイナリ書き出し、
できあがったJSXBINの中身を

#targetengine "hoge"
#target fuga
eval(" ");
に入れる、という方式を採ってます。

このうち、InDesignからPhotoshopに送る関数も(なぜか)バイナリ化を避けていたのは、あるふぁさんのご指摘と合致しますねw
勉強になりました

No.9925 2020/06/19(Fri) 14:29:40
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15
InDesignパーフェクトブックPDF版V7 P.340 「PDFを配置」ダイアログ「トリミング」選択肢 / 河野弘毅 Email
たいへんお世話になっております。表題テキストでInDesign 2020を勉強できて心から感謝しておりますm(_ _)m

(これはすぐ対応していただく必要ありません、
次回改訂なさるときに対応する項目として検討していただく意図で書いています...
なんか森さんのお仕事を増やしているようでほんとに心苦しいのですが😅...ほんとにすみません...)

P.340 [PDFを配置]ダイアログの[オプション]の[トリミング]の選択肢の名称が少し変更されているみたいです。(確認したInDesign 2020のバージョンは 15.1です)

選択肢#2 境界線ボックス(全てのレイヤーのみ)→境界線ボックス(すべてのレイヤー)
選択肢#5 トンボ(TrimBox)→仕上がり
選択肢#6 裁ち落とし(BleedBox)→裁ち落とし
選択肢#7 メディア(MediaBox)→メディア

No.9922 2020/06/19(Fri) 11:02:01
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: InDesignパーフェクトブックPDF版V7 P.340 「PDFを配置」ダイアログ「トリミング」選択肢 / YUJI
あー、ホントだ。変更されていますね。
申し訳ありませんが、次回、改定する時に対応させていただきますね。
ご連絡、ありがとうございます!

No.9923 2020/06/19(Fri) 11:48:03
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
InDesignパーフェクトブックPDF版V7 しおり「2-02 ガイドを活用する」のしおり / 河野弘毅 Email
書籍のお世話になっております。ありがとうございます。

PDF版v7のしおりで「2-02 ガイドを活用する... p.061」の項目が欠落しているようです。改版時にご確認いただければさいわいです。

細かい指摘ですみません。よろしくお願いします。

No.9914 2020/06/15(Mon) 08:58:06
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignパーフェクトブックPDF版V7 しおり「2-02 ガイドを活用する」のしおり / YUJI
申し訳ありません。
修正版をアップしてありますので、再度、STORES.jpよりダウンロードをお願い致します。

No.9915 2020/06/15(Mon) 09:37:27
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignパーフェクトブックPDF版V7 しおり「2-02 ガイドを活用する」のしおり / 河野弘毅 Email
お忙しいのに申し訳ありません、些細な点でお手を煩わせてしまい恐縮です。
改訂版をダウンロードさせていただきました。
とりいそぎお礼申し上げます。

No.9916 2020/06/15(Mon) 17:21:55
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
InDesignパーフェクトブックp.21アピアランス▶ペーストボードにテーマカラーを適用 / 河野弘毅 Email
この書籍でInDesignを勉強しています。ご執筆ありがとうございます。

p.21の「アピアランス▶ペーストボードにテーマカラーを適用」に

「このオプションをオンにするとペーストボードのカラーが白に、オフにするとペーストボードにもテーマカラーが適用されます。」

との記述がありますが、オンとオフの記述が逆ではないでしょうか?

No.9911 2020/06/14(Sun) 16:55:35
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignパーフェクトブックp.21アピアランス▶ペーストボードにテーマカラーを適用 / YUJI
わざわざご連絡、ありがとうございます。
すいません。確かに逆ですね(^^;;
修正しておきます。ありがとうございます。

No.9912 2020/06/14(Sun) 17:56:09
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignパーフェクトブックp.21アピアランス▶ペーストボードにテーマカラーを適用 / 河野弘毅 Email
さっそく応答してくださってありがとうございます!
このパーフェクトブックはほんとうにすばらしいテキストだと思います。
今後も継続的にAdobeの最新版にあわせて更新されていくことを期待しています。

P.S.(以下余談です)
森さんがご執筆になったMDN『プロフェッショナルの教科書』も所有していてこちらもとてもよいテキストだと思います。タイムリーに更新して最新版にキャッチアップできる点はやはりPDF出版が有利ですがデザインとは畑違いの私が森さんのお仕事を発見できたのは書店で『プロフェッショナルの教科書』を見かけたおかげなので、やはりしばらくは両方を組み合わせるのが有効ということなんでしょうね。

No.9913 2020/06/15(Mon) 03:37:28
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
50/50件 [ ページ : << 1 2 3 4 5 6 7 8 >> | 過去ログ | 画像リスト ]