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
Sazba
Skriptujeme InDesign (13): Text podruhé
Adobe InDesign sazba
14. dubna 2006, 00.00 | V této druhé části našeho výkladu o skriptování textu v InDesignu bude naše pozornost
patřit umisťování textu. Podíváme se na práci s funkcí place, textovými rámečky,
vkládacím bodem a přetečenými místy.
Po předchozím výkladu o hierarchii textových objektů se dostáváme k praktickému použití skriptování při vkládání textu do dokumentů InDesignu. Naše pozornost bude zde patřit jak různým způsobům vložení, tak nastavením parametrů specifických pro textové rámečky či též ošetření přetečení.
Základní postupy při vložení textu
Základním nástrojem pro vkládání textu z externích souborů je metoda place. Tu lze použít jak pro dokument, tak pro stránky či textové rámečky, a dále jednotlivé textové objekty popsané v minulé části (odstavec, řádek, slovo, vybraný text, vkládací bod atd.). Vkládání je přitom možné ze souborů, podporovaných odpovídajícími importními filtry InDesignu (RTF, DOC, text, tagovaný text).
Na tomto místě se podíváme především na nejobvyklejší způsob umisťování textu, a to do textových rámečků. Použití v jiných případech (syntaxe odpovídajících příkazů je většinou obdobná) lze nastudovat z referenční příručky InDesignu, umisťování na stránky jsme popsali dříve .
Chceme-li umístit text do existujícího textového rámečku, můžeme tak učinit s pomocí metody place, která má následující tvar:
place(soubor,dialog,vlastnosti)
kde soubor určuje soubor z něhož se provádí načítání, dialog je volitelná logická hodnota, jež určuje, zda se má při vkládání zobrazit importní dialog, a vlastnosti je volitelná hodnota, určující pole vlastností nového objektu.
Příklad:
//Umístí obsah souboru pokus.rtf do rámečku myTF, přičemž se zobrazí importní dialog
myTF.place(File("/c/clanky/skriptid/pokus.rtf"),true)
Připomeňme přitom, že na textový rámeček lze odkazovat různě. myTF v našem předchozím příkladu tedy může být stejně dobře určen jak pozicí v objektové hierarchii InDesignu
//První textový rámeček aktuálního dokumentu
var myTF=app.activeDocument.textFrames[0];
//První textový rámeček první stránky aktuálního dokumentu
var myTF=app.activeDocument.pages[0].textFrames[0];
tak návěstím:
//Rámeček z aktivního dokumentu s návěstím "Hlavní nadpis"var myTF=app.activeDocument.textFrames.item("Hlavní nadpis");
Druhý případ znamená východisko k automatizované sazbě (typicky periodik), kdy máme sadu pojmenovaných rámečků (pro záhlaví, úvodník, jednotlivé články atd.), případně i příslušně řetězených. Do těch pak provedeme načtení změněných textových a obvykle také i obrázkových souborů vždy při změně vydání. Možné jsou přitom jak hromadné načítání, tak třebas vždy jen vložení do právě vybraného rámečku. Jiná možná aplikace je třeba tvorba vizitek či vstupenek, kdy tentýž textový obsah načteme vícekrát do stejně nastavených rámečků.
Při načítání naznačeným způsobem musí být daný rámeček prázdný. Ošetření dané situace v případě výběru je možné například takto:
if ((app.selection[0].constructor.name=="TextFrame") && (app.selection[0].parentStory.length==0))
{
//Umístíme obsah rámečku a provedeme další zpracování
}
Jinou variantu ošetření dané situace představuje odstranění veškerého textu v dokumentu dříve, než začneme cokoli vkládat:
//odstraní všechen text z dokumentu odkazovaného přes proměnnou myDocument
for (i=0;i<myDocument.stories.length;i++)
{myDocument.stories[i].contents=""}
Pokud chceme přidat text k již existujícímu textu, můžeme k tomu použít především insertion point. Umístění textu na začátek rámečku zajistíme takto:
var myFile= File("/c/clanky/skriptid/pokus.rtf");myTF.insertionPoints[0].place(myFile);
Možné je i různorodé další umístění, třeba
//Umístí soubor za druhé slovo prvního odstavce
myTF.paragraphs[0].words[1].insertionPoints[-1].place(myFile);
//Umístí soubor před druhé slovo prvního odstavce
myTF.paragraphs[0].words[1].insertionPoints[0].place(myFile);
Připomeňme pak ještě, že lze provést i náhradu libovolného jiného textového prvku. Takže například:
//Importovaným souborem přepíše obsah prvního slova v prvním odstavci daného rámečku
myTF.paragraphs[0].words[0].place(myFile);
Parametry textových rámečků
Nosiče textu v dokumentu, textové rámečky, mají řadu parametrů, které se používají jak při jejich vytváření, tak případných změnách. Mnohé z nich jsou společné pro všechny objekty InDesignu a popsali jsme je již dříve (geometricBounds, rotace, zkosení, tahy, výplně, průhlednost atd.), další jsou specifické pro textové rámečky. V druhém případě se používá nastavení s pomocí objektu textFramePreferences, kdy lze určit parametry, jako je třeba vertikální zarovnání, počet sloupců, odstup vsazení, nastavení účaří aj. (v prostředí InDesignu se odpovídající dialog vyvolá příkazem Objekt-Volby textového rámečku). Podrobný výčet a popis všech parametrů lze najít v referenční příručce, na tomto místě si povšimněme způsobu, jak s danými nastaveními efektivně pracovat. Jedná se zde vlastně o kolekci přiřazení hodnot, kterou lze uložit pod určeným názvem a tu pak používat různě v rámci skriptu - šetří se tím vypisování parametrů a unifikuje zpracování. Více osvětlí příklad:
//Vytvoříme sadu nastavení
var myFramePrefs={textColumnCount: 2, textColumnGutter: "12pt", insetSpacing: "1pt", useFixedColumnWidth: false, verticalJustification: VerticalJustification.topAlign, firstBaselineOffset: FirstBaseline.leadingOffset, ignoreWrap: false};
//Použijeme ji při tvorbě textového rámečku
app.activeDocument.textFrames.add(undefined,undefined,undefined,{textFramePreferences: myFramePrefs, geometricBounds: ["2cm","2cm","4cm","4cm"]});
Přetečení
Obvyklým problémem při vkládání textu je přetečení. To indikujeme s pomocí vlastnosti overflows, která vrací logickou hodnotu true v případě, že je daný textový rámeček přetečený.
//Otestuje rámeček přiřazený proměnné myTF na přetečení
if (myTF.overflows==true) {alert("Tento rámeček je přetečený.")};
Přetečení se dá řešit změnou velikosti rámečku. Nejjednodušší je situace u rámečků, které obsahují pouze jeden sloupec, nejsou řetězeny a neobsahují příliš mnoho přetečeného textu. Zde lze použít metodu fit:
var myDoc=app.activeDocument;
var myTextFrame=myDoc.textFrames.item("TopStory");
if ((myTextFrame.textFramePreferences.textColumnCount==1)
&& ((myTextFrame.previousTextFrame==null
&& myTextFrame.nextTextFrame==null) ||
(myTextFrame.nextTextFrame==null)))
{myTextFrame.fit(FitOptions.frameToContent)}
else{alert("Daný rámeček nelze zvětšit metodou fit")};
Případně lze použít například následující trik (opět se hodí spíše jen pro kratší text, třeba pro nadpisy, které mohou být na různý počet řádků apod.):
//V proměnné myTF je přetečený rámeček
//Pro snazší zápis dále vytvoříme proměnnou myGB
var myGB = myTF.geometricBounds;
//Natáhneme vertikálně rámeček tak, aby nepřetékal
//(lze samozřejmě použít i jinou hodnotu myLimit - určením hodnoty
stanovíme mez, po kterou má pro nás smysl zvětšení,
//obdobně si lze pohrát i s horizontálním nastavení, je-li to možné)
//Hodnota je nastavena ve výchozích měrových jednotkách - je potřeba
ošetření jako jsme popsali v části "Stránkové objekty podruhé"
myLimit=5;
myTF.geometricBounds = [myGB[0],myGB[1],myGB[2]+myLimit,myGB[3]];
//Pokud limitní hodnota neodstraní přetečení, skončíme bez úspěchu
if (myTF.overflows){alert("Překročen limit, rámeček nelze protáhnout");
myTF.geometricBounds =
[myGB[0],myGB[1],myGB[2],myGB[3]];
}
else{//Jinak zjistíme pozici posledního znaku v nepřetečeném textu
var myLastBaseline =
myTF.characters[-1].baseline;
//a nastavíme nové hranice
myTF.geometricBounds =
[myGB[0],myGB[1],myLastBaseline,myGB[3]]
}
Jinou možnost představuje přelití textu do dalšího rámečku:
//Řetězí daný rámeček s rámečkem označeným jako ""TopStory-pokračování
if (myTF.overflows){myTF.nextTextFrame=app.activeDocument.textFrames.item("TopStory-pokračování")};
Konečně je zde i možnost přidávat další stránky a odpovídající rámečky. Takováto varianta nicméně samozřejmě připadá v úvahu pouze u publikací, které dovolují měnit počet stránek - například knih. Podrobnější výklad by zde překročil rámec tohoto článku, zájemce může každopádně sáhnout po spam_email('.GXd', '@', '252', '128');2fSfQ0Yc.3@.3bbd41b0">tomto odkazu do diskusního fóra o skriptování InDesignu.
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
-
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