今まで書いたスクリプトの中で今でも使えそうなやつを大まかに紹介するだけ

この記事はDTP Advent Calendar 2019の最後を飾るやつということになります。去年もなんにゃらかんにゃらで大トリを務めさせていただきました(補助席で)が…
むろん、超絶バチクソ気合の入った内容となっております。
(などとのたまうとなぜかブラフに捉えられる損なキャラ位置に置かれているんですが…ご想像の通りです)
今年いろいろありすぎてロクに更新してなかったなあ!

えーここ数年,気を抜くとInDesignの事ばっかりやってしまうと思いつつ,いつでもその時の自分の業務に直結した物しかやってないので、そこはまあ致し方なし。
折しも、自分がそこそこのスクリプトを作り始めてからちょうどほぼ10年ぐらいなので、総括…とまではいかないけど、今でも汎用性が高くて便利だなーって思えるものを独断でピッカップして、新規の使用例を交えて紹介してみます。順不同で。
本記事の概要だけ書くと非常に地味だけど、じっさい大変よこれ大変あるよ時間かかたよ。
量が量だけに、作例がテスト本意で実務とはほど遠い内容なのはご容赦を。
何が言いたいかというと、ビバビバ俺様ビバ俺様、ということです。ぜいたくをいいたいです。
スクリプト案件お待ちしております。堅牢性は最低限ですが発想力には事欠きません。


InDesign

Munchkin

マンチカン。正規表現ちょっとでもわかる人向け。
標準機能の検索でつかまえた文字列それぞれに対応した置換ができるツール。
目玉機能は数字を数値と捉えての増減置換。ヨロズ置換でマンチカン。イェーイ。ニャー。
※動画中の正規表現しくじってました。動作上は問題ないんですが
^([\d+])は ^(\d+)でOK,[㈪-㈰] は ㈪-㈰ でOKでした。録り直す元気はないw

以下、見づらい動画はYoutube上でオリジナルサイズでどうぞ。

PlaceOptionalText_2.2

※有償提供となっております
テキスト原稿をエディタからレイアウト上へ何度も何度もちまちまコピペする仕事の人向け。
専用パレットでぽんぽんとラクーに配置できます。地味に売れ続けててありがたいです。

IFA_id_1.40

※有償提供となっております
集版オペレーター向け。ドキュメント上のアタリ画像をトリミングの合わない実画像に差し替える補助ツール。Photoshopを併用します。
画像差し替え作業をやる人すべてに使ってほしい。そしておかねもちになりたい。
10年前、いちばん最初に書いたスクリプトはコレの原型。あまりにもハードルが高すぎた。

SelectionFilter

Illustratorの選択メニューに似た物を目指して作ったやつ。
選択と選択解除ができる。

SelectionExpander

ターゲットにしたオブジェクトと共通の属性をもつオブジェクトを一括選択するやつ。
たまにべんり。

id_distribute_!!_0mm

等間隔整列のパラメータ(間隔値)をスクリプトのファイル名にしておくだけでそれ専用として働く。
よく使う値のぶんだけスクリプトファイルを複製して使う。
トリミングをしくじっているので心の眼で見ましょう。

タブまとめて打つやつ

任意の挿入点から座標値を取得して、選択した段落群にまとめてタブストップを作成できる。
ウチ自身の2019年中の使用頻度はマンチカンと並びトップクラスでした。

JustificationSwitcher_id

テキストの位置はOKなのに揃え方向が残念なやつを直すもの。
これを機能縮小したIllustrator版ばっかり有名になってしまったけど、こっちが多機能なオリジナル。

gyogyomojier

CC2014まで対応のエクステンション(CC2015以降はCEP版開発までおまちください)
ギョギョモジャー(名前を付け直したい…)。テキストの行送り値を取り込み、カーソルキー移動量にセット。
そしてオブジェクトをリサイズ。
目分量で作られたレイアウトにとても便利。


Photoshop

opacity_Enhancer

Photoshopでピクセルの不透明度を100%に上げきるやつ。
自画自賛してやまないやつ。


Illustrator

ai_artboard_fitter

「アートボードをオブジェクトに合わせる」を上だけとか右以外とか部分的にできるやつ。
マスク内オブジェクトの形状も影響しちゃう残念仕様。その上でも用途は広い。

ai_trimMarkToArea

実体化したトンボをもとにアートボードを作ったり直したりするやつ。
これの出番がなくなる時代がくることを願ってやまんです。


その他

msByESTK

ExtendScriptが実行できる環境(Photoshop、Illustrator、InDesign、etc.)
で遊べるマインスイーパー。別途アイコンデータのダウンロードが必要。仕事中にぜひどうぞ(だめです)。
※空白地帯周辺のオープンに斜めが含まれていない(Windows版の動きに合っていない)と、あるふぁさんよりご報告があり、あるふぁさんが直してくれましたw 2019.12.25.15:55 再ダウンロードの上、上書きしてくださいまし。


んーな感じですね。作る側も見る側もダルいですねw
では、よいお年をー。

Facebooktwitter

「shag」のこと

えー、長く携わっておきながら自分のblogでは一切触れていなかった「shag」について、
現状とこれからのことをお話します。

「shag」計画は、中綴千頁さん作「仕上げ屋」を原型とする模倣品を制作とする物でした。
当時、本家のほうはInDesignのバージョン対応を兼ねた新バージョンがリリース目前、調整中といった様子のまま長らく動きを見せておらず、主要機能の模造を依頼されたときは業界の需要を感じ、なんとかかんとか形にしてリリースしました。
これがshagバージョン0.46です。

このあと、幾人かの開発協力を得てshagは機能を増やし、精度と信頼性を上げていきました。
当時のウチはコレを実務で大いに活用していたので、有用と思われる機能の発案はとどめるところを知らず。できるかできないかは後で考えるといった体で次第にパレットは肥大化していきました。ハリボテですけど。
それでいて操作性はそれなりのわかりやすさであったと自負していますが…
作り始めた当初、ここまで巨大なスクリプトになるとは思わず、ついついダラッとした設計をしてしまい、後でものすごく苦しむ事になりましたが。

といった流れでみちみちと完成に近付いていってたのですが。
が。
2014年夏、身辺に変化が起こりました。転職というやつです。
これにより、実務での実用・テストの機会を失いました。
加えて、アイドル歌手という職業に於けるタイトなスケジュール管理の下での開発時間捻出は非常に困難となりました。
ウチだけでなく主要開発陣についても同様の変化があったようです。
みんな忙しすぎて身動きが取れないのです。仕事の単価は下がる一方です。

そうしてほぼ2年が過ぎまして。
フリー版としてリリースした物に含まれていない機能は2つ。
処理範囲指定とフィルタリング。
処理範囲指定は完成しております。
画像の種類でふるい分けするフィルタリング機能は、脳内では完成しておりましたが手つかずに終わりました。
拙作「SelectionExpander.jsx」のソースを応用すれば雑作もない事ではあったのですが。

以上で「shag」計画はひとまずの区切りをつける形となりました。

今後のこと

正直なところ、当時の自分が書いたコードを今の自分が見て思った事は
「ぜんぜんわからん」、「ぐちゃぐちゃだなあ」、「見たくないなあ」です。
しかし根幹から書き直す時間的余裕はありません。
今後ですが、
・実装予定で結局実装しなかった機能のコントロールを削除(トルツメ)
・いずれ公開しようとしていたPro版にのみ搭載していた機能(ページ範囲指定など)を有効化
を整えた物を最終版として公開、以後はサポート作業のみ
という事で開発陣一同、手打ちとなりました。
それへの着手もいつになるかさっぱり見えないのですが。。

以上、さえない状況報告でした。

Facebooktwitter

タイトル考えてなかったけどInDesignでスクリプト覚えましょうそうしましょう(日)

どもども。ども。

前回の反響、ひとことで言うと「おー、やったー! なんかわかりそうな気がする(けどわからん)!」
手前勝手に書き殴ったスクリプトを一行ずつ解説しても、全体がなんでそんなカタチなのかを省いているため、あんまりお役に立ててなかったかもっぽいですなあ。
「スクリプト拾ってきたぜ、ちょっといじりたいぜ、でも何が書かれてるのかサッパリなんだぜ」
というときの読み解きのヒントになれば、とも思ったのですが。
手作業的思考とスクリプト的思考の垣根をとっぱらうのを先にやるべきなのでしょう。

