記事一覧

VB、JS以外でスクリプト

VB、JS以外の言語のInDesignスクリプト比較。
内容は、新規ドキュメントを作成し、1ページ目にテキストフレームを作り文字を入れるという簡単なものです。

■ruby
---------------------------------------------------------------
require 'win32ole'

oID = WIN32OLE.new('InDesign.Application.CS2_J')
oDoc = oID.Documents.Add()

oTFrm = oDoc.Pages(1).TextFrames.Add()
oTFrm.GeometricBounds = [10,20,30,40]
oTFrm.Contents = "文字"
---------------------------------------------------------------

■perl
---------------------------------------------------------------
use Win32::OLE;

my $oID = Win32::OLE->GetActiveObject('InDesign.Application.CS2_J')
|| Win32::OLE->new('InDesign.Application.CS2_J');

my $oDoc = $oID->Documents->Add();
my $oTFrm = $oDoc->Pages(1)->TextFrames->Add();
$oTFrm->{GeometricBounds} = [10,20,30,40];
$oTFrm->{Contents} = "文字";
---------------------------------------------------------------

プロパティやメソッド名はVBと同じなので、テキスト処理でrubyやperlを使っている方は、VBSよりrubyなどの方がよいかも。


■c#(事前バインディング)
---------------------------------------------------------------
Type InDesignType = Type.GetTypeFromProgID("InDesign.Application.CS2_J");
InDesign.Application oID = (InDesign.Application)Activator.CreateInstance(InDesignType);

InDesign.Document oDoc = (InDesign.Document)oID.Documents.Add(true);
InDesign.TextFrame oTFrm = (InDesign.TextFrame)oDoc.TextFrames.Add(Type.Missing, InDesign.idLocationOptions.idUnknown, Type.Missing);

oTFrm.GeometricBounds = new object[] { 10, 20, 30, 40 };
oTFrm.Contents = "文字";
---------------------------------------------------------------

■c#(遅延バインディング)
---------------------------------------------------------------
Type InDesignType = Type.GetTypeFromProgID("InDesign.Application.CS2_J");
object oID = InDesignType.InvokeMember(null, BindingFlags.CreateInstance, null, null, null);

object oDocs = oID.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, oID, null);
object oDoc = oDocs.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, oDocs, null);

object oTFrms = oDoc.GetType().InvokeMember("TextFrames", BindingFlags.GetProperty, null, oDoc, null);
object oTFrm = oTFrms.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, oTFrms, null);
oTFrm.GetType().InvokeMember("GeometricBounds", BindingFlags.SetProperty,
null, oTFrm, new object[] { new object[] { 10.0, 20.0, 30.0, 40.0 } });
oTFrm.GetType().InvokeMember("Contents", BindingFlags.SetProperty, null, oTFrm, new object[] { "文字" });
---------------------------------------------------------------

c#は、ここで公開しているスクリプトの開発言語です。
InDesignスクリプトの開発言語としてはあまりおすすめできません。。。(^^;)