سؤال

أرغب في تجميع إطارات النص في البرنامج النصي 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

لقد وجدت إجابتي في عينات البرمجة النصية للديون - أعطى نص عينة النيون أمثلة تجميع

نصائح أخرى

أعلم أنك طلبت هذا منذ فترة طويلة ، لذا فأنا في الغالب أجيب على عمليات البحث المستقبلية. لم أجد طريقة تتم إدارتها بالكامل للقيام بذلك باستخدام إطار .NET وصدقوني ، لقد بحثت عنه. لقد جربت مليون طاقم مختلف ، الفئات الفرعية ، التفكير ، سمها ما شئت. ما عمل في النهاية في النهاية هو 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)

هذا واحد عمل بالنسبة لي:

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

        InDesign.Objects o = Host.CreateCollection();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top