Skip to main content
y.tani
Inspiring
September 5, 2017
Answered

illustrator javascriptとC#のPageItem

  • September 5, 2017
  • 1 reply
  • 2136 views

illustrator CC2017を使用しております。

javascriptでは「pageItem」という、グループ、パス、複合パス等どれでも受けれるインターフェースがあると思うのですが

C#のAPIではpageItemが無いようなのですが、代わりになるインターフェースはあるんでしょうか?

pageItems(リストの方)のはjavascript側もC#側も存在するので存在自体はあるのではないかと思いますが…

C#のAPI側では提供されていないんでしょうか?

C#でpageItemsをforeachでループする場合に、pageItemが無いのでobject扱いになってしまい

pageItemが持っているプロパティにアクセスできず困っています。

宜しくお願い致します。

This topic has been closed for replies.
Correct answer noellabo

dynamicで受け取って、PageItemTypeでswitchするならこんな感じ?

var app = new Illustrator.Application();
var doc = app.ActiveDocument;
foreach (Illustrator.Layer layer in doc.Layers)
{
    foreach (dynamic pageItem in layer.PageItems)
    {
         switch ((Illustrator.AiPageItemType)pageItem.PageItemType)
         {
              case Illustrator.AiPageItemType.aiPathItem:
                  var pathItem = pageItem as Illustrator.PathItem;
           
                  break;
        }
    }
}

1 reply

Omachi
Legend
September 5, 2017

確かにCOMコンポーネントを使用した時に、PageItemsコレクションオブジェクトはあっても

PageItemオブジェクトはないですね。ただ、それぞれのTypeNameは取得できますので、

それに応じた処理を行うのではないでしょうか(当然それぞれのオブジェクトに共通で

使えるものもあると思います)。

以下の図はExcel VBAの画面ですが、C#でも同じものがあるはずです。

noellabo
noellaboCorrect answer
Inspiring
September 5, 2017

dynamicで受け取って、PageItemTypeでswitchするならこんな感じ?

var app = new Illustrator.Application();
var doc = app.ActiveDocument;
foreach (Illustrator.Layer layer in doc.Layers)
{
    foreach (dynamic pageItem in layer.PageItems)
    {
         switch ((Illustrator.AiPageItemType)pageItem.PageItemType)
         {
              case Illustrator.AiPageItemType.aiPathItem:
                  var pathItem = pageItem as Illustrator.PathItem;
           
                  break;
        }
    }
}

y.tani
y.taniAuthor
Inspiring
September 5, 2017

noellaboさん

回答ありがとうございます。

dynamicで実行時の内容を見ると中身的にはpageItemの様な感じで取得できるんですね。

position等のどのタイプでもあるプロパティを参照するのに、わざわざタイプをみないとダメなのかと思っていたのですが

この方法なら思ってたように上手く参照できそうです。

ありがとうございます。