כללי סקריפטים לאינדי בויזואל סטודיו חלק ב'

  • הוסף לסימניות
  • #1
לאחר האשכול והתעוררות הציבור כאן, בהחלט ניתן לכתוב סקריפטים לאינדי בויזואל סטדיו. הן אמנם שאין הרבה תעוד על זה מכיון שהשפה היעודית לזה היא באמת הג"ס, אמנם בהחלט אפשר למצוא ידיים ורגלים, ואף יותר.
אני מצרף סלושיין שנכתב בC#, שבו נוצר מסמך אינדי ובו כמה פסקאות עם טקסט.
כמובן יש ליבא את הספריה בAdd refernce ואחרי זה לעשות USING כמבואר בסולשיין.
בתווקה שיביא להרבה דברים טובים, ובפרט לאחר ניצול הכלים המדהימים היותר שיש בויזאול סטדיו, והכי חשוב, הדבאגר.
 

קבצים מצורפים

  • indesignCSHARP.rar
    KB 249.2 · צפיות: 11
  • הוסף לסימניות
  • #2
כמה קישורים מצוינים לפורומי תיכנות היכולים להוות הכירות עם הנושא:

(תודה ל 5127109 שבזכותו חקרתי קצת את הנושא וגיליתי דברים מעניינים)

Create an Adobe InDesign Document with c#

Accessing Adobe InDesign CS COM Objects from .NET

Use Adobe's Indesign COM in asp.net application with automatic publication flow

How to create our own plugins in adobe indesign - JAVA

How to use InDesign SDK on Visual Studio 2013 for C++ project?
 
  • הוסף לסימניות
  • #3
אתה מדבר על כתיבת סקריפטים לאינדזיין דרך הויזואל סטודיו או כתיבת תוכנה בC# שתנהל את אינדזיין, חיצונית לה בעצם? זה עניין אחר לגמרי כמדומני

נ"ב אני לא רואה שום בעהי בדיבאגר של האקסטנדיד סקריפט, אדרבא, החלונית JS שלו נוחה מאד. ויש כל המידע הרצוי. מה החסרון בעניך?
 
  • הוסף לסימניות
  • #4
זה לא ממש סקריפט לאינדי כמו שאנחנו מכירים אלא באמת תכנית חיצונית שמסמנת את המסמך הנוכחי כמטרה ושם עושה כל מיני דברים. אפשר לשלב טפסים ופקדים שאליהם אנו רגילים מהVS. אין בזה שום חסרון אלא נוחות והרגל.
 
  • הוסף לסימניות
  • #5
נכתב ע"י 5127109;2099272:
זה לא ממש סקריפט לאינדי כמו שאנחנו מכירים אלא באמת תכנית חיצונית שמסמנת את המסמך הנוכחי כמטרה ושם עושה כל מיני דברים. אפשר לשלב טפסים ופקדים שאליהם אנו רגילים מהVS. אין בזה שום חסרון אלא נוחות והרגל.

אכן.
בנתיים לקחתי מה שהעלתם ופישטתי אותו מעט, מצורף טקסט שלם של תוכנית קונסול.
כדי להפעיל אותו יש מקודם ליצור רפרנס לCOM בשם אינדזיין.
using InDesign;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace onindesign
{
class Program
{
static void Main(string[] args)
{
Type type = Type.GetTypeFromProgID("InDesign.Application");
InDesign.Application application = (InDesign.Application)Activator.CreateInstance(type);

// Set unit type
application.ViewPreferences.HorizontalMeasurementUnits = idMeasurementUnits.idMillimeters;
application.ViewPreferences.VerticalMeasurementUnits = idMeasurementUnits.idMillimeters;

// Create new document
application.Documents.Add(true, application.DocumentPresets.FirstItem());

// Get active document and change some settings
Document document = application.ActiveDocument;
document.DocumentPreferences.FacingPages = false;
document.DocumentPreferences.PageWidth = 210;
document.DocumentPreferences.PageHeight = 297;

// Get first page (already created) and set margins
Page page = (Page)document.Pages[1];
page.MarginPreferences.Top = 10;
page.MarginPreferences.Bottom = 10;
page.MarginPreferences.Left = 20;
page.MarginPreferences.Right = 10;

// Create rectangle and fit an image into it
InDesign.Rectangle rectangle = page.Rectangles.Add(document.Layers.FirstItem(), idLocationOptions.idUnknown, page);
rectangle.GeometricBounds = new[] { 20, 30, 120, 130 };
//rectangle.Place(@"c:\temp\sample.png", false);
rectangle.Fit(idFitOptions.idContentToFrame);

// Create second page and set margins
page = document.Pages.Add(idLocationOptions.idUnknown, document);
page.MarginPreferences.Top = 10;
page.MarginPreferences.Bottom = 10;
page.MarginPreferences.Left = 20;
page.MarginPreferences.Right = 10;

// Create a text frame and add some text
TextFrame textFrame = page.TextFrames.Add(document.Layers.FirstItem(), idLocationOptions.idUnknown, page);
textFrame.GeometricBounds = new[] { 20, 30, 120, 130 };
textFrame.Contents = "line1\rline2\rline3";
IEnumerator paragraphs = textFrame.Paragraphs.GetEnumerator();
for (int j = 0; j < textFrame.Paragraphs.Count; j++)
{
paragraphs.MoveNext();
Paragraph paragraph = ((Paragraph)paragraphs.Current);
paragraph.Justification = idJustification.idCenterAlign;
paragraph.PointSize = 15 - j;
paragraph.FontStyle = "Regular";
paragraph.AppliedFont = "Verdana";
}
}
}
}
 
  • הוסף לסימניות
  • #6
מצד היכולות יש לבדוק האם זה רב יכולת כמו פלאג אינים בC++ או שזה כמו סקריפט בלבד
 
  • הוסף לסימניות
  • #7
אם אתה עושה את זה קונסול, אתה מפספס לדעתי הרבה מבחינת הUI ומה שאתה כמשתמש יכול להכניס. WinForms נותן לך את האפשרות להכין UserControl ועוד הרבה פקדים שפשוט בגרירה לאזור הם שם ולא צריך להגדיר אותם כל פעם מחדש ואת כל התכונות שלהם.
הן אמת שפעולה פשוטה כמו קביעת סגנון תו חדש יכולה להעשות היטב ובלי הרבה בלאגן עם הקונסול, אבל לחיפוש והחלפה מתקדם וכן כל מיני דברים שצריכים קלט מהמשתמש קונסול לא יכול לעזור כל כך.
[וחלילה, שלא ישמע שאני לא אוחז מקונסול].
 
  • הוסף לסימניות
  • #8
החסרון כאן זה שאתה מגביל את עצמך למשתמשי Windows, כאשר ייתכן שלמעשה רוב משתמשי אינדיזיין עובדים על מק.
 
  • הוסף לסימניות
  • #9
נכון, חלק ממה שהג"ס היא השפה המקובלת היום לסקריפטינג מסוג זה [ למרות שיש גם ויביסקריפט בדוגמאות שבאות עם התוכנה], הוא מהסיבה האמורה לעיל.
והן אמת שיתכן שרובא דרובא הם במק - אבל - האם גם רוב אנשים שעוסקי בעימוד ספרים יהודיים וכדומה - האם גם הם רובם במק?
בכל מקרה זה אכן מגביל מבחינת מכירות וכו', אבל כרגע זה יותר לשימוש אישי או להגשמת רעיונות, בצרוף הכלים הנפלאים של הVS.
 
  • הוסף לסימניות
  • #10
שים לב שיש לזה עוד חסרון גדול, אם הבנתי נכון, זה דורש להשתמש בCOM הנכון של אינדזיין, בהתאם לגרסה ספציפית ממש. אתה כותב לCS6 אז יעבוד רק שם...(למשל)
 
  • הוסף לסימניות
  • #11
זה דורש להשתמש בCOM הנכון של אינדזיין,
גם באינדי יש גרסאות ויש לזה התיחסות בסקריפטינג.
בעיות בתאימות הם לחם חוקו של כל מפתח. אני מאמין שעם הנסיון בעז"ה תגיע הישועה גם בזה.
 
  • הוסף לסימניות
  • #12
נכתב ע"י 5127109;2099740:
גם באינדי יש גרסאות ויש לזה התיחסות בסקריפטינג.
בעיות בתאימות הם לחם חוקו של כל מפתח. אני מאמין שעם הנסיון בעז"ה תגיע הישועה גם בזה.

בסקריפט רגיל כמעט אין צורך, רק אם אתה עובד אם אוביקט שלא קיים בגרסה מסויימת, ורוצה להשתמש בחלופי, אז אתה יכול לעשות זאת על ידיד בירור הגרסה ושימוש בשמהו אחר. אבל לא מוכרח.
וכל סקריפט ישן כמעט תמיד יפעל גם בגרסה חדשה.
ואילו כאן, לא.

לגבי מאק יש לברר אופציה של עבודה עם פרויקט מונו.
 
  • הוסף לסימניות
  • #13
אבל בכלל JS בתור שפה לא מהודרת ולא בטוחה, הרבה יותר נוחה לעבודה. כל המשתנים דינמיים ופונקציות מופעלות בלי הרבה שאלות. והכל הוא אוביקט, גם פונקציה.

תעשה רגע את זה בC# או בכל שפה סטטית:
This user does not have permission to use the HTML BB code.
או את זהThis user does not have permission to use the HTML BB code.
 
  • הוסף לסימניות
  • #14
נכון. כל דבר גם פונקציה הוא מחלקה ותוצר שלה בג"ס, וזאת מכיון שהיא לא שפה טיפוסית חזקה. בC# יש הרבה המרות של אובקטים, ופולימורפזים שיכול להוציא מהדעת, אבל מי שרגיל בכך, אדרבה.
קשה לי לדמיין בשלב זה איך יראה שימוש נרחב בפולימורפיזם באינדי, כי אחרי הכל האובקטים שלה די ברורים, ועוד חזון למועד.
ואכן, כיון שהוא פלטפורמט דוטנט גם מונו יכול לעזור למשתמשי מק. אבל לא נראה לי שחובבי האינדי יתקינו מונו בשביל זה...
 

פרוגבוט

תוכן שיווקי
פרסומת

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה