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:
-
5. září 2024
Matrixmedia - Obsluha a tisk na velkoformátových digitálních tiskárnách
-
30. září 2024
-
4. října 2024
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):
- 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
-
29. listopadu 2013
-
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ě
-
5. srpna 2024
Bubnový scanner na 4000dpi optické rozlišení + PC + software
-
8. září 2024
-
14. října 2024
-
5. listopadu 2024