Skriptujeme InDesign (2): První kroky - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



VSE

Skriptujeme InDesign (2): První kroky

Adobe InDesign sazba

9. ledna 2006, 00.00 | V druhé části našeho seriálu o skriptování v InDesignu se dostaneme od teorie k praxi.
Vytvoříme a odzkoušíme první skript, na jehož analýze pak vysvětlíme řadu základních
pojmů, které je třeba při skriptování ovládat.

Po obecném výkladu o skriptování v InDesignu, který jsme přinesli v prvním díle tohoto seriálu, se můžeme pustit do samotné výuky. K výuce skriptování, resp. programování, přitom lze přistupovat různými způsoby. Nejobvyklejší bývá buďto obecný výklad, na který navazují konkrétní příklady, možná je ale i opačná varianta, tj. na konkrétních příkladech se vysvětluje obecný základ. Uvedenou druhou možnost jsme zvolili i my, neboť dle našeho názoru lépe odpovídá dané oblasti: uživatelé se většinou učí na existujících skriptech a tak se vyplatí naznačit jim způsoby, jak při takovémto "čtení" postupovat. Jak jsme již předeslali v úvodu tohoto seriálu, náš výklad bude myslet i na ty, kdo nikdy neprogramovali, a tak se dopředu omlouváme zejména těm, kdo již mají s JavaScriptem nějaké zkušenosti (navrhování webových aplikací apod.) za poněkud rozvleklý a na druhou stranu ne zas až tak exaktní způsob výkladu.

První skript: Hello World

Rituálním zvykem při výuce programování bývá, že první program, který se novic učí, má určitým způsobem pozdravit okolní svět, tj. říci "Hello World". I my takto nyní vytvoříme skript, který nejprve v prostředí InDesignu generuje nový dokument a do toho pak vloží textový rámeček s příslušným textem. Způsobů, jak daný úkol řešit, je celá řada, my nejprve zvolíme ten nejméně elegantní, postupující metodou hrubé síly a otrockého rozepisování instrukcí, který nám nicméně právě proto dovolí postupně vysvětlit základní pojmy se skriptováním v InDesignu spojené.

Postup ke zprovoznění skriptu je následující: Nejprve otevřeme textový editor, který jsme se rozhodli pro práci se skripty používat. Nejvíce po ruce je takto v případě CS2 zabudovaný ExtendScript Toolkit, jinak lze použít třeba PSPad nebo klidně i Zápisník Windows. Vytvoříme nový dokument, překopírujeme do něj následující text skriptu a skript uložíme jako helloworld.jsx do adresáře, z kterého si InDesign načítá skripty (podadresář instalace InDesignu Presets/Scripts). Skript pak spustíme z paletky Skripty InDesignu poklepáním na jeho název. Pokud vše půjde jak má, InDesign vytvoří nový dokument s daným rámečkem.

Nyní již text skriptu:

/* Prvni skript: Hello World!
S jeho pomoci se naucime zaklady zapisu kodu
a take zaklady prace s objekty, vlastnostmi a metodami v InDesignu*/
//Nejprve vytvorime dokument
app.documents.add();
//pridame textovy ramecek
app.activeDocument.textFrames.add();
//nastavime jeho rozmery
app.activeDocument.textFrames[0].geometricBounds = ["0p0", "0p0", "18p0", "18p0"];
//a priradime mu text
app.activeDocument.textFrames[0].contents = "Hello World!";

Pojďme se nyní podívat, co vše lze z daného skriptu vyčíst, co se obecných pravidel a postupů pro skriptování v InDesignu týče.

skriptid2-1f.jpg

Ukázka dokumentu vytvořeného našim skriptem

Zápis a komentáře

Námi zkoumaný skript se skládá z informací dvou typů: jednak to jsou samotné instrukce pro InDesign (resp. skriptovací engine InDesignu) a dále komentáře. Komentáře, indikované dvojicí obrácených lomítek // jsou informace, které jsou interpretem JavaScriptu ignorovány až do konce řádku, zejména pro víceřádkové komentáře se pak využívá uzavření informací do řetězců /* a */. V obou případech komentář slouží především pro informaci toho, kdo bude skript později číst, aby porozuměl struktuře, poslání, příkazům apod. Takovýmto čtenářem může být i sám autor skriptu, neboť logika věci se v daném případě rychle zapomíná. Z toho důvodu je vlastní skripty vhodné vždy komentovat, nicméně nemá asi smysl se do komentování pouštět hned na začátku, spíše až poté, kdy je vytvořen souvislejší úsek kódu, o kterém víme, že funguje. (I když jsou i tací, kdo nejprve vytvoří komentář a do něj pak doplňují konkrétní instrukce.)

