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
VSE
Skriptujeme InDesign (18): Tabulky poprvé
Adobe InDesign sazba
17. července 2006, 00.00 | Tabulky jsou v InDesignu objekty, které složitostí svého zpracování přímo volají po
nasazení skriptů. V tomto a příštím díle se tedy podíváme na skriptování u daných prvků
podrobněji. Tento díl bude přitom věnován tvorbě tabulek.
Tabulky jsou v InDesignu objekty, které složitostí svého zpracování přímo volají po nasazení skriptů. V tomto a příštím díle se tedy podíváme na skriptování u daných prvků podrobněji. Tento díl bude přitom věnován tvorbě tabulek.
Základní možnosti tvorby
Tabulky jsou objekty ukládané v kolekci tables, které jsou spojeny s textovým obsahem, tedy objekty Story, Paragraph, Word, Text atp. a samozřejmě i výběrem (pokud je textový) a vkládacím bodem (insertion point). Umístit tabulku do dokumentu znamená použít metodu add pro kolekci tables u objektů naznačených typů. Obecný tvar dané metody je:
add(způsob_umístění,reference,nastavení)kde způsob_umístění je pozice, na kterou je tabulka umístěna (výchozí je za daný objekt), reference určuje k jakému objektu se určení umístění vztahuje, nastavení pak dovolují nastavit výchozí parametry tabulky. Všechny parametry dané metody jsou nepovinné. Příklady:
//Vytvoří tabulku na konci prvního odstavce první story v
dokumentu
app.activeDocument.stories[0].paragraphs[0].tables.add();
//Umístí tabulku na začátek výběru
app.selection[0].tables.add(LocationOptions.atBeginning);
Co se nastavení tabulky týče, výchozí hodnoty jsou zde takové, že tabulka je nastavena přes celou šíři daného textového rámečku a má čtyři řádky a čtyři sloupce, přičemž nemá záhlaví ani zápatí. Dané hodnoty a spolu s tím i mnoho dalšího (včetně obsahu jednotlivých buněk) se dají měnit, jak již bylo řečeno, při samotném vytváření tabulky a pak i kdykoli později. Hodnoty, které je zde možno nastavit, si čtenář může nastudovat z referenční příručky skriptování (viz s. 1091-1097) a k leckterým vlastnostem se pak vrátíme v příštím výkladu o manipulaci s tabulkami, na tomto místě si tedy uvedeme jen základní příklad pro pochopení principu práce v daném případě:
//Umístí novou tabulku na konec první story dokumentu
//Její šířka je 20 cm, počet řádků 10, počet řádků záhlaví 1, počet
sloupců 6,
//prvních šest buněk obsahuje čísla od jedné do šesti, osmá buňka
obsahuje číslo 8, ostatní buňky jsou prázdné,
//tabulka je ohraničena tahy o šířce 1 mm
app.activeDocument.stories[0].tables.add(LocationOptions.atEnd,undefined,{width:"15
cm", bodyRowCount:10, headerRowCount:1,columnCount:6,
contents: ["1","2","3","4","5","6","","8"],
leftBorderStrokeWeight: "1mm", rightBorderStrokeWeight: "1mm",
bottomBorderStrokeWeight: "1mm", topBorderStrokeWeight: "1mm",});
Převod textu
Jinou obvyklou metodou tvorby tabulek je převod textu vybraného v dokumentu InDesignu. Ten zajistí metoda convertToTable, která má následující syntaxi:
convertToTable(oddělovač_sloupců,oddělovač_řádků,počet_sloupců)kde oddělovač_sloupců určuje znak, který odděluje sloupce, oddělovač_řádků znak, jenž odděluje řádky a počet_sloupců určuje počet sloupců, což je zapotřebí pouze jsou-li oddělovače řádků a sloupců totožné. Všechny uvedené parametry jsou nepovinné, nejsou-li použity, provede se konverze podle výchozích nastavení InDesignu.
Příklady:
Máme-li v dokumentu InDesignu vybrán následující textový úsek (mezi položkami jsou vloženy tabulátory)
Jméno
Příjmení Datum narození
Jan Novák
14. 5. 1995
Josef Novák 12. 3. 1967
Jiří Novák 1. 1. 2004
provedeme jeho převod na tabulku následujícím příkazem:
app.selection[0].convertToTable("\t","\r");
Z jediného vybraného odstavce pak uděláme tabulku například takto:
app.selection[0].convertToTable("\r","\r",1);
Jinou možnost tvorby tabulky daným způsobem představuje načtení obsahu textového souboru, této variantě se nicméně budeme věnovat až v části věnované databázovému publikování.
Import z Excelu
Konečně často používanou možnost jak vytvořit tabulku, představuje i odpovídající import z Microsoft Excelu. Importní dialog zde dovoluje nastavit řadu charakteristik, jak je ostatně nejlépe vidět z příslušného dialogového okna.
Použití dané funkce ve skriptech je nicméně komplikováno chybou ve skriptovacím enginu InDesignu CS2. Správně by totiž příkaz place, použitý například pro textové objekt či rámeček měl zajistit vložení určité části dokumentu Excelu podle následující syntaxe:
place(soubor,dialog,nastavení)kde soubor je určení souboru, jenž má být importován, dialog je logická hodnota vypínající/zapínající importní dialog a nastavení pole hodnot, určujících parametry importního dialogu. Když jsme ale spustili následující skript:
var myDoc=app.activeDocument;
myDoc.pages[0].textFrames[0].place(File("/c/clanky/skriptid/tabulka.xls"),false,{tableFormatting:
TableFormattingOptions.excelFormattedTable});
odmítl se importní dialog vypnout a jeho hodnoty zůstaly ve výchozí podobě. Daný problém by mohl samozřejmě nepříjemně nabourat automatizované zpracování obsahu uvedeného typu. V diskusní fóru o skriptování InDesignu jsme nicméně našli kód Davea Saunderse, který daný problém řeší skriptem vypínajícím uživatelskou interaktivitu. Netvrdíme, že se jedná o jediné možné a zcela bezproblémové řešení, daný skript zde každopádně s drobnými úpravami uvádíme, a to i jako ukázku toho, co vše a jak lze při importu z Excelu kontrolovat.
//Určení dokumentu Excelu, který budeme importovat
var myFile=File("/c/clanky/skriptid/tabulka.xls");
//Lze i jinak, D. Saunders nabízí například
//var myFile = File.openDialog("Choose an Excel file");
//if (myFile == null) { exit() }
//Určení dokumentu do kterého budeme importovat
var myDoc = app.activeDocument;
//Vypnutí interaktivity v CS i CS2
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.neverInteract;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.neverInteract;
}
//Použití preferencí importu, které jsou nastaveny dále
setXLimportPrefs();
try {
//Import na zadanou pozici
myDoc.pages[0].textFrames[0].place(myFile);
} catch (e) {
alert (e + " " + app.excelImportPreferences.errorCode);
exit();
}
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.interactWithAll;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.interactWithAll;
}
//Určení charakteristik importu
//některá nastavení jsou zakomentována, tj. v platnosti je místo nich
výchozí nastavení importního dialogu
//- v případě potřeby tedy odkomentujeme a nastavíme na vlastní
požadované hodnoty.
//Všimněte si zajímavého triku s nastavením aligmentStyle a
tableFormatting
//- eliminuje potřebu listování referenční příručkou při změně hodnot
po delším čase.
function setXLimportPrefs() {
with (app.excelImportPreferences) {
alignmentStyle = [AlignmentStyleOptions.spreadsheet,
AlignmentStyleOptions.leftAlign,
AlignmentStyleOptions.rightAlign,
AlignmentStyleOptions.centerAlign][0];
//decimalPlaces = 3;
//errorCode = 0;
//preserveGraphics = true;
//rangeName = "";
//sheetIndex = 0;
//sheetName = "";
//showHiddenCells = true;
tableFormatting =
[TableFormattingOptions.excelFormattedTable,
TableFormattingOptions.excelUnformattedTable,
TableFormattingOptions.excelUnformattedTabbedText][2];
useTypographersQuotes = true;
//viewName = "";
}
}
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