奇しくも前回の次にやろうとした「縦組みにも対応させよう」は、実はもともと対応できちゃっててコケたため、
また、「回転のかかったテキストフレームへの対応」はあまりにもニッチすぎる上、ふつうに書ける人向けになってしまうので、今回はその「手作業ではこうだけどスクリプトではどうなの」をやります。resolve( )の出番は今度だ。。


今回もInDesignをダシに進めていきます。
例はCS6でやりますが、CS4以降ならなんでもいいです。CS3以前は今回ごめんなさい。

まず、InDesignを起動します。
対応バージョンのExtendScriptToolKit(以下ESTK)を起動します。
ESTKで「新規Javascript」を開きます。
新規書類「ソース1」が出ました。やったー。
160502a

今回はInDesign用のスクリプトを書くので、左上の対象アプリケーションをInDesignにします。
これで、ESTK上からスクリプトを実行するとInDesignを対象とすることができます。
冒頭の行に
#target indesign
と書いて実行してもも同様の結果なんですけど、まあ地味に基本からということで。。

また、右上のメニューから当該バージョンのInDesignを選択しておくと、オブジェクト名の入力補助が行われます。これ、挙動の遅さに我慢できない人もいると思うので、まあ任意で。
160502b

ではこの中にスクリプトを書いていきます。


まずは以下の一行だけ。書いたらすぐ実行してみましょう。
app.documents.add( );
実行すると新規ドキュメントが開かれます。
前回っぽく言うと、InDesignのドキュメントコレクションに要素を1つ追加しています。

理解を深めるため、確認を兼ねてちょっと書き足します。
開かれているInDesign上の新規ドキュメントは閉じちゃっていいですが、どっちでもいいです。


function pepsi ( ) {
alert (app.documents.length);
}

pepsi ( );
app.documents.add ( );
pepsi ( );


はいいきなり出しましたけど関数。Documentsのアイテム数をアラートで参照するという内容。
別々のところで計2回やる処理なので、わざとらしく関数化してみました。
pepsi( )と書いた行でalert(app.documents.length); が実行されます。
ドキュメントを追加、その前後でドキュメントの個数を確認、という内容です。


次に、新規ドキュメントの中に、なんとなく長方形を作ってみましょう。
開かれているInDesign上の新規ドキュメントは閉じちゃっていいですが、どっちでもいいです。

app.documents.add( );
app.documents[0].rectangles.add( );

一行目は最初に書いた物と同じ、新規ドキュメントを開きます。
二行目で、Documentsコレクションの0番目のアイテム(最前面ドキュメント)に長方形追加しています。
Rectangleは長方形オブジェクト。正方形でも長方形オブジェクトとなります。
この長方形は今のところ「長方形こしらえます」しか書いていないので、位置やサイズはてきとうになりますが、今回はそこまでやりません。
この長方形ができたドキュメント、次でも使うのでそのままにしといてください。


次、この長方形を削除してみましょう。
の前に、手作業だとどういう手段になるでしょうか。
・選択してdeleteキー
・選択してメニュー 編集>消去
とかでしょうか。なんにせよ選択は必須ですか。

スクリプトではこうなりますか。
ドキュメント0個目の、長方形0個目を、削除するスクリプト
app.documents[0].rectangles[0].remove( );
このように、ひとつのオブジェクトを処理するために、そのオブジェクトが何の中の、そのまた何の中にあるのか、を書かなければいけません。
めんどくさいでしょうか。まどろっこしいでしょうか。でも選択してなくても削除できるんですよこれ。わーすごーい。


もうひとつ。今度はあらかじめ手作業で、前面ドキュメント上に楕円形を1個作成しといてください。
まんまるじゃない方がいいです。
160502c

では、これを20°回転する、1行のスクリプトを書いてみましょう。
app.activeDocument.ovals[0].rotationAngle = app.activeDocument.ovals[0].rotationAngle + 20;

app.activeDocumentは、ドキュメントが何個あっても関係なく、最前面ドキュメントの事。
app.documents[0]と大差ないんですが、2個以上のドキュメントをとっかえひっかえ処理する場合以外はもうコレの方が間違いないかと。
Ovalは楕円形。まんまるでも楕円形オブジェクトとなります。
rotationAngle は、図形オブジェクトクラスが持っている回転角の値。これをプロパティといいます。用語の使用は極力避けて進めてますが、これは覚えましょう。「お前の回転角は、お前の回転角+20だわよ」と書いたわけです。決して「お前、20°回転しろ」ではないので注意。プロパティはオブジェクトの状態を表す物、という覚え方でいいんでないかなあ。命令というよりは指定、というか。ふんわり進行ですけども。
160502d

このスクリプトは、こう書くこともできます。同じ意味となります。
app.activeDocument.ovals[0].rotationAngle += 20;
この「+=」の仲間については「代入演算子」で調べるとよいです。


仮にこの楕円形を何度も何度も処理する場合、いちいち
app.activeDocument.ovals[0].rotationAngle
と書くと、書く方も読む方も疲れるので(実行する方は疲れませんが)、変数に入れてしまうとよいです。
var obj = app.activeDocument.ovals[0];
obj.rotationAngle += 20;
これで変数objを楕円形オブジェクトとして扱うことができます。

ただし、こう書くと具合が違います。
var obj = app.activeDocument.ovals[0].rotationAngle;
obj += 20;
この場合、変数objには楕円形の回転角のがなんでもないひとつの数値として代入されるだけで、いくらobjの値を変えても楕円形はビクともしません
プロパティには書き換え可能な物と読み取り専用の物があります。どれがどれなのかはオブジェクトモデルビューア(後述)を参照します。


次。引き続き、楕円形のあるドキュメントを流用します。
前面ドキュメントの0個目の楕円形をX方向に10、Y方向に20の位置に複製するスクリプト
var obj = app.activeDocument.ovals[0];
obj.duplicate (“”, [1020] );
書いたら何度か繰り返し実行してみましょう。

前述のプロパティが「お前の◯◯は◯◯だ」的な内容だったのに対し、こちらは「お前、◯◯しろ」となります。メソッド(関数)といいます。
複製されたオブジェクトは元オブジェクトの前面に作成されるので、次回実行時はその複製された楕円形が0個目として処理対象となり、結果、実行するたびずんずん右下に複製されていきます。
160502e

プロパティが状態を表す物なら、メソッドは命令そのものです。おけつに( )が必ずつきます。( )内に「どのぐらい」、「何を」といった引数が必要な物と不要な物があります。


対象オブジェクトのプロパティを見たり書き換えたり、メソッドを実行したりすることが「スクリプトで処理する」ということです。突き詰めればこれだけなのですわ。。
ある程度構文が書けるようになると、今度はその当該プロパティ探しで苦戦する事となります。間違いない。
twitter上で「おーけー流星号、◯◯のプロパティ教えて」と書くと30秒ほどで教えてもらえるという都市伝説があります。


プロパティ(メソッド)のさがしかた(日)

ESTKのヘルプメニューから「オブジェクトモデルビューア」を開きます。
過去に小さな勉強会で配布した資料よりスクショ引用。
160502f

でアプリケーションを選択すると、にそのアプリケーションで使えるクラス(オブジェクト)がだーっと出ます。そこから1つ選ぶと、
次は、まあおいといて(てきとうてきとう)
で選んだクラスが持つプロパティ、メソッドなどがだーっと出ます。そこから1つ選ぶと
にその説明やデータ型などが英語で出る、という仕組みです。英語だいすき(白目)
青の「=X」アイコンがプロパティ、赤の「{}」アイコンがメソッドです。
には、プロパティは「名前:データ型」、メソッドは「名前:返り値のデータ型」として書かれています。
任意のテキストフレームからストーリーをいじりたいと思ったら、textFrame.parentStoryと書くと辿りつけるわけです。
それでまたからStoryクラスを選んで…という。七面鳥くさいですか。ですね。


