速度を上げたいのですが

[455]速度を上げたいのですが | 投稿者:ようすけ | 投稿日:2007/12/11(Tue) 15:55:07
お世話になります。
以前、Indesign2.0からCS3へ移行するにあたり、
テキストフレームへのデータの流し込みの仕方について
質問させてもらいました。
結局、2.0のときのように1文では済まないようなので、
Indesignのファイルにある全てのオブジェクト(アイテム?)
から同じ名前のついたテキストフレームを探し出し、
そこにデータを入れるという方法でPDFを作成することは
できるようになりました。
が!!2.0のときより遅いのです...
毎回、全部を探しているからだと思うのですが、
これを違う方法にすることはできないかと
思いまして、質問させていただきました。

環境は
Indesign CS3
VB6.0
です。
以下、変更したコードです。


For Each AllObj In Doc.AllPageItems
   If TypeName(AllObj) = "TextFrame" Then
       If AllObj.AssociatedXMLElement.MarkupTag.Name = Tag Then
           Set wTextFrame = AllObj
           Exit For
       End If
   End If
Next

よろしくお願いします。
» 1
[457]Re: 速度を上げたいのですが | 投稿者:梅花藻 | 投稿日:2007/12/12(Wed) 15:53:03
Mac OSX 10.4.9 InDesign CS2 4.0.5 のJavaScriptですが、

var objs = app.activeDocument.allPageItems;
for (var i=0;i<objs.length;i++){
   if (objs[i].constructor.name == "TextFrame"){//ココをなくせば半分程度時間短縮
       if (objs[i].associatedXMLElement != null && objs[i].associatedXMLElement.markupTag.name == "タグ"){
           var wTextFrame = objs[i];
           break;
       }
   }//コレも
}

テキストフレームか否かを調べるif文を外せば、半分程度の時間で抜けられるようです。
» 2
[463]Re: 速度を上げたいのですが | 投稿者:ようすけ | 投稿日:2007/12/13(Thu) 17:37:38
ありがとうございます!!
早速試してみます。
» 3
[467]Re: 速度を上げたいのですが | 投稿者:ようすけ | 投稿日:2007/12/14(Fri) 18:47:26
ダメでしたぁ...
自分の環境(WindowsXP,VB6,IndesignCS3)では
ほとんど変わらなかったです。

まだまだ、格闘中です。

ありがとうございました。
» 4
[468]Re: 速度を上げたいのですが | 投稿者:梅花藻 | 投稿日:2007/12/16(Sun) 09:45:04
プログラムの中で何度もこのルーチンを呼び出して(あるいは、for文の入れ子のなかで何度も処理して)いるのならば、アルゴリズムの見直しをした方がよいと思います。

先に markupTag.name に対応したテキストフレームのリストを作成する処理を行い、あとはそのタグネームで対応するテキストフレームを特定する形にするとか。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア