Skriptujeme InDesign (19): Tabulky podruhé - 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 (19): Tabulky podruhé

Adobe InDesign sazba

24. července 2006, 00.00 | I v tomto díle se budeme věnovat tabulkám. Tentokrát se naše pozornost zaměří na
nastavení tabulek jako takových a dále na práci se sloupci, řádky a buňkami. Blíže
se dále budeme zabývat i hromadným zpracováním tabulek a také některými užitečnými hotovými
skripty.

I v tomto díle se budeme věnovat tabulkám. Tentokrát se naše pozornost zaměří na nastavení tabulek jako takových a dále na práci se sloupci, řádky a buňkami. Blíže se dále budeme zabývat i hromadným zpracováním tabulek a také některými užitečnými hotovými skripty.

Zpracování parametrů tabulek

K tomu, abychom tabulku určili ke zpracování, lze použít různých metod. Obvyklý je zde interaktivní výběr, kdy uživatel umístí kurzor do tabulky či vybere některé její buňky. Skript pak určuje příslušnou tabulku s pomocí metody parent dané selekce. Přístup zde demonstruje následující skript:

function catchTable(){
//Nejprve otestujeme, zda je vůbec něco vybráno
if (app.selection.length > 0){
   //Vrací danou tabulku, pokud jsou označeny nějaké buňky
   if (app.selection[0].parent.constructor.name == "Table"){return app.selection[0].parent};
   //Vrací danou tabulku, pokud je kurzor umístěn do některé její buňky
   else {if (app.selection[0].parent.parent.constructor.name == "Table"){return app.selection[0].parent.parent};
         else{alert("Umístěte kurzor do tabulky nebo vyberte nějaké buňky");exit()}
        }
   }
else{alert("Umístěte kurzor do tabulky nebo vyberte nějaké buňky");exit()};
}

//Výsledek výběru umístíme do proměnné myTable
var myTable=catchTable();

Jinak lze tabulky vybírat i na základě referencí v rámci dokumentu: blíže se k dané záležitosti vracíme dále, v části věnované hromadnému zpracování tabulek.

Každá tabulka (objekt typu table) obsažená v dokumentu má řadu vlastností a metod. K základním zde patří columnCount pro počet sloupců a bodyRowCount pro počet řádků. U tabulek určených obvykle pro sazbu přes více rámečků je dále možno nastavit třeba headerRowCount (počet řádků záhlaví tabulky, max. 25) a footerRowCount (počet řádků zápatí tabulky, max. 25). Při různých kalkulacích bývají dané parametry často používány v kombinaci s metodami width pro objekt column (určuje šířku daného sloupce) a height (vrací výšku tabulky) či width (vrací šířku tabulky) objektu table. Nastavením řádků (rows) a sloupců (columns) pak odpovídá odpovídající rozdělení tabulky do buněk, tedy objektů typu cell.

Tabulku lze různým způsobem stylizovat nastavení tahů a výplní, poněkud odlišná syntaxe, ale podobné možnosti jsou zde při nastavování parametrů celé tabulky na straně jedné a zvolených sloupců či řádků na straně druhé. Dále lze použít i střídání výplní a tahů nebo například prostředky pro nastavení mezery před a za tabulkou (spaceBefore, spaceAfter). Na tomto místě uveďme několik jednoduchých příkladů příslušných nastavení, více si čtenář snadno odvodí a implementuje s použitím nastavení odpovídajících vlastností popsaných v referenční příručce InDesignu (viz. s. 1 091-1 097):

//Nejprve vytvoříme novou tabulku
var myTable=app.activeDocument.stories[0].tables.add();

//Nastavíme základní vlastnosti nové tabulky
//- jiný způsob nastavování jsme si ukázali v předchozí části tohoto seriálu
myTable.width="20cm";
myTable.columnCount=3;
myTable.bodyRowCount=8;
myTable.spaceBefore="1cm";
myTable.spaceAfter="1cm";