Komentáře se pak rozhodně vyplatí číst u všech cizích skriptů, které se nám dostanou do rukou. Mimochodem, my při komentování v tomto tutoriálu používáme "cestinu", i když uznáváme, že není od věci učit se používat k danému účelu angličtinu, byť na začátku třeba skriptujeme jen pro své soukromé účely. Ještě jiným využitím komentářů je ladění skriptů (téma, ke kterému se v našem seriálu později rovněž dostaneme): zakomentováním se dočasně odstaví určený kód, takže lze zkoušet různé varianty řešení daného problému, odhalovat problémová místa atp.

Instrukce JavaScriptu jsou členěny do tzv. výrazů. V JavaScriptu stačí k indikaci konce výrazu použít pouze pevný konec řádku, pro příliš dlouhé výrazy, které se musí zapsat na více řádků a vůbec přehlednost a jednoznačnost zápisu je nicméně lepší používat k danému účelu středník (;).

Za poznámku stojí způsob formátování kódu skriptu. V našem příkladu není zapotřebí nějaké přehledné členění, neboť skript je krátký a instrukce v něm jdou jedna za druhou. U delších skriptů, používajících různé cykly, podmínky či funkce nicméně dodá skriptu na přehlednosti odsazení instrukcí podle jejich významu, umístění apod. pomocí mezer či tabulátorů. Více bude poznat z příkladů v následujících dílech, kdy bude struktura skriptů rozmanitější.

Objekty, metody, vlastnosti

Více než formálnost zápisu nás samozřejmě zajímá význam instrukcí použitých ve skriptu. V našem příkladu jsme použili takové instrukce, které bezprostředně pracují s InDesignem (a nevyužívají tedy pokročilejších možností obecného JavaScriptu). Znamená to tedy, že určitým způsobem zacházejí s objekty daného programu, jejich vlastnostmi (tj. atributy objektu nebo jiných objektů v něm obsažených) a metodami (akcemi, které dokáže objekt provádět). Příklady objektů takto v daném případě mohou být dokument, textový či obrazový rámeček, vrstva, okno dokumentu či v neposlední řadě InDesign samotný. Vlastnostmi objektu rámeček mohou být třeba jeho šířka, výška, pozice na stránce či obsah, metodami pak třeba změna velikosti, rotace či pozice rámečku. Obdobně lze u objektu text hovořit o vlastnostech jako je zarovnání, počet znaků či podtržení nebo metodách, jako je aplikace stylu (odstavcového či znakového), prohledání na výskyt zadaného textového řetězce či odstranění obsaženého textu.

Práce s objekty vyžaduje, aby uživatel objekty či jejich vlastnosti a metody dokázal ve skriptu jednoznačně identifikovat. Identifikace je zde založena na skutečnosti, že objekty jsou seskupeny v tzv. objektové hierarchii: například dokument se skládá z jedné či více stránek, z nichž každá může obsahovat jeden či více textových rámečků, z nichž každý může obsahovat nějaký odstavec, který se skládá z jednoho či více řádků atd. Adresa objektu je pak dána výrazem, který obsahuje tečkami oddělené označení jednotlivých objektů od toho, který je v dané hierarchii nejvýše, přes objekt bezprostředně podřízený atd. až po samotný objekt, který adresujeme, dále pak následuje určení požadované vlastnosti či metody adresovaného objektu. V našem ukázkovém skriptu takto instrukce

app.documents.add();

vlastně říká, že v dané aplikaci (app - čili InDesign) použijeme u jejich dokumentů (documents) metodu add, která vytváří nový dokument. Povšimněme si přitom prázdné dvojice závorek u dané metody: říká se tím, že se metoda používá bez parametrů.

Instrukce

app.activeDocument.textFrames.add();

pak používá metodu add pro textové rámečky aktivního dokumentu InDesignu, kterým je v daném případě dokument, jenž jsme vytvořili v předchozím kroku (vytvořením se stal aktivní). Adresování by bylo možno provést v daném případě i jinak (s pomocí proměnné), tomu se ale budeme věnovat až v příštím díle.

Instrukce

app.activeDocument.textFrames[0].geometricBounds = ["0p0", "0p0", "18p0", "18p0"];

nastaví u prvního rámečku v aktivním dokumentu (tedy námi vytvořeného předchozím příkazem) jeho vlastnost rozměry (geometicBounds), instrukce

app.activeDocument.textFrames[0].contents = "Hello World!";

pak jeho vlastnost obsah (contents).

Povšimněme si na tomto místě, že změna vlastnosti se provádí tzv. přiřazením s pomocí rovnítka, kdy je na levé straně výrazu (před rovnítkem) určena vlastnost a na straně druhé (za rovnítkem) pak hodnota, která se přiřazuje. Za pozornost také stojí způsob zápisu všech daných objektů, vlastností a metod: JavaScript rozlišuje mezi malými a velkými písmeny a tak například výrazy " activeDocument " a " activedocument " nejsou identické. Na to je třeba při tvorbách i studiu skriptů pozor.

Povšimněme si dále způsobu adresováni objektu, v našem případě textového rámečku. Zápis

app.activeDocument.textFrames[0]

zde odkazuje na první z textových rámečků (tedy objekt typu TextFrame) aktivního dokumentu. Využito je datové struktury pole (array), do které se ukládají v objektovém modelu InDesignu objekty, kterých může být současně použito více - v našem případě jsou do takovéhoto pole uloženy všechny textové rámečky aktivního dokumentu. V hranatém rámečku je zde udán index prvku, přičemž číslování začíná od nuly a tak je tedy první rámeček v dokumentu odkazován jako textFrames[0], druhý coby textFrames[1] atd. Obdobným způsobem pak lze odkazovat například na obrázkové rámečky, odstavce v daném rámečku, znaky v odstavci atp. Možný je pak i jiný typ reference s pomocí metody item, kdy by tentýž objekt referován takto

app.activeDocument.textFrames.item(0)

Pozornost konečně věnujme i tomu, že jsme v našem skriptu vlastnostem přiřazovali různé typy hodnot. V prvním případě to byla uspořádané čtveřice souřadnic (tedy vlastně speciální typ pole), v druhém pak textový řetězec (datový typ String, jak je z našeho příkladu poznat, je příslušná hodnota uzavřena do uvozovek). Mimo těchto typů se při skriptování hojně používá také třeba logických hodnot (true/false) či čísel (celých nebo reálných). Typ vlastnosti vyčteme z odpovídající referenční příručky (viz dále). Podrobněji se možnými typy hodnot a manipulací s nimi budeme věnovat až v dalším díle tohoto seriálu.

Práce s objekty podle referenční příručky

Je samozřejmě otázkou, kde najít popis objektů, vlastností a metod spojených s InDesignem. Jednoznačným zdrojem je zde odpovídající referenční příručka, která v abecedně řazeném pořadí vypisuje formou odpovídajících tabulek dané objekty. Prakticky tedy v této PDF příručce pracujeme tím způsobem, že si v záložkách nalistujeme odpovídající objekt který nás zajímá (pozor, musíme samozřejmě pracovat s tou částí příručky, která je pro JavaScript, nikoli AppleScript či VisualBasic) a zjistíme, to co potřebujeme vědět o jeho vlastnostech či metodách. Zejména ze začátku je pochopitelně takovéto hledání poměrně těžké, pojmenování objektů je nicméně poměrně intuitivní (většinou odpovídají tomu, co uživatel zná z anglického rozhraní produktu) a hlavně se pak v dalších částech našeho seriálu budeme věnovat práci s typickými objekty, včetně různých odzkoušených postupů pro jejich využití podrobněji. Nyní se nicméně podívejme na to, co vše lze o vlastnostech či metodách daného objektu v příručce vyčíst.

V případě vlastností je mimo názvu vlastnosti uveden především její typ (Type). Sloupec Access určuje, zda je daná vlastnost určená pouze ke čtení (r jako read) nebo i ke změnám (w jako write) pomocí přiřazení, které jsme si ukázali výše. Konečně je k dispozici i sloupec Description, který obsahuje nejen popis dané vlastnosti, ale také případně výčet jejich přípustných hodnot.

skriptid2-2f.jpg

Tabulka některých vlastností objektu TextFrame

V případě metod je popis organizován v podobě tabulky, kde je mimo názvu metody určeno, jak vypadá výsledek aplikace této metody (Returns), tj. jaký typ objektu je vytvořen. Dále zde nalezneme popis metody (Description), který v sobě zahrnuje i možné volitelné parametry.

skriptid2-3f.jpg

Tabulka metod objektu Documents

Závěrem aneb několik cvičení na závěr

Na tomto místě si zatím dovolíme náš výklad přerušit. Čtenář si nyní může za domácí úkol vzít referenční příručku InDesignu a s její pomocí (tedy na základě popisu vlastností a metod objektů app, TextFrame apod.) různým způsobem vylepšovat náš ukázkový skript třeba co se nastavení vytvářeného dokumentu, rámečku či vloženého textu týče. Ještě jednou si nicméně dovolujeme zdůraznit, že zatím jsme s objekty InDesignu pracovali značně primitivním způsobem a teprve v další části si ukážeme využití různých prvků JavaScriptu (proměnné, podmínky, výpočty, cykly aj.) s jejichž pomocí lze skriptování řešit výrazně elegantněji.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » VSE  

 » Rubriky  » Go verze  

 » Rubriky  » Sazba  

 » Rubriky  » Polygrafie  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: