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:
-
30. září 2024
-
4. října 2024
-
14. listopadu 2024
-
11. prosince 2024
VSE
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):
- Skriptujeme InDesign (1): Úvod
- Skriptujeme InDesign (2): První kroky
- Skriptujeme InDesign (3): Základy JavaScriptu poprvé
- Skriptujeme InDesign (4): Základy JavaScriptu podruhé
- Skriptujeme InDesign (5): Dokumenty poprvé
- Skriptujeme InDesign (6): Dokumenty podruhé
- Skriptujeme InDesign (7): Výstup
- Skriptujeme InDesign (8): Stránky
- Skriptujeme InDesign (9): Stránkové objekty poprvé
- Skriptujeme InDesign (10): Stránkové objekty podruhé
- Skriptujeme InDesign (11): Dialogy
- Skriptujeme InDesign (12): Text poprvé
- Skriptujeme InDesign (13): Text podruhé
- Skriptujeme InDesign (14): Text potřetí
- Skriptujeme InDesign (15): Hledání a záměny poprvé
- Skriptujeme InDesign (16): Hledání a záměny podruhé
- Skriptujeme InDesign (17): Regulární výrazy
- Skriptujeme InDesign (18): Tabulky poprvé
- Skriptujeme InDesign (19): Tabulky podruhé
- Skriptujeme InDesign (20): Obrázky poprvé
- Skriptujeme InDesign (21): Obrázky podruhé
- Skriptujeme InDesign (22): Obrázky potřetí
- Skriptujeme InDesign (23): ESTK aneb jak na editaci a ladění skriptů
- Skriptujeme InDesign (24): Vrstvy
- Skriptujeme InDesign (25): Barvy poprvé
- Skriptujeme InDesign (26): Barvy podruhé
- Skriptujeme InDesign (27): Barvy potřetí
- Skriptujeme InDesign (29): Metadata podruhé
- Skriptujeme InDesign (30): Návěští
- Skriptujeme InDesign (31): Okna
- Skriptujeme InDesign (32): Reakce na události
- Skriptujeme InDesign (33): Novinky v CS3 verzi
Tématické zařazení:
» Rubriky » Polygrafie
-
14. května 2014
Jak vkládat snímky do galerií a soutěží? Stručný obrazový průvodce
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
12. června 2012
-
9. dubna 2014
-
5. ledna 2017
-
6. září 2004
OKI snižuje ceny barevných laserových tiskáren C3100 a C5200n
-
13. května 2004
-
19. ledna 2004
QuarkXPress Passport 6: předvedení nové verze na konferenci Apple Forum 27.1.2004
-
6. února 2001
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
14. října 2024
-
10. prosince 2024