プロパティ(メソッド)のさがしかた(月)

スクリプトを書きます。プロパティを見たいオブジェクトをてきとうに変数に入れておきます。
長方形かなんか、てきとうに選択しといてください。
var a = app.selection[0];
alert(“うんこうんこうんこ”);
この2行ぶんを書いたら、2行目の行番号の脇の空いたところをカチします。赤丸がつきます。
これをブレークポイントといいます。赤丸がある行を実行する直前でスクリプトは一時停止されます。
あとで用済みになった赤丸はカチカチすると消えます。茶丸もあるんですが今回は割愛。
赤丸をつけるかわりに
$.bp( );
と書いても一時停止できるんですけど、これも今回は割愛。
160502g

行が黄色くなったらそこで一時停止中です。ここでウィンドウメニューからデータブラウザを出してみましょう。
変数aが上の方にいます。aのオブジェクトクラス名が見えますね。
これの▶︎を展開すると、aの持つプロパティやメソッドがだーっと見れます。
160502h

この中でどれかプロパティを選択すると、データブラウザの一番上にある欄に値が出ます。ここで値を書き換えるとじかにそのプロパティの値を変更できるのですが、近年バージョン(特にIllustrator)はレスポンスがイマイチ不安なので覚えなくていいです。
その代わりに、ウィンドウメニューからJavaScriptコンソールを出します。ここに式を書いてreturnすると結果が出ます。
1 + 1 と書いてreturnバシすると「結果:2」が返ります。もう電卓いらない!
長方形を選択している状態で、
a.rotationAngle と打ち込んでreturnしてみると、長方形の回転角が結果として出ます。
↑この行にまたカーソルを送り、後ろに続けて
+= 20 と打ち込んでreturnしてみると、長方形が+20°回転します。ドキュメント上ですぐには反映しないかも。
160502i「ソース1」ウィンドウの実行ボタン(再生ボタンっぽいやつ)を押すと処理は続行され、スクリプトは終了します。
停止ボタンはその時点で処理を中断終了します。
終了後、ドキュメント上ではオブジェクトが回転されているかと思います。


プロパティにはそれぞれ固有のデータ型があります。上で紹介した2通りのどちらでも確認することができます。
たいがいは数値(整数限定の場合あり)や文字列ですが、固有オブジェクトの場合もあります。
長方形の属性を見てみましょう。オブジェクトメニュー>オブジェクトの属性 で見れるやつです。
JavaScriptコンソールに以下を入力して実行
a.contentType
ウチは空のグラフィックフレームを作ったので、結果はGRAPHIC_TYPE と出ました。
バージョンによっては、よくわからん10ケタの数字が出るかもしれません。が今回は割愛。
160502j
試しにこれをテキストフレームに変換してみましょう。
オブジェクトモデルビューアでRectangleクラスを選択、contentTypeプロパティを見ると、contentTypeプロパティのデータ型はContentTypeクラスだぜ、と表示されております。
160502k

右ペインの青文字になったContentTypeをカチすると、ContentTypeクラスのオブジェクトモデルを見ることができます。
するとプロパティが3種。グラフィックフレーム、テキストフレーム、割り当てなし。 ソース1を終了して、以下を書き足します。
a.contentType = ContentType.TEXT_TYPE;
ここ、a.contentType = TEXT_TYPE; とはならないので注意。とりゃえず、「だってそうなんだもん」として覚えておきましょう。
実行すると長方形はテキストフレームに変わります。スクショありません。



まとめ(無理矢理)
・したい処理の対象になるプロパティ、メソッドを探す
・見つけたらデータ型を確認する
・データ型を確認したらプロパティの値を書き換える

ここまでざっくりでも理解できたら、あとはやる気だけっすわ。ほんとに。
次回、実際にスクリプトをゼロから書くぜって時のウチなりの組み立て方などを。

でーす。

Facebooktwitter

対象が小さいと挙動が変わっちゃってしまっちゃう操作

どもども。だんだん老害芸めいてきてますけども。

