vb.net в InDesign Scripting - Группировка текстовых фреймов - PullRequest
0 голосов
/ 18 августа 2010

Я хочу сгруппировать текстовые кадры в моем скрипте InDesign CS3 vb.net. Он работал для InDesign 2.0, но не работает с InDesign CS3. Вот мой код:

Dim myDoc As InDesign.Document = Nothing
Dim myGroup As InDesign.Group = Nothing
Dim myObjectList(2)

myObjectList.SetValue(myOuterTextFrame, 0)
myObjectList.SetValue(myInnerTextFrame, 1)
myObjectList.SetValue(myContentTextFrame, 2)

myGroup = myDoc.Groups.Add(myObjectList) 

Получение ошибки «Невозможно привести объект типа« System.Object [] »к типу« InDesign.Objects »."

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

Я знаю, что вы просили об этом давно, поэтому я в основном отвечаю за будущие поиски. Я не нашел полностью управляемого способа сделать это с помощью .Net Framework и, поверьте мне, я искал его. Я пробовал миллион разных типов, подклассов, рефлексии, вы называете это. В конечном итоге сработал JavaScript. Ниже приведен метод, который принимает объект InDesign.Document и два или более целых числа, которые представляют идентификаторы элементов InDesign. Затем он создает JavaScript и InDesign выполняет его. Наконец, он возвращает InDesign.Group, созданную из этих объектов.

Public Function GroupObjects(ByVal indesignDocument As InDesign.Document, ByVal ParamArray objectIds() As Integer) As InDesign.Group
    'Sanity checks
    If indesignDocument Is Nothing Then Throw New ArgumentNullException("indesignDocument")
    If objectIds Is Nothing OrElse objectIds.Count < 2 Then Throw New ArgumentException("You must pass at least 2 object ids")

    'We'll assign a unique label to the group that we create in JavaScript so that we can find it in managed code later
    Dim GID = Guid.NewGuid().ToString()

    'Create the JavaScript
    Dim Buf As New StringBuilder()
    Buf.AppendLine("var items = new Array();")
    For Each ID In objectIds
        Buf.AppendFormat("items.push(app.activeWindow.activePage.pageItems.itemByID({0}));", ID)
        Buf.AppendLine()
    Next
    Buf.AppendLine("var g = app.activeWindow.activePage.groups.add(items);")
    Buf.AppendFormat("g.label='{0}';", GID)

    Dim IA = indesignDocument.Parent
    IA.DoScript(Buf.ToString(), InDesign.idScriptLanguage.idJavascript)

    'Loop through all document groups looking for the object with the label created above
    For Each G As InDesign.Group In indesignDocument.Groups
        If Not String.IsNullOrWhiteSpace(G.Label) AndAlso G.Label = GID Then Return G
    Next
    Return Nothing
End Function

Чтобы использовать его в своем коде, вы сказали бы:

Dim MyGroup = GroupObjects(myOuterTextFrame, myInnerTextFrame, myContentTextFrame)
1 голос
/ 21 февраля 2013

Этот работал для меня:

        Type type = Type.GetTypeFromProgID("InDesign.Application");
        Host = (InDesign.Application)Activator.CreateInstance(type);

        InDesign.Objects o = Host.CreateCollection();
0 голосов
/ 29 сентября 2011

Я нашел свой ответ в Примерах сценариев InDesign - в примере сценария Neon приведены примеры группировки

...