終了

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

Community Beginner ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

下記スクリプトで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);
}
}
}

キーワード
スクリプティング

表示

493

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 2 件の正解

Community Expert , Jun 13, 2022 Jun 13, 2022

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

 

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

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

myObj[j].parent.clearFrameFittingOptions();

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

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

としてみてください。

投票

翻訳

翻訳
Community Beginner , Jun 17, 2022 Jun 17, 2022

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

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

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

投票

翻訳

翻訳
Community Expert ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

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

 

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

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

myObj[j].parent.clearFrameFittingOptions();

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

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

としてみてください。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

ajabon grinsmith様

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

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

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

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

ありがとうございました

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

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

 

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

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

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

 

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

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

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

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

スクリーンショット 2022-06-14 11.45.33.png

・の中にペースト

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

 

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

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

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

 

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

度々ご返答ありがとうございます。ご指摘の件試させていただきました。

・新規ドキュメント作成、新規グラフィックフレーム作成→選択された状態でオブジェクトスタイル「なし」が適用されていることを確認
問題なかったです。

・・の中にペースト→クリプト実行してみて、うまく処理されれば
処理されました

・問題のあるドキュメント→親フレームをコピー→新規ドキュメントにペースト→スクリプト実行
こちらも問題なく処理されました
テキストフレーム設定は初期値ママでしたので、多分問題はないかと。

同じスクリプトを2回処理すると、最初の方は正常に動作するのですが、ページが進むと(処理する画像が増えると)また現象が起き始めてしまい、根本的な解決には至らず。もう少し原因考えてみます。

ありがとうございました<(__)>

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

>最初の方は正常に動作するのですが、ページが進むと(処理する画像が増えると)また現象が起き始めてしまい

 

搭載メモリの問題など絡むのでしょうか。

おまじないでリサイズ後に $.sleep(100); など入れてみますか?

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

ウェイトを1000まで上げて試しても見たのですが、ダメでした……
処理を2回行うと、大体画像30個ぐらいまでは正しく動作するので、
myObj[j].fit(FitOptions.FRAME_TO_CONTENT);だけ別に分けて20回ぐらい回せば事足りるだろうという消極的な方法で、乗り切ることにしました。

  //////// ≫画像リサイズ処理
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].parent.clearFrameFittingOptions();
      myObj[j].horizontalScale = myNum;
      myObj[j].verticalScale = myNum;
//     $.sleep(1000);
//     myObj[j].fit(FitOptions.FRAME_TO_CONTENT);
    }
  }
}
  //////// ≫フレームフィット処理+フィット漏れ対処
for (x = 1; x<=20; x++){
  if (myPercent){
    var myDocF = app.activeDocument;
    for (var i = 0; i<myDocF.pages.length; i++) {
      var myObjF = myDocF.pages[i].allGraphics;
      for (var j = 0; j<myObjF.length; j++) {
        myObjF[j].fit(FitOptions.FRAME_TO_CONTENT);
      }
    }
  }
}

度々ご返答ありがとうございました。感謝<(__)>

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

んんーお力になれず残念でした!

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 16, 2022 Jun 16, 2022

リンクをクリップボードにコピー

コピー完了

その後いろいろ試したところ
・フィット漏れはページ幅より大きい画像を大量に挿入した場合に起きる
・挿入する画像が全てページ幅より小さい場合(小さい画像を挿入し拡大→フィットを行った場合)同現象が起きない
・フレームフィット処理を繰り返すことでフィット漏れを解決できる
以上のことから、スクリプト側ではなく、InDesign上のフレームの重なり方による特定条件下でイメージオブジェクトが拾えないことが原因と思われます。
graphicの入ったフレーム自体を処理対象にできないか考えてみることにしました。
以上ご報告でした<(__)>。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 16, 2022 Jun 16, 2022

リンクをクリップボードにコピー

コピー完了

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

 

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

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

スクリーンショット 2022-06-17 11.59.40.png

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 17, 2022 Jun 17, 2022

リンクをクリップボードにコピー

コピー完了

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

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 20, 2022 Jun 20, 2022

リンクをクリップボードにコピー

コピー完了

最新

id.omega様

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

まさにこの通りでした!
myDoc.allGraphicsにすると処理が止まらなくなると思っていたら3行目消すの忘れてました。間違えていてすいません。
下記のソースで動きました。

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

ajabon grinsmith様
id.omega様
ありがとうございました!。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 13, 2022 Jun 13, 2022

リンクをクリップボードにコピー

コピー完了

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 14, 2022 Jun 14, 2022

リンクをクリップボードにコピー

コピー完了

Ten A様

 

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

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines