Skriptujeme InDesign (10): Stránkové objekty podruhé - 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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Software

Skriptujeme InDesign (10): Stránkové objekty podruhé

Adobe InDesign sazba

10. března 2006, 00.00 | Zajímá vás, jaké jsou základní i pokročilé možnosti manipulace s objekty v rámci
skriptování InDesignu? Dovíte se to v této části našeho pravidelného seriálu. A po jejím
prostudování budete možná i lépe rozumět užitečným skriptům, které se dodávají s
InDesignem.

V druhé části našeho výkladu o stránkových objektech se podíváme na to, jakými způsoby lze s těmito prvky manipulovat. V našem výkladu se přitom omezíme pouze na základní popis příslušných vlastností a metod a dále nastínění zásad pro práci s nimi. Více lze totiž dle našeho názoru získat praktickým nasazením, studiem a případnými úpravami řady skriptů, dodávaných spolu s InDesignem (které si je případně možno rovnou stáhnout z Internetu). Na dané skripty proto přinášíme v našem následujícím textu příslušné odkazy. Každý z těchto skriptů má bez ohledu na své poslání obdobnou strukturu, jež sestává obvykle ze tří částí: v úvodu skriptu jsou ošetřeny výchozí podmínky pro spuštění skriptu (aby byl vybrán příslušný typ objektu, otevřen dokument atd.). Znalosti pro tuto část lze získat z předchozích dílů našeho seriálu. Následně se ve skriptu používají dialogová okna: o jejich tvorbě a využití si povíme něco v kapitole příští. A konečně třetí část skriptu se týká samotného zpracování objektů, o kterém budeme podrobněji hovořit nyní.

Souřadnicový systém, jednotky a pravítka

Objekty InDesignu jsou v dokumentu umisťovány pomocí jednoduchého dvojdimenzionálního souřadnicového systému. Oproti tomu, co čtenář zná z běžné (školské) karteziánské geometrie zde ovšem jsou některé rozdíly. Především to, že i když je počátek souřadnicového systému (bod [0,0] - určený coby počátek pravítek) umístěn (obvykle) do levého horního rohu stránky nebo dvoustránky, jsou y-ové souřadnice bodů umístěných pod y-ovou osou (tedy na stránce, dvoustránce) kladné, nad osou pak záporné. Jiná zvláštnost pak souvisí se způsobem zápisu nejobvyklejší hodnoty, kterou v souvislosti s objekty a souřadnicemi používáme, tzv. geometricBounds, čili geometrických hranic objektu. Jedná se totiž o uspořádanou čtveřici udávající souřadnici levého horního a pravého dolního rohu objektu následovně:

[nahoře,vlevo,dole,vpravo]

takže vlastně, použijeme-li obvyklý symbolický zápis,

[y1,x1,y2,x2]

Uvedený způsob může být trochu matoucí a ve skriptech, ve kterých s geometrií objektu manipulujeme je na to třeba dávat pozor. Už i proto, že v případě souřadnic pouze bodů (např. u metody move), se používá obvykle uspořádání [x,y].

Dané souřadnice lze zadávat v konkrétních jednotkách (p - pica, pt - point čili bod, mm - milimetr, cm - centimetry, c - cicero, i - inch čili palec - syntaxe je stejná jako třeba na paletce Transformace InDesignu). Zápis pak vypadá třeba takhle:

