Skip to main content
Participating Frequently
June 14, 2022
Answered

FRAME_TO_CONTENTがランダムに外れてしまいます

  • June 14, 2022
  • 2 replies
  • 1134 views

下記スクリプトでInDesign全ページの画像を特定のサイズに縮小し、最後にFRAME_TO_CONTENTでフレームを画像にフィットさせたいのですが、ランダムでFRAME_TO_CONTENTが行われず画像が元サイズに戻ってしまいます。

どこに問題がありますでしょうか

 

//////// ≫ユーザーサイズ設定
myPercent = prompt ("オブジェクトの拡大・縮小率(%)を入力してください。\r\n全てのオブジェクト同じ比率でリサイズします。", "45");
myNum = parseFloat (myPercent);

//////// ≫リサイズ処理
if (myPercent){
var myDoc = app.activeDocument;
for (var i = 0; i<myDoc.pages.length; i++) {
var myObj = myDoc.pages[i].allGraphics;
for (var j = 0; j<myObj.length; j++) {
myObj[j].horizontalScale = myNum;
myObj[j].verticalScale = myNum;
myObj[j].fit(FitOptions.FRAME_TO_CONTENT);
}
}
}

This topic has been closed for replies.
Correct answer id.omega

>フィット漏れはページ幅より大きい画像を大量に挿入した場合に起きる

 

雑にテストしてみたところ動作したんですが、「大量に」じゃないから動いたんですかねえ。

まだ何かほんとの原因がありそうですね。


ドキュメントがどのような作りになっているのか分かりませんが、処理の前後で対象ページのallGraphics.lengthの値が変わっているのだと思います。

例えば、連結されたテキストフレーム内に画像があり、1ページ目の処理中に2ページ目にあった画像が移動してきてしまうケースや、見開きページ上の画像で、3ページにあった画像を処理すると2ページに移動してしまうようなケース(3ページの2枚目の画像を処理すると、3ページの3枚目の画像が3ページの2枚目に変わってしまう)が考えられます。

解決方法は既にajabonさんが指摘しているように、ドキュメント全体が対象なら、ページごとの処理をやめてmyDoc.allGraphicsで処理するのが良いと思います。

2 replies

Ten A
Community Expert
Community Expert
June 14, 2022

完全にランダムに起きるのであればfitOptionsを「1718906723」と直指定してみるとか、メモリ関連のリークが疑わしいなら途中で$.gc()挿入するとか…

Participating Frequently
June 15, 2022

Ten A様

 

ご指摘ありがとうございます。

上記内容ためさせていただきましたが、状況変わらずでした。すみません…。

また何かの折にはよろしくお願いします<(__)>

ajabon grinsmith
Community Expert
Community Expert
June 14, 2022

とりあえず、allGraphicsはDocumentクラスにも存在するので、ページごとに回すことに特に意味がなければmyDoc.allGraphicsの単一ループで済むと思います。

 

「ランダムで」ということですが、ドキュメントを復元してもう一度スクリプトを実行すると初回とは違う画像がそうなるということなんでしょうか?

毎回同じ場所がそうなるのであれば、

myObj[j].parent.clearFrameFittingOptions();

を入れてみて、それに続けて

myObj[j].horizontalScale = .....

としてみてください。

Participating Frequently
June 14, 2022

ajabon grinsmith様

ご返答ありがとうございます。
また、業務用のデータを扱っているため実際のIndesignデータが載せられず、わかりにくくてすみません。

ご指摘いただきましたランダムと言うのは、例えば「3ページの5個目の画像」と「4ページの3個め画像」などフレームに入っている画像の種類問わずFitされない箇所が出てくるという意味です。ファイルを開き直して再処理した場合、発生する箇所は同じです。

現象としては、動作をチェックしたところ、画像の縮小まではちゃんと動くのですが、fitされない箇所が途中途中で発生し、最終的に画像も元のサイズに戻ってしまいます(添付した画像でいうと11、12ページの下の画像は正常に45%縮小してフレームもFitされたのですが、11ページ上の画像は、画像が縮小したのちフレームがFitされず画像も元のサイズに戻ってしまった状態です)

ご教示頂いた「myObj[j].parent.clearFrameFittingOptions();」を「myObj[j].horizontalScale = myNum」の上に入れて試させていただきましたが、状況は変わりませんでした。もし他に、なにか気づいたことなどが有りましたらご指摘いただけると助かります。

ありがとうございました

ajabon grinsmith
Community Expert
Community Expert
June 14, 2022

>ファイルを開き直して再処理した場合、発生する箇所は同じです

 

であれば、決してランダムではなく、処理される画像とされない画像で必ず何かの差分があるということです。

いちばん怪しいのがフレーム調整オプションだったのですが、clearFrameFittingOptions() で改善されないとなると厄介ですね。

ドキュメントの詳細がわからない上では、あてずっぽしか手段がありません。

 

検証手順を記しておきます。文字だけだと煩雑ですがご容赦ください。

・問題のある画像をダイレクト選択ツール(白矢印)で選択、コピー

・新規ドキュメント作成、新規グラフィックフレーム作成

・選択された状態でオブジェクトスタイル「なし」が適用されていることを確認

・の中にペースト

・スクリプト実行してみて、うまく処理されれば、画像のせいではないということになります。

 

・問題のあるドキュメントを開き、問題のある画像の親フレームをコピー

・新規ドキュメントにペースト

・スクリプト実行してみる

 

で切り分けしていくと明確になるかと。

とりあえずあやしいのはフレームの設定かと予測しています。