PDF書き出し

結局なにをしたかったかと言うと、特定のフォルダのインデザインファイルのPDF書き出しの自動化。
フォントチェックとリンクチェックをしてから書き出し。

OSX10.4 CS3


メインスクリプト

#include "~/Library/IddJavascript/spaceiru.jsx"

//////////////////////
////PDF書き出しのプリセット名の指定があったら書く。指定がない場合は空にする。
var pdfPreSetName = '[プレス品質]';
/////////////////////


////ファイルオープン時に警告ダイアログを出さない。
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;


if(spaceiru.system.selectFolder('インデザインフォルダ')== false){
	alert('ユーザーによってキャンセルされました。');
	exit();
}

////選択フォルダ
var baseFolder = spaceiru.system.getFoldername();

////書き出しフォルダ
if(spaceiru.system.selectFolder('書き出しフォルダ')== false){
	alert('ユーザーによってキャンセルされました。');
	exit();
}

var outputFolder = spaceiru.system.getFoldername();

///確認
if(confirm('本当に実行しますか?') == false)
{
	exit();
}



///ライブラリ初期設定 選択フォルダのパスを渡す
spaceiru.idd.initIdd(baseFolder);

///ライブラリメイン処理
spaceiru.idd.getIdd();

///結果取得(パスが配列で返る)
var iddFile = spaceiru.idd.getResult();

///結果取得(ファイル名)
var iddFileName = spaceiru.idd.getResult('file');


for(var i=0;i<iddFile.length;i++)
{
	
	//オープン
	openfile(iddFile[i]);
	
	//リンクとフォントのチェックして書き出し
	
	if((spaceiru.idd.linkCheck() == true) && (spaceiru.idd.fontCheck() == true)){
		
		exportPDF(outputFolder,iddFileName[i]);
		
	}
	
	//クローズ
	closefile();	
}



////ファイルオープン時の警告ダイアログを元に戻す
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;


///////////////////function/////////////////////////

function openfile(name){
	
	var fileobj;
	fileobj = app.open(new File(name));

}

function closefile(){
	
	app.activeDocument.close(SaveOptions.no);

}


function exportPDF(path,name){
		
		////拡張子をpdfにする
		name = name.replace (/\.[^\.]*$/,".pdf");
		path = path + '/' + name;
		
		fileobj = new File(path);
		
		if(pdfPreSetName == '')
		{
				app.activeDocument.exportFile(ExportFormat.pdfType, fileobj, false);
		}else{
				app.activeDocument.exportFile(ExportFormat.pdfType, fileobj, false,pdfPreSetName);
		}
	
	}


インクルードファイル spaceiru.jsx

//namespace spaceiru
//
//
//

var spaceiru = new Object();
spaceiru.system = new Object();
spaceiru.idd = new Object();


spaceiru.foldername = "";


spaceiru.system.selectFolder = function selectFolder(mes){
	
			if(mes == undefined){
				mes = 'フォルダを選択してください。';
			}
	
			var folderObj;
			var foldername;
			
			foldername = Folder.selectDialog (mes);
		
			if(foldername != null){
				
				spaceiru.system.setFoldername(foldername);
				
				return true;
				
			}else{
				
				return false;
				
			}
	}

spaceiru.system.getFoldername = function getFoldername(){
	
				return spaceiru.foldername;
}


spaceiru.system.setFoldername = function setFoldername(name){
	
				spaceiru.foldername = name;
				
}


//////////////////idd File Select/////////////////
///////////////////////////////////////////////

spaceiru.idd.initIdd = function initIdd(folder){
	
			spaceiru.idd.baseFolder = folder;
			spaceiru.idd.presentFolder = 	spaceiru.idd.baseFolder;
			spaceiru.idd.count = 0;
			spaceiru.idd.presentRoop = new Array();

			spaceiru.idd.baseFilecont = (new Folder(spaceiru.idd.baseFolder)).getFiles().length;

			spaceiru.idd.checkFolderName;
			
			///結果を入れる配列 フルパス
			spaceiru.idd.result = new Array();
			
			////結果を入れる配列 ファイル名
			spaceiru.idd.resultFilename = new Array();
			
}


spaceiru.idd.getIdd = function getIdd(){
	

	spaceiru.idd.presentRoop[0] = 0;

	if(spaceiru.idd.baseFilecont == 0) return;
	

	while(spaceiru.idd.presentFolder != false)
	{
		
		spaceiru.idd.presentFolder = spaceiru.idd.checkFolder(spaceiru.idd.presentFolder,spaceiru.idd.presentRoop[spaceiru.idd.count]);
		
		
		if(spaceiru.idd.presentFolder == false)
		{
			if(spaceiru.idd.count > 0){
				spaceiru.idd.count -= 1;
			}
			
			///親にセット
			spaceiru.idd.presentFolder = (new Folder(spaceiru.idd.checkFolderName)).parent.fsName;
			
			if((spaceiru.idd.count == 0) && ( spaceiru.idd.baseFilecont  == spaceiru.idd.presentRoop[0]))
			{
				
				///終了
				spaceiru.idd.presentFolder = false;
				
			}
			
		}else{
			///次の階層
			spaceiru.idd.count += 1;
			spaceiru.idd.presentRoop[spaceiru.idd.count] = 0;
		}
		
	}

}


spaceiru.idd.checkFolder = function checkFolder(name,start){
	
	var list =  (new Folder(name)).getFiles ();
	var result = false;


	for(var i=start;i < list.length;i++)
	{
		
		
		spaceiru.idd.presentRoop[spaceiru.idd.count] = i +1 ;
		
		
		var len = (new Folder(list[i].fsName)).getFiles().length;
		if(len > 0)
		{
			result = list[i].fsName;
			break;
			
		}else{
			
			spaceiru.idd.setResult(list[i]);

			
		}
		
	}
	
	
	spaceiru.idd.checkFolderName = name;
	
	return result;
	

}

/////ファイル名チェック
spaceiru.idd.setResult = function setResult(obj){
	
	var name = obj.name;
	var path = obj.fsName;
	
	if(name.match(/\.indd$/g))
	{
	      spaceiru.idd.result.push(path);
		  spaceiru.idd.resultFilename.push(name);
		  
	}
	
}


////引数があればファイル名を返す
spaceiru.idd.getResult = function getResult(type){

		if(type == undefined){
				return spaceiru.idd.result;
		}else{
			
			return spaceiru.idd.resultFilename;
		}
	
	

}


/////リンクチェック
////全てリンクされてたらTrue
spaceiru.idd.linkCheck = function linkCheck(){
	
	var allLinks = app.activeDocument.links;
	var result = true;
	
	for(var i=0; i < allLinks.length;i++)
	{
				if((allLinks[i].status == LinkStatus.linkMissing) || (allLinks[i].status == LinkStatus.linkOutOfDate))
				{
					result = false;
					break;
				}
	}
	
	return result;
	
}

////フォントチェック
///全て適用されたらTrue
spaceiru.idd.fontCheck = function fontCheck(){
	
	var docObj = app.activeDocument;
	var result = true;
	
	for(var i=0; i < docObj.fonts.length;i++)
	{
		if(docObj.fonts[i].status != FontStatus.installed)
		{
			result = false;
			break;
		}
	}
	
	return result;
	
}

どーだろう?