« 桜と菜の花 | メイン | Behanceを始めてみました。その他、動向など。 »

2014年3月19日

Indesign / 指定ディレクトリ下の*.inddに指定されてインストールされてないフォントを列挙してテキストファイルに書き出す >>Indesign 

Indesign で 指定ディレクトリ下の*.inddでフォントが環境下にないものを列挙するスクリプトサンプル
IdCS4,5.5で確認。
目視でフォントリストをみて、エラーのフォントをメモしていくなんてやってられるか、と。ということで以前に作ったもの。ファイルが多いプロジェクトだと役に立つと思う。

This script creates a list of missing fonts in an environment of specified directory under *. Indd in Indesign.

/* 
JSX Start
*/
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;//CS3でのおまじない(ダイアログウインドウの表示許可みたいなもの)

F_main();

function F_main() {
	wObj = app.dialogs.add({ name:"選択してください" });
	tmp1 = wObj.dialogColumns.add();
	tmp2 = tmp1.radiobuttonGroups.add();

//	tmp3_1 = tmp2.radiobuttonControls.add({staticLabel: "ErrList", minWidth:120, checkedState:true});

	var wObj_show = wObj.show();
	if(wObj_show == false){	//選択ダイアログでキャンセルを押したらここを通る
		exit();
	}
	
	var document_open_folder = Folder.selectDialog("Indesignドキュメントのあるフォルダを選択してください");
	if (document_open_folder == null){	//フォルダ選択ダイアログでキャンセルを押したらここを通る
		exit();
	}

	var save_folder = Folder.selectDialog("保存するフォルダを選択してください");
	if (save_folder == null){	//フォルダ選択ダイアログでキャンセルを押したらここを通る
		exit();
	}

	var indd_List = F_findFile(document_open_folder); //関数呼び出し(選択フォルダ以下全てのinddファイル取得)
	if ( indd_List.length===0 ) { //返り値の配列が0なら
		alert("Indesignファイルが見つかりませんでした");
		exit();
	}

//	if (tmp3_1.checkedState == true){	//★★★PS保存の場合★★★
		F_errFonts(indd_List,save_folder);
//	}

	alert("終了しました");
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//再帰処理のfunction
function F_findFile(document_open_folder) {
	var indd_List=[]; //返り値用の配列
	var all_List = document_open_folder.getFiles(); //フォルダの内容を全て取得
	for (var i=0; i < all_List.length; i++) {
		if(all_List[i] instanceof Folder) { //フォルダなら...
			var res = F_findFile(all_List[i]); //再帰的呼び出し
			indd_List=indd_List.concat(res); //返り値を配列に加える(配列の結合)
		}
		var all_List_fName = all_List[i].name;
		if (all_List_fName.match (/\.indd/)) {
			indd_List.push(all_List[i]);
		}
	}
	return indd_List; //配列を返す
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function F_errFonts(indd_List,save_folder){
var msgs = "";

	var PDFfolder_name = save_folder.fsName;	//save_folderから保存フォルダのフルパスをとり変数PDFfolder_nameに入れる

	myFileName = "/" + PDFfolder_name + "/" + "errorfonts_with.txt"; 
	myFileObject = new File(myFileName); 
	myFlag = myFileObject.open("w"); 


	//プログレスバー処理*******************************************************
	function createProgressBarPanel (){
			var pBar = new Window("window", "Err吐き出し中");
			pBar.msg = pBar.add("statictext", [12,12,400,32], "処理中...");
			pBar.progressBar = pBar.add("progressbar", [12,32,400,54],0,indd_List.length);
			return pBar;
	}
	var pbarPanel = createProgressBarPanel();
	var bar_num = 1;
	//*********************************************************************

app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT; //CS3でのおまじない(ダイアログウインドウの表示許可みたいなもの)


	function readFont() {

	  myDocument = app.activeDocument;
	  for (var i = 0; i < myDocument.fonts.length; i++)
	  {
	    var fontObj = myDocument.fonts[i];
	    //$.writeln(fontObj.name);

		   if (fontObj.status != FontStatus.INSTALLED)
		   {
				//var fontName = fontObj.fontFamily + " " + fontObj.fontStyleName;
				//tmpArray.push(fontObj.name);
				//errormsg += docFonts[i].fontFamily + '\r';

				msgs = msgs + file_name + "\t" + fontObj.fontFamily +  "\r";
		   		//$.writeln(fontObj.name);
	       }

	  }
	}


	for(j = 0; j < indd_List.length; j++){
		app.open(File(indd_List[j]));	//ファイルを開く

		pbarPanel.show();//プログレスバー処理******

		var file_name = app.activeDocument.name;	//今開いているドキュメントの名前をfile_nameに取得
		readFont();

		app.activeDocument.close(SaveOptions.no);	//ドキュメントを保存しないで閉じる

		pbarPanel.progressBar.value = bar_num;//プログレスバー処理******
		bar_num = bar_num + 1;//プログレスバー処理******

	}	//forの閉じ
	pbarPanel.close();//プログレスバー処理******

	//alert(msgs);
	myFileObject.write(msgs); 

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
twitterこの記事をTwitterでみんなに教える。

投稿者 debizoh : 2014年3月19日 16:01



トラックバック

現在、この記事はトラックバックを受け付けておりません。


コメント

現在、この記事はコメントを受け付けておりません。