k_ikiの雑記帳

DTPのこと、創作のことなど、思いつくまま

ドキュメントサイズの変更 その3

今回の例のように原点座標がカスタマイズされている場合もあるけれど、
CS4以前とCS5以降とではそもそもIllustratorのデフォルト原点が違う。
今回はバージョンCS4のみで保存されたデータだという前提条件なので
前回のスクリプト内容で問題ないのだが、
万が一CS5以降で保存されたデータが混じっていたら厄介だ。
 
そこで、shspage様で紹介されていた手法をお借りすることに。
Javascript自体を勉強しなきゃ知らないことだらけだ俺。
thisの使い方ってこういう感じなのですね。もの凄く勉強になりました。
 
ついでに、ドキュメントの横幅と高さを入力するようにした。
 

/*
CS5以降で保存されたドキュメントが混じっている場合は
CS5以降のバージョンの Illustrator で開く。
保存バージョンを変更したければ
saveOptions.compatibility の行を編集する。
*/
function Origin(){
    this.ver15_or_later = (parseFloat(version.substr(0, 2)) >= 15); // CS5 or later
    this.ver14 = (version.substr(0, 2) == "14"); // CS4
    
    if(this.ver15_or_later){
        this.saved_coord_system = app.coordinateSystem;
        app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;

        var idx  = app.activeDocument.artboards.getActiveArtboardIndex();
        this.ab  = app.activeDocument.artboards[idx];
        
        var o   = this.ab.rulerOrigin;
        var r   = this.ab.artboardRect;
        this.saved_origin = [o[0], o[1]];
        this.ab.rulerOrigin = [0, r[1] - r[3]];
        
    } else if(this.ver14){
        var o = app.activeDocument.rulerOrigin;
        this.saved_origin = [o[0], o[1]];
        app.activeDocument.rulerOrigin = [0, 0];
    }

    this.restore = function(){
        if(this.ver15_or_later){
            this.ab.rulerOrigin = this.saved_origin;
            app.coordinateSystem = this.saved_coord_system;
            
        } else if(this.ver14){
            app.activeDocument.rulerOrigin = this.saved_origin;
        }
    };
        
    return this;
}
// ---------------------------------------------------------
var x_width = prompt("横幅は何mm?","210");
var y_height = prompt("高さは何mm?","297");
var folderObj = Folder.selectDialog("Illustratorファイルの入っているフォルダを選択してください");
var folder = Folder.selectDialog("保存するフォルダを選択してください");

if (folderObj != null){
	fileList = new Array;
	fileList = folderObj.getFiles("*.ai");
	for (f = 0 ; f <= fileList.length-1 ; f++){
		var fileObj = new File(fileList[f]);
		open(fileObj);
		flag = fileObj.open();
		if (flag == true){
			var my_Doc = app.activeDocument;
			var saveOptions = new IllustratorSaveOptions();
			//下記、CS5:Compatibility.ILLUSTRATOR15 / CS6:Compatibility.ILLUSTRATOR16 とする
			saveOptions.compatibility = Compatibility.ILLUSTRATOR14;// バージョン:CS4
			saveOptions.fontSubsetThreshold = 100;// 使用している文字の割合が次より少ない場合サブセットにする。
			saveOptions.pdfCompatible = true;// PDF互換ファイルを作成するか否か
			saveOptions.embedICCProfile = true;// ICCプロファイルを埋め込むか否か 【10 or later】
			saveOptions.embedLinkedFiles = false;// 配置した画像を含むか否か 【7 or later】
			saveOptions.compressed = false;// 圧縮を使用するか否か
			saveOptions.flattenOutput = OutputFlattening.PRESERVEAPPEARANCE;// アピアランスを保持 / パスを保持:PRESERVEPATHS
			saveOptions.overprint = PDFOverprint.PRESERVEPDFOVERPRINT;// オーバープリントを保持 / オーバープリントを破棄:DISCARDPDFOVERPRINT
			
			var g_origin = Origin();
			
			var mm = 2.834645/1;
			var my_x = x_width*mm;
			var my_y = y_height*mm;
			var ido_x = my_Doc.width/2 - my_x/2;
			var ido_y = my_Doc.height/2 - my_y/2;

			var recObj = my_Doc.pathItems.rectangle(ido_y, ido_x, my_x, - my_y);
			recObj.filled = false;
			recObj.stroked = false;
			my_Doc.cropBox = recObj.visibleBounds;

			g_origin.restore();
			
			//ファイル名に手を加えたい場合
			/*
			var namecount = (fileObj.name).lastIndexOf("."); // fileObj.nameの値で"."の位置を取得
			var fname = (fileObj.name).substr(0, namecount);
			var savefile = new File(folder.fsName+"/"+fname+"_CS4.ai");// バージョン名と拡張子は適宜変更
			*/

			//ファイル名を変更しない場合
			var savefile = new File(folder.fsName);

			my_Doc.saveAs(savefile,saveOptions);
			activeDocument.close(SaveOptions.DONOTSAVECHANGES);
			}
		}
	}
alert("処理が完了しました。スクリプトを終了します。");