//Upravíme šířku sloupců tabulky tak, že první je široký 20 procent současné délky
//další dva pak mají shodně 40 procent současné délky. Samozřejmě je možné použít
//i přiřazení normálních délkových jednotek, daným způsobem je ale snazší úprava při
//změnách geometrie stránky
var myTableWidth=myTable.width;
myTable.columns[0].width=0.2*myTableWidth;
myTable.columns[1].width=0.4*myTableWidth;
myTable.columns[2].width=0.4*myTableWidth;

//Nyní nastavíme ohraničení tabulky
myTable.bottomBorderStrokeType="Solid";
myTable.topBorderStrokeType="Solid";
myTable.leftBorderStrokeType="Solid";
myTable.rightBorderStrokeType="Solid";
myTable.bottomBorderStrokeWeight="1mm";
myTable.topBorderStrokeWeight="1mm";
myTable.leftBorderStrokeWeight="1mm";
myTable.rightBorderStrokeWeight="1mm";


//Nastavíme ohraničení spodku prvního řádku
myTable.rows[0].bottomEdgeStrokeType="Dashed";
myTable.rows[0].bottomEdgeStrokeWeight="1mm";

Zpracování buněk

Každá tabulka se skládá z jednotlivých buněk, tedy objektů cell. Jejich adresování je možné nejsnáze prostřednictvím polí cells, rows a columns, případně lze použít metody everyItem() pro současný přístup k vícero buňkám, obdobně lze použít metodu itemByRange(). Příklady:

//Do čtvrté buňky tabulky vepíše písmeno a
myTable.cells[3].contents="a";
//Do třetí buňky na třetím řádku vepíše písmeno B
myTable.rows[2].cells[2].contents="B";
//Buňky čtvrtého řádku vyplní písmenem c
myTable.rows[3].cells.everyItem().contents="c";
//První až třetí buňku pátého řádku vyplní písmenem d
myTable.rows[4].cells.itemByRange(0,2).contents="d";
//Vyprázdní všechny buňky dané tabulky
myTable.cells.everyItem().contents="";

Mimo přiřazení obsahu buněk způsobem naznačeným výše lze rovněž nastavit třeba formátování textu v buňkách (včetně natočení) a určit vertikální zarovnání, nastavení účaří či rozdělení pomocí diagonální čáry. Dále jsou k dispozici vlastnosti pro tahy a výplně obdobné nastavování řádků a sloupců popsaným výše. Rovněž je vhodné zmínit split a merge pro rozdělování a spojování buněk. Opět si ukažme jen několik ilustrativních nastavení, všechna nastavení jsou popsána v referenční příručce (s. 611-617):

//myCells je buňka či rozsah buněk adresovaný některým z výše naznačených způsobů

//Aplikuje odstavcový styl s názvem "Normální" (musí v daném dokumentu existovat)
myCells.texts[0].appliedParagraphStyle="Normální";

//Nastaví vertikální zarovnání obsahu buněk nahoru
myCells.verticalJustification=VerticalJustification.topAlign;

//Rotuje obsah buněk o 180 stupňů (přípustné úhly jsou 0, 90, 180, 270)
myCells.rotationAngle=180;

//Vloží do buňek diagonální čaru vedenou z levého horního rohu
myCells.topLeftDiagonalLine=true;
myCells.diagonalLineStrokeType="Solid";
myCells.diagonalLineStrokeWeight="1mm";

//Sloučí vybrané buňky
myCells.merge();

//Rozdělí vybrané buňky a to vertikálně
myCells.split(HorizontalOrVertical.horizontal);

Hromadné úpravy tabulek

Silné možnosti nabízí InDesign v případě, že potřebujeme naráz zpracovat tabulky v celém dokumentu nebo jeho určitém rozsahu. Připomeňme na tomto místě, že tabulky jsou ukládány v kolekci tables a jsou součástí textových objektů (story, paragraph, word aj.). Pole všech tabulek v dokumentu lze získat například takto:

app.activeDocument.stories.everyItem().tables;

Pokud je třeba zapátrat, zda dokument obsahuje nějaké tabulky vložené do buněk tabulek (vnořené tabulky), lze to učinit například takhle:

