Вопрос

Я хочу группировать текстовые кадры в моем Script 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

Я нашел свой ответ в образцах сценариев Indesign - Сценарий неонового образца дал группировочные примеры

Другие советы

Я знаю, что вы попросили это давно, поэтому я в основном отвечая на будущие поиски. Я не нашел полностью управляемый способ сделать это, используя .NET Framework и поверь мне, я искал это. Я пробовал миллион различных каста, подклассы, отражение, вы называете его. Что в конечном итоге работало в конце, был JavaScript. Ниже приведен метод, который принимает объект InDesign.document и два или более целых числа, которые представляют идентификаторы предметов InDesign. Затем он создает какой-то JavaScript и у него есть undesign. Наконец, он возвращает Indesign. Группа, созданная из этих объектов.

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)

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

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

        InDesign.Objects o = Host.CreateCollection();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top