Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2011-11-15

[][][]選択したページアイテムを新規ドキュメントに複製して、アートボードをフィットさせる

D

/*
    duplicate_and_fit_for_selection
    選択したページアイテムを新規ドキュメントに複製して、アートボードをフィットさせる
    for Illustrator CS5
    (c)2011 seuzo
    
   2011-11-15   ver.0.1 とりあえず
*/

#target "Illustrator"

//複数のオブジェクト全体のvisibleBoundsを得る
function get_bounds(my_objs) {
    var my_bounds = my_objs[0].visibleBounds;
    var my_Left = 0;
    var my_Right = 1;
    var my_Top = 2;
    var my_Bottom = 3; 
    for ( var i = 1; i < my_objs.length ; i ++ ) { 
        my_bounds[my_Left] = Math.min( my_bounds[my_Left], my_objs[i].visibleBounds[my_Left]);
        my_bounds[my_Right] = Math.max( my_bounds[my_Right], my_objs[i].visibleBounds[my_Right]);
        my_bounds[my_Top] = Math.max( my_bounds[my_Top], my_objs[i].visibleBounds[my_Top]);
        my_bounds[my_Bottom] = Math.min( my_bounds[my_Bottom], my_objs[i].visibleBounds[my_Bottom]);
    }
    return my_bounds;
}

//メイン
function main(){
    var my_dup = true;//新規ドキュメントを作って複製するモード
    var my_doc = app.documents[0];//ドキュメント
    var my_abi = my_doc.artboards.getActiveArtboardIndex();//インデックス
    var my_ab = my_doc.artboards[my_abi];//アートボードオブジェクト
    var my_objs = my_doc.selection;//選択したオブジェクト。とりあえず、アートボードをまたぐ選択は考慮していない。

    if (my_objs.length > 0) {
        var my_bounds = get_bounds(my_objs);
        
        //複製モードかどうか
        if (my_dup) {
            var new_doc = app.documents.add();//新規ドキュメント
            var new_ab = new_doc.artboards[0];

            //オブジェクトの複製
            for (var i = 0; i < my_objs.length; i++) {
                var tmp_position = my_objs[i].position;
                var tmp_obj = my_objs[i].duplicate(new_doc, ElementPlacement.PLACEATEND);
                tmp_obj.position = tmp_position;
            }
            new_ab.artboardRect = my_bounds;//アートボードの大きさを合わせる
        } else {
            my_ab.artboardRect = my_bounds;
        }
    }
}
main();

2009-12-23

[][]DTP Booster 010はIllustrator特集

DTP Booster 009(Tokyo/100119)(2010年1月19日、アップルストア銀座で開催)

2010年1月19日(火)18:30-21:00、アップルストア銀座3Fで行われるDTP Booster 010はIllustrator特集です。

スピーカーは「あかつき@おばなのDTP稼業録」のあかつきさんと、「イラレで便利」の倉田タカシさんです。

こうしたスピーカーの方々が、ぽんぽんと出てくるところがDTP Boosterの魅力ですね。たいへん楽しみにしております。

2009-09-17

[][]「IllustratorCS4のアップデータ充ててますよね?」と言われても、URLが違う。

IllustratorCS4のアップデータ充ててますよね? - いわもとぶろぐ

と言われても、示されているURLのリンク先が違います。(追記:2009-09-19T22:04:21+0900 現在リンクは修正されています)コメントしたいんですが、コメント欄がないので、ここで指摘します。

正しいURLはこちら:

Adobe Illustrator CS4 14.0.1 アップデート (Macintosh)

このままだと、単なる揚げ足取りなので^^、ちょっとだけ捕捉しておきます。このアップデータを適用しても「Illustrator」メニューの「Illustratorについて…」のアバウトスクリーン上では「14.0.0」のままです。

f:id:seuzo:20090917190248p:image

Finderから見る情報ウィンドウ内でも同様です。

f:id:seuzo:20090917191403p:image

上記URLに示されているように

9.「 ヘルプ」メニュー>「システム情報...」を選択し、システム情報ダイアログを表示し、Adobe CoolType のバージョン情報を確認します。

10.ご使用のAdobeCoolType コンポーネントのバージョンが「5.06.06.2650 53.381268」の場合はアップデートが成功しています。

から確認しなくちゃいけません。うーん、なんてことだろう。。。「14.0.1」っていうドットリリースじゃなかったという意味かしら。

2009-08-19

[][][][]フォントの言語を調べる(Illustrator編)

IllustratorのTextFontオブジェクトにはwritingScriptプロパティがありません。だから言語属性はわかりません。Illustrator Scriptingチームにはもっと頑張って欲しいと思います。おしまひ。

だと、あんまりなのでチカラワザの方法を紹介する。

エディタで「~/Library/Caches/Adobe/TypeSupport/AdobeFnt11.lst」を開いてみてほしい。ひとつのフォントブロックがこんな感じでフォーマットされている。

%BeginFont
Handler:CarbonHandler
FontType:CID
FMFontFormat:OTTO
FontName:KozMinPro-Bold
FamilyName:Kozuka Mincho Pro
StyleName:B
FullName:Kozuka Mincho Pro B
MenuName:小塚明朝 Pro B
StyleBits:2
FamilyNameNative:小塚明朝 Pro
StyleNameNative:B
FullNameNative:小塚明朝 Pro B
WritingScript:Japanese
WritingScriptsMatch:yes
FONDName:小塚明朝 Pro B
FONDStyle:0
isCFF:yes
WeightClass:700
WidthClass:5
AngleClass:0
%EndFont

このファイルを使用するのはInDesignとIllustratorのCS3とCS4である。Photoshopではこのファイルは参照されない。

このファイルを読んで特定の言語のフォントリストを作るにはこんな感じになる。実際には「name of text fonts」のリストと比べて使えるかどうかを検査する必要があるかもしれない。

--------------------------------------------------------●言語別フォントのリストを返す。kind_languageには「"Roman"」「"Japanese"」が使える
to get_locale_fonts(kind_language)
	set fonts_list to {} --返り値
	set bs to ASCII character 128
	set font_db_path to "~/Library/Caches/Adobe/TypeSupport/AdobeFnt11.lst"
	set font_db to do shell script "tr " & bs & bs & "r " & bs & bs & "n < " & font_db_path & " | perl -ne 'print if s/^(FontName:|WritingScript:)//;'"
	if font_db is "" then return false --読み込みに失敗している。
	
	repeat with i from 2 to (count paragraph of font_db) by 2
		if paragraph i of font_db is kind_language then
			set end of fonts_list to paragraph (i - 1) of font_db
		end if
	end repeat
	return fonts_list
end get_locale_fonts

my get_locale_fonts("Japanese")

シェルで読み込んでいるので、Mac専用。

Illustratorで使うというと、たとえばこんな感じ。ここでいうと、入力された文字に日本語が入っていたら、日本語フォントだけを一覧で出すようになっている。

D

2009-08-06

[][][]選択テキストの文字ツメ関係をすべて解除する

kamisetoさんのIllustratorで文字属性を変更するスクリプト。しかも正規表現つきですばらしい。

イラストレーターで正規表現とテキストの変形 - なにする?DTP+WEB

で、ツメ関係とか元に戻したい時、DTP Transitさんがおっしゃるとおりショートカットでは直せないです。もちろん、kamisetoさんのスクリプトでも戻せますが、GUIを出すほどじゃない。

InDesignのカーニングをリセットにする最強ショートカット:command+option+Qキー - DTP Transit

スクリプトで書いて戻したらいいじゃない。ってことで書いてみました。キーボードショートカットも割り付けたらいいじゃない。

/*
release_mojitume.jsx
(c)2009 seuzo.jp
Illustrator CS4の各種文字ツメを解除します。解除したいツメ種類は設定で制御できます。


2009-08-05	とりあえず
2009-08-06	ver.0.2	ひと文字づつの処理をやめてselectionをそのまま使うようにした。少し速くなったか。あれ? 昨日はこの書き方ではダメだったんだけどな...
*/

//////設定
var release_kerning = true;//カーニングを解除するかどうか
var release_tracking =true;//トラッキングを解除するかどうか
var release_tsume =true;//文字ツメを解除するかどうか
var release_aki =true;//文字の前後のアキを解除するかどうか
var release_proportionalMetrics = true;//プロポーショナルメトリックスを解除するかどうか


