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

Saal Digital

 

Jaký největší formát fotoknihy v řadě Professional Line ve formátu na šířku lze ve standardní nabídce Saal Digital Fotoservice objednat? Nápověda: Logo sponzora soutěže

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



Software

Skriptujeme InDesign (9): Stránkové objekty poprvé

Adobe InDesign sazba

27. února 2006, 00.00 | Stránkové objekty, tedy zjednodušeně řečeno rámečky různých typů, patří k tomu nejzákladnějšímu, co se v InDesignu zpracovává. Jaké jsou příslušné postupy v oblasti skriptování?

Tato a příští část našeho seriálu bude věnována práci se stránkovými objekty (v terminologii skriptování InDesignu souhrnně označovanými coby page items): tj. tomu, co je prakticky základem většiny skriptů používaných v InDesignu. Jedná se o téma dosti obsáhlé a přitom v základu značně obecné. Na tomto místě si proto dovolíme zvýraznit pouze nejdůležitější záležitosti s danou problematikou spojené, i tak jsme ale byli nuceni výklad rozdělit do dvou částí. V této první si povíme, s jakými stránkovými objekty vlastně pracujeme a jakými způsoby můžeme tyto v dokumentu s pomocí skriptů vybírat ke zpracování.

Základy

Do dokumentů InDesignu resp. na stránky (nebo též mimo ně v případě spadávky) lze umisťovat objekty různých typů. Pracovat lze takto zejména s textovými (objekt typu textFrame) rámečky a dále obdélníky (objekt typu rectangle), ovály (oval, zvláštním případem je elipsa) a polygony (polygon), které lze použít coby samostatné geometrické tvary nebo vyplněné importovanou grafikou (image, graphic) či také třeba textem nebo multimediálním obsahem. Pracovat pak lze dále i s čarami (graphicLine) a také skupinami objektů (group). Objekty daných typů jsou sdruženy vždy v odpovídající kolekci resp. poli, tedy textovým rámečkům odpovídá kolekce textFrames, obdélníkovým rámečkům kolekce rectangles, čarám graphicLines atd.

K těmto základním objektům dokumentu či stránky lze dále přistupovat i přes pole allPageItems nebo kolekci pageItems (základní rozdíl mezi uvedenými konstrukty z hlediska praktického použití uvádíme níže, pravděpodobně nejlepší výklad o těchto prvcích, ale bohužel ve francoužštině, lze najít zde): v obou případech adresujeme objekt typu pageItem, kterým může být některý z objektů, jež jsme zmínili výše. Ne vše, co vidíme na stránce dokumentu, pak patří do dané třídy objektů. Chybí zde třeba tabulky (ty jsou součástí textových rámečků) a také třeba multimediální tlačítka (objekt typu button).

Přístup ke stránkovým objektům je v dokumentu možný různým způsobem. Obvykle tak činíme přes objekty dokument, stránka či dvoustránka (spread).

Příklady základního adresování stránkových objektů:

//Všechny stránkové objekty v daném dokumentu
app.activeDocument.allPageItems;

//Pole všech textových rámečků na první straně dokumentu
app.activeDocument.pages[0].textFrames;

//Stejné jako výše
app.activeDocument.pages.item(0).textFrames;

//Upozornění na existenci multimediálního tlačítka v dokumentu
if (app.activeDocument.buttons.length>0)
{alert("Dokument obsahuje alespoň jedno interaktivní tlačítko")};

Zjišťování typu objektu

Jakého typu je určitý objekt můžeme zjistit s využitím vlastnosti constructor.name. Použití je v případě přístupu přes pole allPageItems či objekt selection následující:

//Řekneme o jaký objekt se nám jedná, třeba takhle v případě prvního objektu
//na první straně dokumentu
var myPageItem=app.activeDocument.pages[0].allPageItems[0];
//nebo takhle (podrobněji o výběru mluvíme o kousek dále)
var myPageItem=app.activeDocument.selection[0];

//Zjistíme typ objektu
var myType=myPageItem.constructor.name;
//Typ použijeme, například takhle:
if (myType !== "TextFrame"){alert("Tohle není textový rámeček")};

U přístupu přes pole pageItems (jehož jednotlivé položky jsou při použití výše popsaného postupu obecného typu pageItem) se používá následujícího adresování, kterým se dobereme stejného výsledku jako výše:

//Řekneme o jaký objekt se nám jedná, třeba takhle v případě prvního objektu
//na první straně dokumentu
var myPageItem=app.activeDocument.pages[0].pageItems[0];
//Zjistíme typ objektu, přičemž použijeme obecnou metodu getElements
var myType=myPageItem.getElements()[0].constructor.name;

Výběr

Jinou možnost jak přistupovat k objektům nabízí výběr (selection). Jak již název naznačuje, daný objekt (pole) nám dovoluje přistupovat k aktuálnímu výběru v InDesignu. Typický scénář využití zde předpokládá, že uživatel vybere určitý objekt a s tím poté skript provede určenou manipulaci. Selection je typu pole, jehož jednotlivé prvky jsou objekty vybrané v InDesignu (vybírat lze pouze v rámci jedné dvoustrany). Výběr nemusí obsahovat pouze prvky typu PageItem, může v něm být také třeba text (odpovídající konstruktor, zjištěný metodou naznačenou výše, bývá InsertionPoint pokud není vybrán žádný text, jenom textový kurzor, a dále třeba Text, Word aj. podle toho, co je právě vybráno, více až v kapitole o práce s textem) či interaktivní tlačítko. Zpracování výběru může být velmi jednoduché, když třeba pracujeme pouze s jediným vybraným prvkem výběru

app.selection[0];

stejně dobře lze ale zajistit i komplexní zpracování všech objektů ve výběru pomocí cyklu.

Metoda select pak dovoluje obsah výběru neinteraktivně měnit. Obecný tvar zde je

select(objekt,výběr);

kde objekt určuje jaký objekt (může být i pole objektů nebo také enumeratory NothingEnum pro odoznačení všech objektů či SelectAll pro výběr všech objektů) chceme do výběru přidávat a výběr (volitelný parametr) může být buďto SelectionOptions.addTo (přidá objekt do výběru), SelectionOptions.removeFrom (odstraní objekt z výběru) nebo SelectionOptions.replaceWith (nahradí výběr daným objektem - výchozí volba). Příklady:

//Zruší výběr
app.select(NothingEnum.nothing);

//Do výběru vloží všechny textové rámečky z dané dvoustrany
app.select(app.activeDocument.spreads[1].textFrames);
//a pak sem přidá všechny čáry ze stejné oblasti
app.select(app.activeDocument.spreads[1].graphicLines,SelectionOptions.addTo);

Label

Zajímavá je možnost označit objekt (nejen stránkový) s pomocí návěští (label), které pak dovoluje ve skriptech na objekt odkazovat symbolickým názvem:

//Předpokládejme, že máme textový rámeček myTextFrame,
//například vytvořený takto
var myTextFrame=app.activeDocument.textFrames.add(undefined,undefined,undefined,{geometricBounds: ["5cm","2cm","10cm","20cm"]});
//návěští mu přiřadíme následovně
myTextFrame.label="Úvodník";

Použití daného označení je nasnadě například v případě šablon periodik, katalogů apod., u kterých do připravených rámečků vkládáme proměnný obsah z externích souborů jako třeba v následujícím skriptu (hodně zjednodušený příklad, z kterého se dá nicméně dobře vyjít k reálnému řešení pro automatizovanou sazbu, fungujícímu po odladění geometrie šablony, pojmenování vstupních souborů, ošetření přetečení či chybějících obrázků atp.):

//Do rámečku s labelem "Úvodník" importujeme soubor uvodnik.rtf
app.activeDocument.textFrames.item("Úvodník").place(File("/c/casopis/1-2006/uvodnik.rtf"));
//Do rámečku s labelem "Foto k úvodníku" vkládáme soubor uvodnik.jpg
app.activeDocument.rectangles.item("Foto k úvodníku").place(File("/c/casopis/1-2006/uvodnik.jpg"));

Je třeba poznamenat, že v dokumentu lze použít více objektů označených stejným labelem. To má své výhody (voláním daného návěstí se automaticky vytvoří příslušná skupina objektů), ale samozřejmě i svá úskalí (pokud chceme používat jednoznačně identifikovatelný objekt). Přiřazení labelu mimochodem není třeba provádět přes skripty. InDesign zde nabízí příslušný nástroj i na paletce Skripty (panel Script Label). Přiřazení takovýmto způsobem (nebo jeho kontrola) je svým způsobem přehlednější než u skriptů a může je provést třeba i ten, kdo s následným zpracovávajícím skriptem nebude mít nic společného (například tvůrce šablony ve stylu předchozího příkladu).

Závěrem

Tolik zatím k práci se stránkovými objekty. Příště budeme více pozornosti věnovat manipulaci s tímto typem objektů a povíme si také o mnohdy velmi užitečných ukázkových skriptech, jež jsou součástí dodávky InDesignu, použitelných daným způsobem.

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: