Skriptujeme InDesign (14): Text potřetí - 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:



Software

Skriptujeme InDesign (14): Text potřetí

Adobe InDesign sazba

22. května 2006, 00.00 | V dalším díle našeho výkladu o práci s textem se zaměříme na formátování. Jak zde
funguje skriptování na bázi znaků a odstavců či textových stylů? A jak lze skriptování
použít k automatizovanému zformátování celé publikace?

Po předchozích dílech našeho seriálu věnovaných hierarchii textových objektů a vkládání textu se dostáváme k prostředkům pro formátování. Věnovat se takto budeme nejprve obecnému nastavení textových charakteristik, poté bude naše pozornost patřit použití odstavcových a znakových stylů.

Nastavení textových formátovacích charakteristik

Textový obsah (story, odstavce, slova, sloupce, text v tabulkách aj.) lze s pomocí skriptů formátovat přinejmenším stejně rozmanitě jako ve vizuálním prostředí InDesignu. Vyčerpávající popis formátovacích charakteristik není tedy na tomto místě dost dobře možný (k tomu je zde referenční příručka skriptování, viz např. popis objektu Text na s. 1103-1115 a dále objektu Paragraph na s. 940-952), podívejme se nicméně alespoň na některé z nejzajímavějších vlastností a metod relevantních v daném případě.

Začít lze zejména u charakteristik písma: aplikovat je možno například typ písma (appliedFont), písmový řez (fontStyle: Regular, Bold, Italic, Bold Italic), velikost písma (pointSize), proklad (leading), prostrkání (tracking), horizontální/vertikální zvětšení (horizontalScale, verticalScale), posun účaří (baselineShift), podtržení (underline, u něj se dá vyladit třeba underlineColor, underlineOffset aj.) či přeškrtnutí (strikeThru, obdobně bohatá nastavení jako u underline). Kontrolovat lze také barvu písma (fillColor, fillTint, overprintFill aj.). Aplikace některých z daných charakteristik na textový úsek může vypadat třeba takhle:

//V proměnné myText je například textový výběr
//V českém InDesignu se barvy vzorníku (swatch) jmenují "Černá" a "Papír".
myText.properties={appliedFont: "Times New Roman", fontStyle: "Bold", pointSize: "18pt",
leading: "22 pt", tracking: 20, horizontalScale: 80, baselineShift: "2pt", underline: true,
strokeColor: app.activeDocument.swatches.item("Black"), fillColor: app.activeDocument.swatches.item("Paper")};

Řada charakteristik je pak aplikovatelná pouze v případě celých odstavců. Konkrétně to mohou být zarovnání (justification: Justification.leftAlign, Justification.rightAlign atp.), odsazení odstavce (leftIndent, rightIndent) a dále prvního (firstLineLeftIndent) či posledního (lastLineRightIndent) řádku, mezera před a za odstavcem (spaceBefore, spaceAfter), nastavení iniciály (dropCapLines, dropCapCharacters aj.), dělení slov (hyphenation, hyphenateAfterFirst, hyphenateBeforeLast aj.), zarovnání na mřížku účaří (alignToBaseline), ošetření vdov a sirotků (keepWithNext, keepLastLines aj.) aj. Opět malý příklad (nic samozřejmě nebrání kombinovat uvedené charakteristiky s těmi, které jsme uvedli výše):

//V proměnné myText je například textový výběr
myText.properties={justification: Justification.fullyJustified, leftIndent: "2cm",
rightIndent: "2cm", firstLineIndent: "4cm", spaceBefore: "12pt", spaceAfter: "12pt",
hyphenation: true, hyphenateAfterFirst: 2, hyphenateBeforeLast: 3,
alignToBaseline: true, keepWithNext: 5};

Kromě lokálního formátování, prováděného výše naznačeným způsobem, je možné formátovat text i s pomocí stylů, a to postupy, které popíšeme dále. Výchozí nastavení formátování textu se pak určují odpovídajícími preferencemi pro aplikaci (app.textDefaults) a pro dokument (např. app.activeDocument.textDefaults). Podrobnější popis odpovídajících postupů by byl na tomto místě samoúčelný, když vše je zevrubně popsáno v uživatelské příručce skriptování InDesignu CS2 (s. 123-126).

Odstavcové a znakové styly

K efektivnímu opakovanému aplikování skupiny formátovacích charakteristik slouží odstavcové a znakové styly. Styly daného typu spojené s dokumentem jsou uloženy v odpovídajících polích (kolekcích), jejich výpis je možno zajistit například takto (všimněte si metody everyItem, dovolující naráz adresovat všechny prvky dané kolekce):

var myPStyles=app.activeDocument.paragraphStyles;
var myCStyles=app.activeDocument.characterStyles;

alert(myPStyles.everyItem().name);
alert(myCStyles.everyItem().name);

Adresovat styl lze jeho indexem v dané kolekci nebo (doporučená metoda) jeho názvem. V druhém případě vypadá reference následovně:

//Odkazuje na styl označený jako "Basic text"
myDocument.paragraphStyles.item("Basic text");

Přidat styly do dokumentu lze nejrůznějšími způsoby. Základní je ta forma, kdy přidáme styl pod daným názvem do kolekce, přičemž stanovíme některé nebo všechny jeho vlastnosti (nespecifikované vlastnosti se přebírají z výchozích vlastností textu v dokumentu). Nastavení vlastností je obdobné nastavování vlastností textu, navíc jsou zde nastavení specifická pro styly, především vlastnosti basedOn (odstavcový styl, na němž je daný odstavec založen) či nextStyle (styl následného odstavce). Příslušné informace lze dohledat v referenční příručce InDesignu (paragraphStyle: s. 953-960, characterStyle s. 637-640). Při vytváření stylu daným způsobem je pak třeba ošetřit zejména případ, kdy daný styl již existuje:

//Zde je možné i jiné přiřazení dle potřeby
var myDocument=app.activeDocument;

//Zkusíme vytvořit odstavcový styl "My Head 1" s různými parametry,
//předpokládáme existenci stylů "Head" a "Text",
//try-catch ošetří situaci kdy daný styl již existuje
try{myDocument.paragraphStyles.add({name: "My Head 1", basedOn: myDocument.paragraphStyles.item("Head"), nextStyle: myDocument.paragraphStyles.item("Text"), appliedFont: "Arial", fontStyle: "Bold", pointSize: 18, aligment: "Center"})}
catch(e){alert("Styl daného názvu již existuje.")};

Styl je také možno vytvořit převzetím formátovacích charakteristik z aktuálně vybraného textu. Pěkným příkladem takové tvorby nám může být skript CreateCharacterStyle.jsx dodávaný s InDesignem. Na tomto místě si odcitujme jenom krátký úsek kódu (funkci pro samotné "snímání" formátovacích charakteristik) relevantní pro náš výklad, více zvídavý čtenář zjistí studiem daného skriptu.

function myDefineCharacterStyle(myCharacterStyleName){
    var myCharacterStyle;
    var myDocument = app.activeDocument;

    //Opět použití try-catch pro tvorbu nového stylu
    myCharacterStyle = myDocument.characterStyles.item(myCharacterStyleName);
    try{
        myCharacterStyle.name;
    }
    catch (myError){
        myCharacterStyle = myDocument.characterStyles.add({name:myCharacterStyleName});
    }

    //Textové charakteristiky se přebírají z aktuální pozice textového kurzoru
    var myCharacter = app.selection[0].insertionPoints.item(0);

    //Nastavení charakteristik
    myCharacterStyle.appliedFont = myCharacter.appliedFont;
    myCharacterStyle.fontStyle = myCharacter.fontStyle;
    myCharacterStyle.pointSize = myCharacter.pointSize;
    myCharacterStyle.leading = myCharacter.leading;
    myCharacterStyle.appliedLanguage = myCharacter.appliedLanguage;

//atd. atd. - viz daný skript
}

Možná je rovněž migrace stylů z jiného dokumentu - velmi zajímavý prostředek při tvorbě nového dokumentu bez použití šablony: Hlavním nástrojem zde je metoda importStyles objektu dokument. Obecně má tvar:

importStyles(typstylu,soubor,strategie)

kde typstylu stanovuje, jaké styly se mají z dokumentu, určeného názvem soubor načíst. V případě určení typu stylu lze načíst jen styly odstavcové či znakové nebo oba typy stylů současně, dále lze načítat i styly obsahu, objektové styly a styly tahů. Volitelný parametr strategie pak určuje, jakým stylem bude řešen případný konflikt při načítání stylů. Podrobnější popis viz s. 686 referenční příručky InDesignu CS2, na tomto místě jen několik příkladů:

//Načte odstavcové i znakové styly z daného dokumentu
//případný konflikt stylů řeší přejmenováním
app.activeDocument.importStyles(ImportFormat.textStylesFormat,File("/c/pokus/Adobe History.indd"),GlobalClashResolutionStrategy.loadAllWithRename);

//Načte z daného dokumentu objektové styly
//případný konflikt řeší přepsáním
app.activeDocument.importStyles(ImportFormat.objectStylesFormat,File("/c/pokus/Adobe History.indd"),GlobalClashResolutionStrategy.loadAllWithOverwrite);

Zjistit, jaký odstavcový či znakový styl je aplikován na daný text, umožňují vlastnosti textových objektů appliedParagraphStyle a appliedCharacterStyle. Jedná se o vlastnosti, které lze přiřazením měnit, a tedy tak i měnit dané charakteristiky, zajímavější je zde ovšem použití metod applyStyle, jež jako volitelnou logickou volbu nabízí možnost zachovat/odstranit veškeré lokální formátování.

//Obsah textové proměnné myText zformátuje znakovým stylem "Jméno"
myText.appliedCharacterStyle=app.activeDocument.characterStyles.item("Jméno");

//Na text odkazovaný proměnnou myText aplikuje odstavcový styl Text
//přičemž zachová všechno lokální formátování
myText.applyStyle(app.activeDocument.paragraphStyles.item("Text"),false);

Typické využití aplikace formátovacích charakteristik lze nalézt v případě hromadného formátování obsahu story (například u novinových článků, ale také třeba vizitek, vstupenek aj.). Možná aplikace může vypadat třeba takhle:

//Skript pro hromadné formátování dokumentu
//Předpokládáme, že daný dokument obsahuje odstavcové styly Head, Perex, Text a Author
//(formátujeme články v časopise, začínající nadpisem, pokračující perexem a končící jménem autora)
//Mechanismus ošetření story s málo odstavci je značně primitivní, zasluhuje dopracování

var myDocument=app.activeDocument;
var myAlert=alert("V dokumentu je story, která má málo odstavců");


for (i=0;i<myDocument.stories.length;i++)
    {
    //Nejprve nastavíme odstavcový styl veškerého textu na "Text"
    myDocument.stories[i].texts[0].applyStyle(myDocument.paragraphStyles.item("Text"));
    //Styl prvního odstavce v každé story bude "Head", try-catch ošetřuje výskyt story s méně jak dvěma odstavci
    try{myDocument.stories[i].texts[0].paragraphs[0].applyStyle(myDocument.paragraphStyles.item("Head"));}
    catch(e){myAlert};
    //Styl druhého odstavce v každé story bude "Perex"
    try{myDocument.stories[i].texts[0].paragraphs[1].applyStyle(myDocument.paragraphStyles.item("Perex"));}
    catch(e){myAlert};
    //Styl posledního odstavce story bude "Author"
    try{myDocument.stories[i].texts[0].paragraphs[-1].applyStyle(myDocument.paragraphStyles.item("Author"));}
    catch(e){myAlert};
    }

Vnořené styly

Jak bylo naznačeno v předchozím (značně jednoduchém příkladu), s pomocí skriptů lze styly aplikovat značně sofistikovaně v rámci celého dokumentu. Značně zajímavé každopádně i pak zůstává použití vnořených stylů (nested styles). Ty umožňují naráz hromadně aplikovat znakové styly v daném odstavci na základě odpovídající definice (viz náš dřívější článek na dané téma). Podrobnější rozbor daného prvku z hlediska jeho použití v rámci skriptování lze najít především v článku Dave Saunderse.

Závěrem

Tolik zatím k formátování textu. V příštím díle našeho seriálu se k němu ještě vrátíme, když se budeme zabývat jednou z nejdůležitějších a nejužitečnějších skriptovacích metod: hromadným hledáním a zaměňováním textu a textových charakteristik.

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: