InDesignの最近のブログ記事

データ結合とはInDesignにUTF-16のテキストを読み込ませて定型の流し込みを行う機能です。
データ結合を使うと非常に便利に名刺や名簿などが作れるのですが問題があります。

サロゲートペア文字
サロゲートペア文字をご存知でしょうか?くわしい説明はできませんが、 UTF-16で特殊な文字を表現する文字です。

データ結合でサロゲートペア文字が消える
(普通に配置で読み込んだ場合は大丈夫)
データ結合にサロゲートペア文字を含む文字を読み込ませるとエラーもなく文字が消えます。



(画像01,02,03)
サロゲート文字の一覧はネットで検索したら出てきます。
土の吉=>[𠮷]なんかはリストにはありませんがこの文字もサロゲートペア文字のようです。

データ結合で流し込むという場合は名刺や名簿のように人名含むことが多く、さらに何千と行数があったりして
データ結合後に、流し込んだ文字があっているかをみつけるのは困難です。

ということで流し込む前にサロゲート文字があるかどうかわかれば便利かと思いサロゲートペアチェッカーを作りました。
(正規表現はネットで見つけましたので私が作ったわけではありません。)

使い方はInDesignのスクリプトにインストールして[サロゲートペアチェッカー.jsx]をダブルクリックします。
テキストファイルを聞いて来ますので選択します。サトゲートペア文字が見つかれば[サロゲートペアエラー.txt]を出力します。




ダウンロードはこちら
surrogate.zip

InDesign56
//サロゲートペアのチェック
//ダイアログ表示のおまじない
app.scriptPreferences.userInteractionLevel=1699311169;

main();

//**************************************************
//テキスト読み込み
//**************************************************
function main(){
	filename = File.openDialog("ファイルを指定してください");
	if(filename){
	}{
		fileObj = new File(filename);
		flag = fileObj.open("r");
		if (flag == true){
			var m = 1;
			var errorstr = "";
			while(!fileObj.eof){
				text = fileObj.readln();
				var result = text.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/);
				if(result != null){errorstr += m+"行目:"+result+"\n"}
				m++;
			}
			fileObj.close();
			if(errorstr == ""){
				alert("サロゲートペア文字はありませんでした。");
			}else{
				var my_folder = filename.parent;
				write_file('' + my_folder + '/サロゲートペアエラー.txt', errorstr);//ファイル書き込み
				alert("サロゲートペア文字が見つかりました。\n読み込みファイルと同じディレクトリに[サロゲートペアエラー.txt]を\n書き出しましたので\n書き出したファイルを見てしっかりチェックしてください。");
			}
		}
	}
}

//市川せうぞーさんより
//http://d.hatena.ne.jp/seuzo/20100918/1284799291
////////////////////////////////////////////データをファイルに書き込む 。書き込んだファイルオブジェクトを返す
function write_file(my_write_file_path, my_data) {
	var my_file_obj = new File(my_write_file_path);
	my_file_obj.encoding = "UTF-8";//★この行がないとShift-JISで書き出される
	if(my_file_obj.open("w")) {
		my_file_obj.write(my_data);
		my_file_obj.close();
		return my_file_obj;
	} else {
		myerror("ファイルが開けません\n" + my_write_file_path);
	}
}

11)ルビ処理支援WORDコピペ版

| コメント(4) | トラックバック(1)

協力(Twitterアカウント)
@KiwiBird2004 @monokano @ryusei3000 @AJABON

今回はみなさんに協力してもらいながら作りました。ありがとうございます。
いきさつは下に書いておきます。
=================================================

InDesignCS4(たぶんCS2〜CS6でも動く)で
選択されたテキストフレームか文字列をルビ処理します。

WORDからルビ付き文字をコピー&ペーストすると
誕生日(たんじょうび)のようになります。

その文字を選択するかテキストフレームを選択してスクリプトを実行するとルビがつきます。

オーバーフローテキストフレームは全ての文字をルビ処理します。

誕生日(たんじょうび)
なら誕生日にグループルビが付きます。

誕生日(たん.じょう.び)
なら誕生日にモノルビ"."区切りで付きます。
(普通こういうのは","区切りとかなのですがWindowsのテンキーでも打てるピリオドにしました。)
モノルビの場合、親文字の数とルビの数が合わない場合はエラーになります。

モノルビで親文字の数とルビの数が合わない場合

漢字、カタカナ、ひらがな、アルファベット数字にルビがつきます(インラインは不可)
親文字は同じ種類の文字の連続する部分までとなります。
先輩諸氏(しょし)なら、諸氏だけにルビがついてほしいですが、漢字の連続なので「先輩諸氏」に対してルビがつきます。

連結テキストフレームに関しては見えている部分のみ処理します。
全て処理したい時はテキスト選択で実行してください。

いきさつ
今回はINDD2012京都でルビ振りスクリプトを紹介したのですがそのスクリプトに対して
きぃうぃ(KiwiBird2004) ‏さんから
WORDからルビ付き文字をコピー&ペーストしたものに対応できませんか?というツイートがありました。
「誕生日(たんじょうび)」こんな感じのテキストになるのですが、
ルビの親文字はどこまでか判定しないといけないので少し手間取るなと思いましたが
面白そうとのことで
流星光輝 ‏@ryusei3000さん
ものかの ‏@monokanoさん
AJABON GRINSMITH ‏@AJABONさん
が一緒にやりましょうと協力してくれる事になりました。
テストや正規表現、エラー処理等ツイッターでやりとりしながら完成したスクリプトになります。
わたしひとりで作った物ではないのですがオープンソースという事で自由に改訂してもらえればと思いますが
改訂した物をアップする際はソースも公開してください。

ダウンロードはこちら
ruby05.zip

InDesign56
101個目のスクリプト

■■■このスクリプトについて■■■
InDesignCS4でドキュメントの選択されたグループを新規ドキュメントに複製します。CS5.5でも動作確認。

■■■使い方■■■
グループオブジェクトを選択します。
スクリプトパレットの「このスクリプト」をダブルクリックします。
新規ドキュメントが作られ、余白の真ん中にグループが配置されます。(余白は10。ptかmmはドキュメント依存)

■■■どんな時に使うか■■■
カタログなどで一個一個別々のPDFを作ってほしいと頼まれた場合便利です。

下は選択されたグループ

下のように新規ドキュメントに配置される

画像は作った五色百人一首のゲームアプリです。

ダウンロードはこちら
dup_group.zip

InDesign55

var motoDocu = app.activeDocument;
var mysele = motoDocu.selection;
var myGCount = motoDocu.selection.length;

for(var i = 0;i < myGCount;i++){
    var sele2 = motoDocu.selection[i];
    var myB = sele2.geometricBounds;
    var myH = myB[2] - myB[0];
    var myW = myB[3] - myB[1];
    
    var newdocu = app.documents.add();
    newdocu.documentPreferences.pageWidth = myW + 20;
    newdocu.documentPreferences.pageHeight = myH + 20;
    var newObj = sele2.duplicate(newdocu.pages[0],[0,0]);
    var newB = newObj.geometricBounds;
    newObj.move(undefined,[-(newB[1])+10,-newB[0]+10]);
}

ちょっとソースは恥ずかしい・・・

このスクリプトで100個目!INDD2012 KYOTO 20121130記念

エントリー一覧

OpenID対応しています OpenIDについて
Powered by Movable Type 6.0.3
印刷会社、大阪の遊文舎