var myVnorTab=app.activeDocument.stories.everyItem().tables.everyItem().cells.everyItem().tables;
if(myVnorTab.length!==0){alert("Dokument obsahuje vnořené tabulky, jejich počet je "+myVnorTab.length)}
else{alert("Dokument neobsahuje vnořené tabulky.")};

Více nežli při naznačené jednoduché diagnostice lze daný přístup použít při hromadných úpravách tabulek. Máme-li například dokument s několika stovkami tabulek, u kterých potřebujeme změnit nastavení šířky sloupců a odstavcových stylů na určité pevné hodnoty, lze to provést jediným skriptem třeba takto:

//Pole s nastavením šířek pro jednotlivé sloupce. Tabulky mohou mít více (nastaví se jen odpovídající počáteční sloupce) i méně sloupců než je položek daného pole
myWidths=["3cm","3cm","2cm","2cm","2cm","1cm","1cm","1cm","1cm","3cm","1cm"];

//Budeme zpracovávat všechny story v dokumentu
myDoc = app.activeDocument;
myStories = myDoc.stories;
for(i=0;i<myStories.length;i++){
 myTables = myStories[i].tables;
 for(j=0;j<myTables.length;j++){
 //Nastavíme formátování pro každou tabulku (dané odstavcové styly musí existovat!)
    myTables[j].columns.everyItem().cells.everyItem().texts[0].appliedParagraphStyle="Tabulka";
    myTables[j].columns.everyItem().cells[0].texts[0].appliedParagraphStyle="První řádek";
    myTables[j].columns.everyItem().cells[-1].texts[0].appliedParagraphStyle="Poslední řádek";
    //Nastavíme šířku sloupců
    for(k=0;k<myWidths.length;k++){
    try {
      myTables[j].columns[k].width = myWidths[k];
    } catch (e) {
    //Pokud má tabulka příliš málo sloupců, řešíme to předčasným výstupem z cyklu
    break;
   }
  }
 }
}

Hotové skripty

Pro úpravy tabulek existuje i řada hotových skriptů, které lze jak přímo používat, tak studovat pro lepší pochopení dané problematiky. Velmi užitečný z obou hledisek je takto balíček skriptů TableTweakers Davea Saunderse. Skripty tableColWidthSqueezeL a tableColWidthSqueezeR zde slouží k vyladění šířky sloupců v tabulce. Uživatel vybere dva či více sloupců a poté spustí jeden ze zadaných skriptů. V prvním případě se zmenší šířka levého sloupce o jednu jednotku nastavenou aktuálně na pravítku a šířka pravého sloupce se pak o jednu jednotku zvýší. SqueezeR redukuje obdobně šířku pravého sloupce a zvětšuje šířku levého.

Skript tableFitWidthColumn nastaví šířku všech sloupců v tabulce tak, aby se tabulka roztáhla na šířku textového rámečku, který obsahuje první (či jedinou) část tabulky. Skript funguje pouze s obdélníkovými textovými rámečky. Skript tableSetWidh nastaví šířku tabulky na uživatelem stanovenou hodnotu, přičemž v odpovídajícím poměru změní šířku jednotlivých sloupců. Konečně je k dispozici i tableVerticalJustification pro úpravu meziřádkových mezer v tabulce tak, aby se tabulka zarovnala vertikálně do daného textového rámečku. S tabulkami pak pracují i další skripty téhož autora, PopTabFmClip (update obsahu tabulky či její části textem ze schránky se zachováním všech formátovacích charakteristik v tabulce nastavených, cena 24,965 USD) a HeadStraddler (tvorba nadpisů přes více sloupců, nadpisy se zde vkládají do nově vytvořené tabulky, cena 19,95 USD).

Z jiného soudku je pak bezplatný TableCellStyle M. Sobolewskeho. Ten dovoluje na vybranou skupinu buněk aplikovat sadu nastavení (tahy, výplň, výška buněk, aplikovaný odstavcový styl aj.). Uživatel si takto může vytvořit různé podoby skriptu s různými nastaveními a vytvořit si tak jakési buňkové styly, skript je navíc poměrně snadno rozšiřitelný o případnou podporu dalších parametrů.

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: