VB.NET في برنامج Indesign Scripting - تجميع النصوص
-
29-09-2019 - |
سؤال
أرغب في تجميع إطارات النص في البرنامج النصي 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();