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:
-
5. září 2024
Matrixmedia - Obsluha a tisk na velkoformátových digitálních tiskárnách
-
30. září 2024
-
4. října 2024
-
14. listopadu 2024
Polygrafie
Skriptujeme InDesign (24): Vrstvy
Adobe InDesign sazba
4. září 2006, 00.00 | Jedním z velmi silných prostředků InDesignu je aparát pro práci s vrstvami. S jeho
pomocí lze objekty v dokumentu zobrazovat či jinak zpracovávat skutečně rozmanitými
způsoby. V tomto díle našeho seriálu se blíže podíváme na to, jak s vrstvami zacházet
pomocí skriptů.
Jedním z velmi silných prostředků InDesignu je aparát pro práci s vrstvami. S jeho pomocí lze objekty v dokumentu zobrazovat či jinak zpracovávat skutečně rozmanitými způsoby. V tomto díle našeho seriálu se blíže podíváme na to, jak s vrstvami zacházet pomocí skriptů.
Vlastnosti vrstev
Vrstvy jsou objekty, patřící objektu document. Ukládají se do odpovídajícího pole
layers
, přičemž k dispozici jsou příslušné nástroje pro přidání nové vrstvy či naopak
její odstranění. Každý dokument obsahuje minimálně jednu vrstvu. Základním
identifikátorem vrstvy je její pojmenování (vlastnost name
), které je viditelné i na
odpovídající paletce Vrstvy (Layers) InDesignu. Dalšími základními vlastnostmi vrstev,
které lze opět nastavovat i v GUI InDesignu jsou uzamčení (logická hodnota locked
),
viditelnost (logická hodnota visible
) a barva, kterou je vrstva indikována na dané
paletce (layerColor
). Co se určení barvy týče, lze zde použít buďto uspořádanou trojici
celočíselných hodnot (každá v intervalu od 0 do 255), určující barvu v prostoru RGB, či
určení barvy s pomocí tzv. UIColors číslování (odpovídající pojmenování jsou uvedena v
referenční příručce na s. 1 238-1 239). Dalšími vlastnostmi vrstev pak jsou určení
ignorování zarovnání textu, pokud je vrstva skryta (logická hodnota ignoreWrap
),
uzamčení vodítek (logická hodnota lockGuides
) a zobrazení vodítek (logická hodnota
showGuides
). Dosavadní výklad si nyní doplňme několika ukázkami kódu.
Výpis informací o vrstvách:
//Vypíše základní informace o vrstvách v daném dokumentu
var myDoc=app.activeDocument;
alert("Počet vrstev v dokumentu: "+myDoc.layers.length+"\nNázvy vrstev:
"+myDoc.layers.everyItem().name);
Přidávání vrstev:
//Přidá do dokumentu novou vrstvu jménem Text Layer,
//která je uzamčená, skrytá a na paletce Vrstvy označená oranžovou
barvou.
//Pro danou vrstvu je dále nastaveno zrušení obtékání textu při skrytí
a zobrazení vodítek
var myDoc=app.activeDocument;
try{myDoc.layers.add({name: "Text Layer", locked: true, visible: false,
layerColor: UIColors.orange, ignoreWrap: true, showGuides: true})}
catch(e){alert("Vrstva daného jména již
asi existuje")}
Odstraňování vrstev:
//Zkusí z dokumentu odstranit vrstvu jménem "Text Layer"
var myDoc=app.activeDocument;
try{myDoc.layers.item("Text Layer").remove()}
catch(e){alert("Vrstva daného jména
zřejmě neexistuje")}
Možné jsou pak hromadné manipulace s atributy vrstev, zde si naznačíme pár příkladů pro viditelnost. Nejprve jak všechny vrstvy nastavit jako viditelné:
var myDoc=app.activeDocument;
for(i=0;i<myDoc.layers.length;i++){myDoc.layers[i].visible=true}
Nyní jak skrýt všechny vrstvy s výjimkou určité vrstvy:
//Nechá zobrazenu pouze vrstvu "Layer 4"
var myDoc=app.activeDocument;
for(i=0;i<myDoc.layers.length;i++){myDoc.layers[i].visible=false}
myDoc.layers.item("Layer 4").visible=true;
Poměrně zásadní pak může být v interaktivních skriptech vrstva, která je právě aktivní v
daném otevřeném dokumentu. Zjistíme ji například s pomocí metody activeLayer
objektu
app.activeWindow
:
var myDoc=app.activeDocument;
var myLayer=app.activeWindow.activeLayer;
//Ponechá viditelnou pouze aktivní vrstvu
for(i=0;i<myDoc.layers.length;i++){myDoc.layers[i].visible=false}
myLayer.visible=true;
Manipulace s vrstvami
Základními manipulacemi, které se s vrstvami provádí, jsou mimo přidání a odstranění či
nastavení atributů popsaných výše i změna pořadí (pomocí metody move
), sloučení s jinými
vrstvami (metoda merge
) a duplikování (metoda duplicate
). Opět si ukažme několik
příkladů použití daných metod.
Změna pořadí vrstvy:
var myDoc=app.activeDocument;
//Zde určíme požadovanou vrstvu (musí existovat)
var myLayer=myDoc.layers.item("Text Layer");
//Umístí danou vrstvu na konec (naspod)
myLayer.move(LocationOptions.atEnd);
Jiná možnost změny pořadí:
//Umístí danou vrstvu za vrstvu s názvem "Layer 3" (musí
existovat)
myLayer.move(LocationOptions.after,myDoc.layers.item("Layer 3"));
Sloučení vrstev:
var myDoc=app.activeDocument;
//Zde určíme požadovanou vrstvu (musí existovat)
var myLayer=myDoc.layers.item("Text Layer");
//Sloučí všechny vrstvy v dokumentu do určené vrstvy
myLayer.merge(app.activeDocument.layers);
Jiná možnost sloučení (merge má jako parametr vždy pole vrstev):
//Sloučí vrstvu určenou proměnnou myLayer s vrstvami "Layer
2" a "Layer 4"
myLayer.merge([app.activeDocument.layers.item("Layer
2"),app.activeDocument.layers.item("Layer 4")]);
Duplikování:
var myDoc=app.activeDocument;
//Zde určíme požadovanou vrstvu (musí existovat)
var myLayer=myDoc.layers.item("Text Layer");
//Duplikujeme danou vrstvu
var myDup=myLayer.duplicate();
//Poté případně změníme pojmenování duplikátu
myDup.name="Duplikát";
Objekty na vrstvách
Vlastnosti vrstev dovolují určit objekty na nich obsažené. Konkrétně jsou takto k
dispozici allGraphics
(pro všechnu grafiku), allPageItems
a
pageItems
(pro všechny stránkové objekty), ovals
,
polygons
, rectangles
a textFrames
(rámečky všech
typů), graphicLines
(čáry) a také buttons
(tlačítka pro
interaktivní PDF) a formFields
(formulářová pole pro PDF dokumenty). Ukázky
jednoduché diagnostiky:
var myDoc=app.activeDocument;
var myLayer=app.activeWindow.activeLayer;
alert("Počet textových rámečků aktivní vrstvy je
"+myLayer.textFrames.length+"\nPočet obrázků je
"+myLayer.allGraphics.length);
Odstranění vrstev, které neobsahují žádné objekty:
var myDoc=app.activeDocument;
//Musíme procházet odzadu, odstraněním se mění délka a obsah pole
for(i=myDoc.layers.length-1;i>=0;i--){if(myDoc.layers[i].allPageItems.length==0){myDoc.layers[i].remove()}}
Ke zjišťování přináležitosti objektu k vrstvě lze použít i jiný postup, kterým je určení
vrstvy daného objektu s pomocí vlastnosti itemLayer
.
var myObject=app.selection[0];
alert("Vybraný objekt je na vrstvě s názvem "+myObject.itemLayer.name);
Metoda itemLayer
je typu read/write, tj. s její pomocí lze změnit přiřazení vrstvy
objektu. To dává do rukou zásadní prostředek, dovolující hromadně rozmisťovat objekty do
vrstev. Příkladem nám může být následující skript, který všechny textové rámečky umístí
na vrstvu "Text" a všechnu grafiku na vrstvu "Graphic".
var myDoc=app.activeDocument;
try{myDoc.layers.add({name: "Text"})}catch(e){};
try{myDoc.layers.add({name: "Graphic"})}catch(e){};
//Všechny textové rámečky umístíme velmi jednoduše pomocí everyItem()
myDoc.textFrames.everyItem().itemLayer="Text";
//Pro obrázky - allGraphics už to tak jednoduché nebude, potřebujeme
cyklus
//a musíme manipulovat s rodičovským objektem grafiky, tedy jejím
rámečkem
for(i=0;i<myDoc.allGraphics.length;i++){myDoc.allGraphics[i].parent.itemLayer="Graphic"}
Naznačeným způsobem lze velmi snadno "rozestrkat" do vrstev objekty podle potřeby. Využití zde může být různorodé, začíná u přehlednějšího rozmístění zdrojů pro design a končí třeba diagnostikou. Konkrétně si lze uvést například skript, jež všechny přetečené textové rámečky umístí do vrstvy "Text Overflow" a všechny obrázky v RGB do vrstvy "RGB": takto lze velmi rychle vizuálně procházet problematické prvky v dokumentu.
var myDoc=app.activeDocument;
try{myDoc.layers.add({name: "Text Overflow"})}catch(e){};
try{myDoc.layers.add({name: "RGB"})}catch(e){};
//Umístíme přetečené rámečky
for(i=0;i<myDoc.textFrames.length;i++){
if(myDoc.textFrames[i].overflows==true){myDoc.textFrames[i].itemLayer="Text
Overflow"}
}
//Umístíme RGB grafiku - připomeňme, že rodič odkazu je obrázek, rodič
obrázku je rámeček.
//Do vrstvy umisťujeme rámeček daného obrázku.
for(i=0;i<myDoc.links.length;i++){
if(myDoc.links[i].parent.constructor.name=="Image"){
if(myDoc.links[i].parent.space=="RGB"){myDoc.links[i].parent.parent.itemLayer="RGB"}
}
}
Popsaná metoda má velký potenciál, zde jsme zůstali jen u jednodušších příkladů. Čtenář by si jistě zvládl sám vytvořit skripty například pro podrobnější rozčlenění objektů do vrstev (třeba vrstvy "CMYK", "RGB", "Grayscale" nebo také třeba "PDF", "EPS", "Image" atp. atp.). Pokročilejší způsob zpracování založený na vrstvách, spojený s duplikováním objektů a přidáváním různých metainformací do dokumentu jsme pak již naznačili v dřívější části našeho seriálu (viz sekce "K vizuální diagnostice").