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
skenerista, osvitář
Skriptujeme InDesign (5): Dokumenty poprvé
Adobe InDesign sazba
30. ledna 2006, 00.00 | V této části našeho seriálu se již konečně pustíme do konkrétních aplikací v prostředí InDesignu. Dnes to bude vytváření, otevírání, uzavírání a ukládání dokumentů.
V tomto díle našeho seriálu o skriptování v InDesignu přejdeme od teorie programování k praxi a začneme se zabývat konkrétními aplikacemi v prostředí InDesignu. Tento (a následující) díl bude patřit manipulaci s dokumenty InDesignu i dalšími soubory.
Tvorba dokumentu
Příkaz pro vytvoření dokumentu jsme již zvládli v našem ukázkovém skriptu helloworld, a tak jen připomeňme, že měl podobu
var myDocument=app.documents.add();
Jak jsme se již také zmínili, daný příkaz (resp. metoda add, tedy speciální případ funkce) může mít své volitelné parametry. Pokud nahlédneme do referenční příručky skriptování v InDesignu C2, zjistíme, že úplný tvar příkazu je následující:
app.documents.add(ShowingWindow,DocumentPreset);
Parametr ShowingWindow, který je typu logická hodnota (true či false) určuje, zda má být vytvořený dokument zobrazen či nikoli v okně InDesignu. Vytvoření "skrytého" dokumentu má svůj význam třeba v případě, že chceme s daným dokumentem následně provádět sérii výpočetně náročných operací: skrytí manipulaci urychlí. Zobrazení dokumentu pak zajistíme přidáním nového okna do dokumentu. Příslušný skript by mohl vypadat nějak takhle:
var myDocument=app.documents.add(false);
//další kód
var myWindow= myDocument.windows.add();
Obvykle zajímavější je druhá možnost, kdy dokument vytváříme s použitím připravené sady nastavení, tedy tzv. presetu. Presety si přitom můžeme vytvořit buďto manuálně, s pomocí odpovídajícího dialogu InDesignu nebo opět s pomocí skriptu, jak si ukážeme (spolu s popisem toho, jak měnit vlastnosti vytvářených i stávajících dokumentů) dále.
//Předpokládáme, že existuje preset Brožura
var myDocument=app.documents.add(true,DocumentPreset("Brožura"));
Otevření dokumentu
Častý může být i požadavek na otevření dokumentu stávajícího. Nejjednodušší způsob který nám toto dovolí, má například formu následujícího příkazu (mimochodem, odkaz v příkladu vede na dokument obvykle obsažený v instalaci InDesignu.):
app.open(File("/c/Program Files/Adobe/Adobe InDesign
CS2/Samples/Adobe History.indd"));
Jde zde tedy o aplikaci metody open pro objekt aplikace (tedy InDesign), jejímž parametrem je objekt File. Ten (spolu s objektem Folder) vydá na zvláštní výklad, na tomto místě si povšimněme pouze toho, že jako parametr má určen název souboru, který je uzavřen v uvozovkách (název je tedy chápán jako textový řetězec). Co se pak pojmenování souboru týče, v našem příkladu jsme použili na platformě nezávislého odkazování na soubor, známého jako URI (universal resource identifier). Výhoda je zřejmá: skript půjde použít v Macovi i Windows, aniž bychom museli v odkazu cokoli měnit. Jinak je možno použít i odkazů obvyklých pro Windows či Maca, odkazovat lze i na serverové disky a zástupce, k dispozici jsou také relativní odkazy vzhledem k aktuálně použitému adresáři aj. Podrobnější výklad je zde poměrně rozsáhlý a zájemci zde doporučujeme odpovídající úsek referenční příručky skriptování v InDesignu CS2 (s. 535-538). Podrobný popis metod a vlastností objektů File a Folder nalezneme tamtéž na stranách 539-555.
Určení jména souboru "natvrdo" ve skriptu není samozřejmě jedinou možností, jak jméno zadat. Jinou obvyklou formu poskytují uživatelské dialogy. Těm se budeme podrobněji věnovat ve výkladu o objektu Application (app, tedy samotném InDesignu) někdy příště, na tomto místě uveďme alespoň jeden názorný, snadno modifikovatelný příklad, využívající metodu openDialog objektu File (a povšimněte si testu s použitím hodnoty "null", který budeme využívat ještě mnohokrát):
//openDialog zobrazí dialogové okno pro volbu souboru
//má dva (volitelné) parametry
//první uzavřen v uvozovkách zobrazí text, který se vypíše v záhlaví
okna
//druhý opět v uvozovkách stanoví souborové masky s popiskem oddělené
čárkou pro snazší výběr, mezi kterými se přepíná pomocí seznamu
//"Soubory typu" v dialogovém okně
//RTF jsme uvedli jako příklad nastavení masky, nyní otevřete určitě
dokument InDesignu!
var myDoc=File.openDialog("Zvolte soubor:","Dokumenty InDesignu:
*.indd, Dokumenty InDesignu začínající na a: a*.indd, Dokumenty RTF:
*.rtf");
//následující podmínka (využívající operátoru pro porovnání != čili
"nerovná se") testuje, zda náhodou uživatel nezavřel dialog
//tlačítkem
Cancel (Zrušit)
//a nevybral tak žádný dokument. Pak openDialog vrací hodnotu "null"
čili nic,
//jinak vrací odkaz na soubor pro zpracování
if (myDoc != null)
{
app.open(myDoc);
}
else
{
alert("Nezvolili jste žádný dokument");
}
Poznamenejme zde ještě, že daným způsobem lze vybrané soubory nejen přímo otevírat, ale i zpracovávat různými dalšími způsoby, což se přitom týká nejen dokumentů InDesignu.
Dále je zde zajímavá možnost automatického otevírání více dokumentů současně, typicky více dokumentů z téže složky. Skript, který něco takového zajistí, by mohl vypadat třeba takhle:
//Tento skript otevře všechny dokumenty InDesignu ze zadané
složky.
//Nastavte složku podle svých požadavků.
var myFolder="/c/Program Files/Adobe/Adobe InDesign CS2/Samples/";
//Metoda getFiles vytvoří pole, do kterého načte všechny dokumenty
odpovídající dané souborové masce
var myFiles=Folder(myFolder).getFiles("*.indd");
//Otestujeme, zda pole není prázdné (tj. ve složce není žádný dokument
s příponou .indd)
if (myFiles.length != 0)
{
for (var
i=0;i<myFiles.length;i++) //cyklem zpracujeme
jednotlivé prvky pole
{
app.open(myFiles[i]);
//otevřeme jednotlivé soubory
}
}
//Upozorníme na absenci dokumentů
else{
alert("Složka " + myFolder + "
neobsahuje žádný dokument InDesignu")
}
Zde i jinde je třeba dávat pozor na to, aby InDesign neotevřel tentýž dokument vícekrát: ošetřeními příslušných inkonzistencí ve skriptu se nicméně na tomto místě zabývat nebudeme.
Přístup k dokumentům otevřeným v InDesignu
Dokumenty otevřené v InDesignu lze zpracovávat různým způsobem. K manipulaci je přitom vhodné využít objektu app.documents, což je vlastně pole, přes které přistupujeme k aktuálně otevřeným dokumentům (tedy objektům typu Document). Výpis toho, co je právě otevřeno, zajistíme třeba takto,
//Vytvoříme proměnnou pro textový seznam názvů souborů
var myList="";
//Cyklem projdeme pole dokumentů otevřených v InDesignu
//počet dokumentů je určen vlastností app.documents.length,
//která vrací počet prvků pole
var myDocumentCount=app.documents.length;
for (var i=0;i<myDocumentCount;i++)
//Jména (určená metodou app.documents[i].name) vložíme do proměnné
myList po řádcích (oddělovač \n)
{
myList=myList+app.documents[i].name+"\n";
}
//Vypíšeme seznam
alert(myList);
Je samozřejmě jasné, že mimo metody alert lze použít mnoho dalších, smysluplnějších způsobů zpracování. K dokumentům pak lze přistupovat i s pomocí metody app.documents.item(index_dokumentu). K dokumentu, který je v InDesignu právě v popředí pak přistupujeme s pomocí metody app.activeDocument (který lze adresovat i jako app.documents[0] nebo app.documents.item(0)). Příklad:
Kód
alert("Právě aktivní dokument se jmenuje " +app.activeDocument.name);
má stejný efekt jako
alert("Právě aktivní dokument se jmenuje "
+app.documents.item(0).name);
či
alert("Právě aktivní dokument se jmenuje "
+app.documents[0].name);
Uzavírání, ukládání a export dokumentů
Prakticky nejobvyklejší operace, které s dokumenty otevřenými v InDesignu provádíme, jsou uzavírání a ukládání. Pro prosté uzavření dokumentu se používá metody close:
//Takhle uzavřeme aktivní dokument
app.activeDocument.close();
Daná metoda má dva volitelné parametry: první může mít hodnotu SaveOptions.ask (zobrazí se dotaz na uložení souboru, pokud jsou v dokumentu neuložené změny - výchozí volba), SaveOptions.no (uzavře dokument bez uložení) nebo SaveOptions.yes (dokument uloží). Druhý parametr pak určuje, kam má být v případě použití SaveOptions.yes uložení provedeno (bez tohoto parametru se zobrazí dialog pro výběr souboru). Příklady:
Tento kód se na uložení zeptá
app.activeDocument.close(SaveOptions.ask);
Tento kód provede uložení dokumentu do souboru určeného proměnnou myFileName
var myFileName="/c/pokus/pokus.indd";
app.activeDocument.close(SaveOptions.yes,myFileName);
Tento kód uzavře všechny otevřené dokumenty a nechá je případně uložit:
//Tenhle cyklus jde pozpátku
//používáme takřka vždy, když v rámci cyklu měníme počet prvků v poli
(kolekci)
for (myCounter=app.documents.length;myCounter>0;myCounter--)
{
//Tady jsme k odkazování dokumentů použili metodu item
app.documents.item(myCounter-1).close(SaveOptions.yes);
}
Dokumenty lze samozřejmě ukládat i bez toho, že bychom je uzavírali. K danému účelu slouží metoda save objektu Document. Ta má dva volitelné parametry: první (objekt File) určuje, kam se má dokument uložit, druhý (logická hodnota) pak, zda má být dokument uložen jako šablona (je zapotřebí nastavit na true, výchozí hodnota je false). K tomu, abychom ve skriptech rozhodli, zda má či nemá daný dokument smysl ukládat, slouží pak vlastnosti objektu dokument saved (logická hodnota, true pokud byl dokument vůbec kdy od svého vytvoření uložen) a modified (true pokud byl dokument od posledního uložení modifikován). Příklad:
Uloží aktivní dokument pokud byl modifikován:
if (app.activeDocument.modified == true)
{app.activeDocument.save();}
Závěrem
Tolik zatím co se manipulace s dokumenty týče. Příště se podíváme například na to, jak lze u dokumentů měnit jejich vlastnosti, či jak je tisknout nebo exportovat do různých formátů.
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ě
-
14. října 2024
-
22. října 2024
-
14. listopadu 2024
-
10. prosince 2024