["1in","2in,"3.233i","4.5in"]

Možné je také pouhé zadání hodnot

[1,2,3.2,4.5]

kdy se jednotka přebírá z preferencí InDesignu. Obvyklý postup u skriptování přitom bývá ten, že pokud potřebujeme jednotky takto zapisovat, uložíme nejprve aktuální nastavení jednotek, zvolíme jednotky své, provedeme výpočty a poté obnovíme nastavení. Tedy například takto (převzato z uživatelské příručky InDesignu CS2):

var myDocument = app.activeDocument;
with (myDocument.viewPreferences){
//Uložení původních hodnot
var myOldXUnits = horizontalMeasurementUnits;
var myOldYUnits = verticalMeasurementUnits;
//nastavujeme body, možné je třeba i použití picas, inches, millimeters aj.
//horizontální a vertikální jednotky mohou být odlišné
horizontalMeasurementUnits = MeasurementUnits.points;
verticalMeasurementUnits = MeasurementUnits.points;
}
//
//Provedení požadovaných akcí
//
//Nyní to zkusíme uvést do původního stavu
with (myDocument.viewPreferences){
try{
horizontalMeasurementUnits = myOldXUnits;
verticalMeasurementUnits = myOldYUnits;
}
catch(myError){
alert("Nemohu obnovit nastavení jednotek");
}
}

Časté bývá zpracování měrových údajů s pomocí proměnných - jednak je tím pádem skript univerzálnější a dále se tím vyhneme některým problémům spojeným s výpočty u hodnot zadaných výše uvedenými způsoby. Není-li to tedy nezbytně nutné, měli bychom konkrétní hodnoty přiřadit proměnným a pak pracovat pouze s těmito proměnnými. Obvyklá přitom bývá manipulace s hodnotami, vycházejícími z nastavení stránky, tedy šířky, výšky a okrajů - viz náš dřívější výklad.

Zmínit je pak ještě potřeba manipulaci s pravítkem, resp. jeho počátkem. Obvyklý postup zde stejně jako u jednotek předpokládá, že nejprve uložíme původní nastavení, pak umístíme počátek pravítka do požadované pozice a provedeme příslušné akce.

//Uložení starých hodnot
var myOldRulerOrigin = app.activeDocument.viewPreferences.rulerOrigin;
//Zde se pravítko umístí na počátek dvojstránky, možné je také umístění
//na počátek stránky - pageOrigin či hřbet - spinOrigin
app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.spreadOrigin;
//
//Provedení požadovaných akcí
//
//Obnovení původního nastavení
app.activeDocument.viewPreferences.rulerOrigin = myOldRulerOrigin;

Někdy pak přijde vhod i manipulace s vodítky a mřížkami. Daný výklad by už byl ovšem na tomto místě samoúčelný, v případě potřeby si lze informace dohledat v uživatelské příručce InDesignu CS2 (s. 117-119).

Základní manipulace s objekty

Vytvoření objektu předpokládá jeho přidání do odpovídajícího pole, tedy například vytvoření obdélníkového rámečku zajistíme s pomocí metody add kolekce rectangles. Umístění nového čtverce na určitou stránku a následné nastavení jeho rozměrů provedeme třeba takto:

myCtverec=app.activeDocument.pages[2].rectangles.add();
myCtverec.geometricBounds=["1cm","1cm","20cm","20cm"];
//Pokud nenastavíme geometricBounds, umístí se objekt do levého horního rohu stránky

Ale pozor, daný příkaz nebude korektně fungovat pokud bude počátek pravítka umístěn na dvojstránku. Zde jsou vlastně všechny stránky brány jako stránka jediná (z hlediska souřadnic), takže bychom museli provést patřičné přenastavení geometricBounds (připočíst šířky stránek předcházející na dvojstránce té, s kterou chceme pracovat).

Následně lze s objektem manipulovat. Neskutečně mnoho se zde dá při jeho umisťování, zvětšování/zmenšování apod. provést nastavením geometricBounds (dále pak existují visibleBounds, kde je při nastavování brána v potaz i tloušťka okraje). Výborným materiálem ke studiu jsou zde zmíněné ukázkové skripty, konkrétně AlignToPage (zarovná zvolený objekt zadaným způsobem na stránce), AdjustLayout (umí posunout obsah stránky poté, co došlo ke změně okrajů), AddGuides (vytváří vodítka okolo jednoho či více vybraných objektů, pracuje se zde i s umisťováním na vrstvu) či MakeGrid (rozdělí vybraný rámeček do mřížky rámečků stejného typu).

Podívejme se nyní na další možné manipulace. V následujících ukázkách přitom pod proměnnou myObject budeme rozumět stránkový objekt, který lze získat způsoby, o kterých jsme hovořili zejména minule (nově vytvořený objekt, objekt z určité kolekce určený indexem či návěštím, objekt z výběru), hromadné zpracování objektů určitého typu pak probíhá v cyklu a čtenář si je může snadno domyslet. Nebudeme přitom uvádět vyčerpávající popis použití jednotlivých vlastností a metod (k tomu je zde referenční příručka), pokusíme se spíše naznačit typické způsoby jejich použití.

Začít lze u metod pro přemístění či duplikování objektů:

//Umístí levý horní roh objektu na počátek souřadnicové soustavy
myObject.move([0,0]);

//Posune objekt (pozici levého horního rohu) o 2cm doprava a 5 cm dolů
myObject.move(undefined,["2cm","5cm"])

//Přesune objekt na první stránku v dokumentu
myObject.move(app.activeDocument.pages[1]);

//Umístí objekt na vrstvu pojmenovanou "Vrstva 1" (musí existovat)
myObject.itemLayer=app.activeDocument.layers.item("Vrstva 1");

//vytvoří duplikát objektu posunutý o 2 cm doprava a 3 cm dolů
myObject.duplicate(["2cm","3cm"]);

Dále lze provádět transformace typu rotace či změny velikosti:

//Rotuje objekt o 30 stupňů kolem horního levého kotevního bodu
//podrobně si s nastavením AnchorPointu hraje třeba ukázkový skript StepAndRepeat
myObject.rotate(0,AnchorPoint.topLeftAnchor);

//Zkosí objekt o 10 stupňů
myObject.shearAngle=30;

//Změní velikost objektu horizontálně i vertikálně na 30 procent
myObject.horizontalScale = 30;
myObject.verticalScale = 30;

Kontrolovat lze rovněž parametry týkající se tahů, výplní či průhlednosti objektu:

//Nastaví tloušťku tahu na 11 bodů
myObject.strokeWeight = "11pt";

//Nastaví odstín tahu na 20 % (-1 znamená 100 %)
myObject.strokeTint = 20;

//Nastaví barvu výplně na tiskařskou žlutou, obvyklejší je volba barvy z dialogu
//jako je tomu ve skriptu Neon. Více o nastavování barev někdy příště.
myObject.fillColor="Yellow"

//Nastaví průhlednost objektu na 90 %
myObject.opacity = 90;

Podrobněji lze práci s uvedenými vlastnostmi studovat ve skriptech StepAndRepeat (vytvoří zadaný počet klonů objektu a nastaví u nich uživatelem požadované vlastnosti) či Neon (doplní objekt či objekty o příslušný efekt). Sofistikované zpracování pak lze zajistit manipulací s cestami, jak je tomu ve skriptech AddPoints (doplňuje všechny cesty u vybraných stránkových objektů), CornerEffects (mění nastavení rohů objektů) a PathEffects (mění různým způsobem tvar zvoleného rámečku).

Objektové styly

Zajímavou novinkou InDesignu CS2 jsou objektové styly, které dovolují aplikovat sadu nastavení objektů obdobně jak je to třeba v případě textu se styly odstavcovými. Je jasné, že v případě skriptování může být použití objektových stylů opět stejně silnou pomůckou jako je to třeba v případě presetů u tvorby dokumentů, exportu či tisku (viz náš dřívější výklad) nebo zmíněných stylů textových (o tom někdy příště). Hlavními výhodami zde jsou skutečnost, že styly lze připravit i ve vizuálním prostředí (případně je upraví i ten, kdo nemá se skriptováním nic společného), mohou se měnit, přičemž skript zůstane stejný a lze je využívat ve vícero skriptech. (V případě CS a dřívějších verzí by se dal každopádně použít obdobný princip vytvořením funkce, která třeba na vstupu načte objekt a určené symbolické označení skupiny parametrů a na výstupu vrátí objekt změněný, to ale přece jen není tak výhodná metoda.)

Objektové styly dokumentu se ukládají do pole objectStyles, přístupného pro objekt document. Manipulace zde funguje na obdobné bázi jako třeba s presety dokumentu, kterou jsme popsali dopodrobna dříve a tak ji zde nebudeme zbytečně reprodukovat. Rádi bychom si každopádně povšimli způsobu, jak vlastně objektový styl na objekt aplikovat. Varianta nabízená referenční příručkou InDesignu předpokládá přiřazení stylu coby vlastnosti:

//V proměnné myObject je stránkový objekt, třeba textový rámeček,
//dokument obsahuje objektový styl s názvem Pokus
myObject.appliedObjectStyle=app.activeDocument.objectStyles.item("Pokus");

ovšem nepřepíše po přiřazení stylu lokální vlastnosti objektu. Oproti tomu tak, jak bychom obvykle potřebovali, funguje (zřejmě nezdokumentovaná) funkce applyObjectStyle.

myObject.applyObjectStyle(app.activeDocument.objectStyles.item("Pokus"));

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: