Skip to main content
masakawai
Inspiring
May 8, 2023
解決済み

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

  • May 8, 2023
  • 返信数 2.
  • 1892 ビュー

InDesignで制作(下版済)したカタログのデータを使って、ウェブサイトを制作しようとしています。

カタログの商品には注文コードがついているのですが、このコードはカタログのページ番号を含んでいます。


例)K22-11401(商品カテゴリ記号: K22、ページ番号:114、連番:01)

ここでページ番号の部分は「現在のページ番号」マーカーを使っています。

ウェブサイト制作にあたってこの注文コードを書きだしたいのですが、マーカーの部分が抜けて書き出されてしまいます。(K22-01 となる)
テキスト選択してコピー&ペーストしても抜けてしまいます。

 

テキスト変数とは異なるようで、テキストに変換する方法が見つかりませんでした。

現在のページ番号を含んだ状態でテキストを書き出す方法、またはテキストに変換する方法はありますでしょうか?

このトピックへの返信は締め切られました。
解決に役立った回答 masakawai

教えていただいたスクリプトを試してみました。

動作はOkでしたが、下記の問題がありました。

  • グループ内のテキストが置換されない
  • テキストフレーム以外のアイテムがあると「changeGrep is not a function」エラーとなる

 

そこで下記のように書き直してみたところ、無事動作いたしました。

function pepsi(){
    var findGrepPrefOrg = app.findGrepPreferences.properties; //検索設定・置換設定の元
    var changeGrepPrefOrg = app.changeGrepPreferences.properties;
    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); 

 
もう少しスマートな書き方があれば教えていただきたいですが、とりあえずの要望は満たせそうです。
ありがとうございました。

返信数 2

Ryu-chang
Participating Frequently
May 9, 2023

注文コードに段落スタイルがあたっているならば、目次機能を使って、注文コードを目次として作成するとコピペできるかと思います。

 

ajabon grinsmith
Community Expert
Community Expert
May 9, 2023

おおっ、と思って試したら

ページ名がページインデックスになってしまうんですが、

どこか設定不備でしょうか…

Ryu-chang
Participating Frequently
May 10, 2023

あれ?ページ番号の割り当てって影響受けないんでしたっけ…。テスト不足でした💧
そうなると自分でやるならば、ページ番号をなしではなく項目前後どちらかに入れて正規表現で置換する思います。

ajabon grinsmith
Community Expert
Community Expert
May 8, 2023

めったにやらない作業なので、はたして標準機能として可能かどうか自信がなくて

ぐぐってみたらやはりできない感じですね。

 

よその掲示板の過去ログで同様の質問を見つけましたが、

結局はスクリプトで解決したのかな、結末があやふやなままでした。

そのスクリプト(友人が書いたものでした)は今回の要件にそぐっていない様子だったので

ちょっと連休ボケのリハビリを込めて書いてみました。10分かかりました。。

使えそうならぜひどうぞ。

 

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

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

    for(var i = 0; i < doc.pages.length; i++){ //ページ単位でループ
        app.changeGrepPreferences.changeTo = doc.pages[i].name; //置換文字列はページ名
        doc.pages[i].pageItems.everyItem().changeGrep();
    }

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

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

 

 

こんなドキュメントで動作テストしました。

 

CS3以降ならどのバージョンでも動くと思います。

masakawai
masakawai作成者解決!
Inspiring
May 14, 2023

教えていただいたスクリプトを試してみました。

動作はOkでしたが、下記の問題がありました。

  • グループ内のテキストが置換されない
  • テキストフレーム以外のアイテムがあると「changeGrep is not a function」エラーとなる

 

そこで下記のように書き直してみたところ、無事動作いたしました。

function pepsi(){
    var findGrepPrefOrg = app.findGrepPreferences.properties; //検索設定・置換設定の元
    var changeGrepPrefOrg = app.changeGrepPreferences.properties;
    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); 

 
もう少しスマートな書き方があれば教えていただきたいですが、とりあえずの要望は満たせそうです。
ありがとうございました。

ajabon grinsmith
Community Expert
Community Expert
May 14, 2023

あー…すみませんpageItemsで取得できるオブジェクト群の内容をIllustratorと混同しちゃってたみたいですね。

(そしていままさに作業中のIllustratorスクリプトでも逆の事をやってしまってうなだれてました)

 

改案のスクリプト、グループ、アンカーオブジェクト、表組などごっちゃごちゃなドキュメントを用意して試してみたところ全て処理されました。問題なさそうですね。ありがとうございます。

 

ええと、以後気をつけますw