アプリケーションを操作してて、結果が一意でないモノが少し見つかったのでメモっときます。
最近たまたま見つけた分だけなので他にもきっとあるんでしょうけど、
この記事に随時追加するほどはマメではないので、読み捨てといてください。


事例その(日)

Illustratorで長方形を置いてみます。
挙動がわかりやすいように左上をアートボードのカドに合わせてあります。
160216a

バウンディングボックスで下辺をつまんで、上方向にきゅーっと縮めます。
すると。
バウンディンスボックスが少し外側につき直ります。はあ。
160216b

 

再度、下辺をつまんで、今度は下方向ににゅーっと伸ばします。
すると。どうだ。
(自堕落スクショの関係で一時的にShift押したせいでフレームがヨコにも伸びてますが許す)
160216c

表示の都合でひとまわり外側についていたバウンディングボックスがそのまま基準になって変形が行われてしまい、上辺が元の座標から大きくズレてしまう結果に。
160216d

この件、わけがわからなくてTwitterで数名様に確かめていただいたところ、
オブジェクトのサイズそのものは関係なくて、ドキュメントの画面上の表示が小さいときにこうなってしまうみたい。
バウンディングボックスのつまみポイント(なんていうの、カドとか辺の中央にある玉っこ)
が重なって潰れないようにとの施策と思われます。
PhotoshopとInDesignでは起こりませんでした。
なんか、どうでもいい箇所がどうでもいいなりにけっこうズレる事があるなあと思ってたらコレのせいだったようで。。
寸法がきっちりしてないといけない作業は基本的に値入力してるから、いいっちゃいいんですけども。
おおこわい。


 

事例その(月)

InDesignのパスファインダーパネルのヤンチャな一番手「パスの結合」
今度はこいつ。
160216e

InDesignでオープンパスを用意します。
人に頼まれてタダでトレースしてやったやつの流用ですけども。
160216f

オープンパスを選択して「パスの結合」ボタンをカチ。
えー、パスが閉じます。
160216g

今度は絵柄をめっさ縮小してから同じことします。
すると挙動が変わる。パスの座標が平均化される。
160216h

こちらは最初のイラスターの事例と違い、パス間の距離によって変わるみたい。
ちまちま試したところ、2.2166mm以下だと平均化されるようで。

しかし。
「パスの結合」ボタンの2つお隣に「パスを閉じる」ボタンというのがありまして。
機能はというと、まんま、オープンパスを閉じる物。機能がかぶってる。
ともすると、オブジェクトが小さい時の挙動がむしろ正常なんでしょうかね。
InDesign上でパスいじりもメッタにしないけど、覚えておきます(自己完結)。

にしても、
一体どっちが正しいんだろうと思ってオンラインヘルプ見たけど書いてませんでした。
期待はしてなかった。
それはそれでまたよくわからん文章が。

Adobe Community Help InDesign / パスの編集

以下引用:

InDesign では、パスファインダーパネルを使ってパスを結合することもできます。 オープンパスのパスを閉じるには、選択ツールを使用してパスを選択してから、パスファインダーパネルの「パスを閉じる」をクリックします。2 つのパスの間の終点を閉じるには、パスを選択してから「パスの結合」をクリックします。「パスの結合」を 2 回クリックすると、2 つ目の終点を結合します。

2回クリック…とな。
なんかわからんけど、やってみましょうか。
オープンパスを2つ用意。
160216i

「パスの結合」ボタンを、
1回、
160216j

2回。
ほうほうなるほど。
160216k

…でもこれ、ほんとに終点なの? と疑問に思ったら、どうも違う。
2つのオープンパスの端点のいちばん近いものが結合する仕様みたい。
始点も終点も関係ない。
160216l

ズラしてみたらこのザマだよ。
うそつきめー。

というわけです。クセを理解してうまく使ってやりましょう。
仮にバグだとしてもどうせ報告しても直りゃせんです。何度も報告したさ。
「うんー、わかったー、今度ゆっとくー」しか言われないしね。むかむか。
個人情報漏らされようがシステムに悪さするアップデートがあろうがついていくしかないんです。
アホビめー。

ですー。
あ、今回はスクリプトありません(最後に言うやつ)

 

Facebooktwitter