Skip to main content
Participating Frequently
May 16, 2023
Answered

現在のページ番号を、印刷可能領域のテキストフレームに通常テキストとして残したい

  • May 16, 2023
  • 2 replies
  • 1082 views

InDesignで1000ページ近くあるカタログの台割変更をしようとしています。

カタログは複数のドキュメントに分かれています。

クライアントからの指定で、「印刷可能領域」に台割変更前の「旧ページ番号」を残す必要があります。

既存データには「印刷可能領域」に旧ページ番号のテキストフレームが存在していて、

それを利用して、検索置換や様々な方法を考え調べましたところ、

 

こちらのフォーラムで解決済みになっていた投稿で紹介されていたスクリプトにたどり着きました。


>現在のページ番号をテキストとして書き出したい


こちらを使わせていただいたところ要件にマッチすると思ったのですが、

印刷可能領域にあるテキストフレームについては、検索置換されませんでした。


スクリプトで印刷可能領域を含めて検索置換する方法など教えていただけないでしょうか
よろしくお願い致します。

 

作業環境:

Mac OS X 10.14.6
InDesign 2020(15.1.3)

 

 

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

エラーの原因は空のテキストフレームが含まれているからだと思われます。

スクリプト中ほどの//テキストフレームなら置換の次の行を

 

if(doc.pages[i].allPageItems[j].characters.length>0) doc.pages[i].allPageItems[j].changeGrep();

にして実行してみて下さい。

2 replies

ajabon grinsmith
Community Expert
Community Expert
May 16, 2023

参照先スレッドでスクリプトの大部分を書いた人です(詰めが甘くて正解マーク取りこぼしましたが)。

 

データがないと、ヒアリングから入らないといけないわけですが、

「印刷可能領域にあるテキストフレーム」は、ページ領域にかすりもしていない状態でしょうか?

その状況で「現在のページ番号」は正しく表示されているんでしょうか?

 

ページ領域にかすっていない=ペーストボード上のオブジェクト(親がページではなくスプレッド)だと動作の対象外のはずです。

 

あと、試されたスクリプトは正解マークのついた投稿のものでしょうか?

それ以前のやつは欠陥ありますよ。

Participating Frequently
May 17, 2023

早速のご返信ありがとうございます。

 

>「印刷可能領域にあるテキストフレーム」は、ページ領域にかすりもしていない状態でしょうか?

>その状況で「現在のページ番号」は正しく表示されているんでしょうか?

 

データで「旧ページ番号」は添付画像のようになっておりまして、

「現在のページ番号」も正しく表示されています。

 

>あと、試されたスクリプトは正解マークのついた投稿のものでしょうか?

「↓正解を見る」の先にありましたスクリプトを使わせていただいています。

 

現状データは、「旧ページ番号」は通常テキストになっており、

それを検索置換で「現在のページ番号」に置き換えたのち、スクリプトを試させていただいています。

 

試しに

旧ページ番号とマスターページ以外のオブジェクトを削除してスクリプトを実行したところ

「印刷可能領域にある旧ページ番号」はテキストに正しく変換されました。

 

データがCS時代から繰り返しバージョン更新してきたデータだからでしょうか

カタログに使われているInDesignデータは細かく200近くのファイルに分割されており、

ファイルサイズも10MB近くあるものがほとんどです。

 

また部分的にですが本文中において、ページ参照用に「構造」が使われていますが、

「構造」を削除してもエラーが返されてしまいました。

 

 

ajabon grinsmith
Community Expert
Community Expert
May 17, 2023

ごめんなさい要件がまるでつかめておりません。

 

お先に気になっていた点を手元で確認しました。

・ページ領域に噛んでいないテキストフレームでも「裁ち落とし(塗り足し)」、「印刷可能領域」いずれかの範囲内であれば「現在のページ番号」が反映される

  これを知りませんでした。こちらの業務で一般に行わないので…

 

・印刷可能範囲の領域内にあり「現在のページ番号」が反映されたテキストーフレームでも、親はそのページではなくスプレッドである

  関係あるかまだわかりませんが、そういう状況のようです。

 

 

不明点というか、まあ不明点

>クライアントからの指定で、「印刷可能領域」に台割変更前の「旧ページ番号」を残す必要があります。

>既存データには「印刷可能領域」に旧ページ番号のテキストフレームが存在していて、

 

これは「既存データには『印刷可能領域』に、旧ページ番号を入れるためのテキストフレームが存在しているが、中身のテキストはまだ何も入っていない(もしくはダミーテキストが入っている)

で解釈正しいですか?

現在のページ番号を入れる→テキスト化する→台割変更する(ここで初めて「旧」という扱いになる)

ということですかね。たぶん。

 

参照先スレッド

現在のページ番号をテキストとして書き出したい

の、最終のスクリプトを見返していて、検索置換設定の初期化が抜けていたのに気がつきました。

効果あるかわかりませんが、以下で試してみてもらえますか。

function pepsi(){
    var findGrepPrefOrg = app.findGrepPreferences.properties; //検索設定・置換設定の元
    var changeGrepPrefOrg = app.changeGrepPreferences.properties;
    app.findGrepPreferences = NothingEnum.NOTHING;
    app.changeGrepPreferences = NothingEnum.NOTHING;
    app.findGrepPreferences.findWhat = "~N"; //現在のページ番号

    var doc = app.activeDocument; //処理対象は最前面ドキュメント全体

    for(var i = 0; i < doc.pages.length; i++){ //ページ単位でループ
        app.changeGrepPreferences.changeTo = doc.pages[i].name; //置換文字列はページ名
		for(var j = 0; j < doc.pages[i].allPageItems.length; j++){ //ページ内アイテムをグループを無視してループ
			itemtype = doc.pages[i].allPageItems[j].constructor.name; //アイテムのタイプを取得
			if (itemtype == "TextFrame") { //テキストフレームなら置換
				doc.pages[i].allPageItems[j].changeGrep();
			}
		}
    }

    app.findGrepPreferences.properties = findGrepPrefOrg; //検索設定・置換設定モドス
    changeGrepPrefOrg = app.changeGrepPreferences.properties = changeGrepPrefOrg;
}

//取り消しを一度で済ませる仕組み
app.doScript(pepsi, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT); 
Participating Frequently
May 16, 2023

あと、新規ドキュメントでは問題なかったのですが
実際に作業するデータではこちらのエラーがでました。

こちらについてもご教授いただけますでしょうか
よろしくお願いいたします。

Participating Frequently
May 16, 2023

連投申し訳ございません。
テスト用の新規ドキュメントでは
>現在のページ番号をテキストとして書き出したい
こちらのスクリプトで「印刷可能領域」の現在のページ番号をテキストにすることができました。

エラーについて、引き続きご教授お願いします。

何卒よろしくお願いいたします。