function main(){
	var my_selection, i;
	
	if (app.documents.length === 0) {
		alert("ドキュメントが開かれていません");
		return;
	}
	if (app.documents[0].selection.length === 0) {
		alert("テキストを選択してください");
		return;
	}
	my_selection = app.documents[0].selection;
	if (my_selection.constructor.name !== "TextRange") {
		alert("テキストを選択してください");
		return;
	}
	
	if (release_kerning) {
		my_selection.kerning = 0;
	}
	if (release_tracking) {
		my_selection.characterAttributes.tracking = 0;
	}
	if (release_tsume) {
		my_selection.characterAttributes.Tsume = 0;
	}
	if (release_aki) {
		my_selection.characterAttributes.akiRight = -1;
		my_selection.characterAttributes.akiLeft = -1;
	}
	if(release_proportionalMetrics) {
		my_selection.characterAttributes.proportionalMetrics = false;
	}
}

main();

素人っぽくてすいません。最近Illustrator使わなくて^^

しかしながら、恐ろしく遅いんですけれど。。。書き方違うのかなあ。 まあ、Illstratorのスクリプトって前から遅いなあと思ってました(ASも遅い)。InDesignだったらおそらくすぐ終わる。同じAdobe製品なのになんでこんなに違うんだろう?

(追記:2009-08-6)コードを少し変えました。少し速くなったと思います。昨日はダメだった書き方なのにな... おかしい^^ もうちょっと改良するかも。


(追記:2009-08-06T16:40:00JST)複数のテキストフレームに対応できるようにした。

(追記:2012-04-17T00:09:16+0900)ベースラインシフト、水平比率、垂直比率を解除できるようにした。

/*
release_mojitume.jsx
(c)2009 seuzo.jp
Illustrator CS4の各種文字ツメを解除します。解除したいツメ種類は設定で制御できます。


2009-08-05	とりあえず
2009-08-06	ver.0.2	ひと文字づつの処理をやめてselectionをそのまま使うようにした。少し速くなったか。あれ? 昨日はこの書き方ではダメだったんだけどな...
2009-08-06	ver.0.3	テキストフレームを(複数)選択していてもテキストを処理できるようにした
2012-04-16  ver0.4  ベースラインシフト、水平比率、垂直比率を解除できるようにした
*/

//////設定(グローバル変数)
var release_kerning = true;//カーニングを解除するかどうか
var release_tracking =true;//トラッキングを解除するかどうか
var release_baselineShift =true;//ベースラインシフトを解除するかどうか
var release_scale =true;//水平比率、垂直比率を解除するかどうか
var release_tsume =true;//文字ツメを解除するかどうか
var release_aki =true;//文字の前後のアキを解除するかどうか
var release_proportionalMetrics = true;//プロポーショナルメトリックスを解除するかどうか
var alert_mode = true;//選択オブジェクトが違う時にアラートダイアログを出すかどうか

function release_mojitume(text_obj) {
	if (release_kerning) {
		text_obj.kerning = 0;
	}
	if (release_tracking) {
		text_obj.characterAttributes.tracking = 0;
	}
	if (release_baselineShift) {
		text_obj.characterAttributes.baselineShift = 0;
	}
	if (release_scale) {
		text_obj.characterAttributes.horizontalScale = 100;
		text_obj.characterAttributes.verticalScale = 100;
	}
	if (release_tsume) {
		text_obj.characterAttributes.Tsume = 0;//動かないことがある!
	}
	if (release_aki) {
		text_obj.characterAttributes.akiRight = -1;
		text_obj.characterAttributes.akiLeft = -1;
	}
	if(release_proportionalMetrics) {
		text_obj.characterAttributes.proportionalMetrics = false;
	}
}

function main(){
	var my_selection, i;
	
	if (app.documents.length === 0) {
		if (alert_mode) {alert("ドキュメントが開かれていません")}
		return;
	}
	if (app.documents[0].selection.length === 0) {
		if (alert_mode) {alert("テキストまたはテキストフレームを選択してください")}
		return;
	}
	my_selection = app.documents[0].selection;
	if (my_selection.constructor.name === "TextRange") {
		release_mojitume(my_selection);
	} else if (my_selection.constructor.name === "Array") {
		for (i =0; i < my_selection.length; i++) {
			if(my_selection[i] instanceof TextFrame) {
				release_mojitume(my_selection[i].textRange);
			}
		}
	} else {
		if (alert_mode) {alert("テキストまたはテキストフレームを選択してください")}
		return;
	}
}

main();