Skriptujeme InDesign (6): Dokumenty 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:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Software

Skriptujeme InDesign (6): Dokumenty podruhé

Adobe InDesign sazba

6. února 2006, 00.00 | Rozměry či okraje stránky, volby pracovní plochy i mnohé další vlastnosti dokumentů
InDesignu lze měnit pomocí skriptů různorodými způsoby. O jejich přiblížení se pokoušíme
v další části našeho pravidelného seriálu.

V této části našeho seriálu o skriptování v InDesignu se podíváme na možnosti, jak ovlivnit nastavení dokumentů zpracovávaných InDesignem. Náš výklad se zde bude týkat především konfigurace na úrovni stránek, další parametry budou probrány v kapitolách věnovaných práci s XMP metadaty a konfiguraci samotného InDesignu (vlastnosti a metody objektu app).

Postupy pro nastavení dokumentu

S pomocí skriptování lze v InDesignu kontrolovat nastavení dokumentu v podstatě třemi různými způsoby:
- při tvorbě dokumentu nebo kdykoli později měníme nastavení preferencí dokumentu či jiných objektů (pracovní plochy, stránek, metadat aj.)
- při tvorbě dokumentu použijeme odpovídající preset, čili sadu přednastavených hodnot
- před tvorbou dokumentu změníme odpovídající nastavení aplikace a pak vytvoříme nové dokumenty s těmito nastaveními

Pojďme se na dané možnosti podívat blíže.

Změna preferencí dokumentu

Základní kontrolu nad nastaveními dokumentu nám poskytuje objekt documentPreferences. S jeho použitím lze nastavit vybrané parametry dokumentu třeba následovně:

//Vytvoříme nový dokument a ten pak nastavíme
var myDocument = app.documents.add();
//nebo můžeme měnit nastavení dokumentu stávajícího
//(pak zakomentujte předchozí deklaraci proměnné myDocument a odkomentujte následující řádek)
//var myDocument=app.activeDocument;
//nebo použijte jiná zpracování
//(třeba hromadné nastavení vlastností pro všechny dokumenty z dané složky apod. - viz minulý díl)

//V následném kódu je použití příkazu with přípustné a ušetří nám hodně psaní:
//připomeňme, že jinak bychom museli psát třeba
//myDocument.documentPreferences.pageHeight="210mm";
//atd.
with(myDocument.documentPreferences){
//Nastavení stránek

//Rozměry
pageHeight = "210mm"; //výška stránky, lze použít i jiné měrové jednotky (cm, pt, c jako cicero aj.)
pageWidth = "297mm"; //šířka stránky

//Orientace
pageOrientation = PageOrientation.landscape; //orientace, lze použít i .portrait

//Počet stran v dokumentu
pagesPerDocument = 10; //počet stránek v dokumentu

//Protilehlé stránky
facingPages=true; //zapne protilehlé stránky, false je vypne

//Spadávka čili Bleed
documentBleedBottomOffset = "10mm"; //dole
documentBleedTopOffset = "10mm"; //nahoře
documentBleedInsideOrLeftOffset = "10mm"; //vlevo
documentBleedOutsideOrRightOffset = "10mm"; //vpravo
//Jsou-li hodnoty na všechny strany stejné, lze také nastavit příznak
//documentBleedUniformSize = true;
//a pak provést nastavení jen jednoho parametru
//documentBleedTopOffset = "10mm";

//Popis čili Slug
slugBottomOffset = "40mm"; //dole
slugTopOffset = "40mm"; //nahoře
slugInsideOrLeftOffset = "20mm"; //vlevo
slugRightOrOutsideOffset = "20mm"; //vpravo
//Jsou-li hodnoty na všechny strany stejné, lze také nastavit příznak
//documentSlugUniformSize = true;
//a pak provést nastavení jen jednoho parametru
//slugTopOffset = "10mm";
}

Povšimněme si (nejen v daném příkladu, ale zejména referenční příručce skriptování InDesignu CS2 - viz s. 690 a dále), že leccos v nastaveních daného objektu pro dokumenty chybí. Změnu obarvení vodítek pro spadávku a popis a další nastavení spojená s pracovní plochou je tudíž nutno měnit nastavením objektu pasteboardPreferences.

//Použijte samostatně nebo třeba přidejte do předchozího skriptu
with(myDocument.pasteboardPreferences){

//Nastavení barvy vodítek
//přípustné hodnoty pro UIColors lze najít v referenční příručce ID CS 2 na s. 1238 a dále
bleedGuideColor = UIColors.magenta;
slugGuideColor = UIColors.red;
//barva se též dá definovat s pomocí RGB hodnot (uspořádaná trojice číselných hodnot z intervalu 0-255)
//třeba
//bleedGuideColor = [0, 198, 192];
//slugGuideColor = [192, 192, 192];

//Nastavení rozměrů pracovní plochy
//(minimální svislý posun)
minimumSpaceAboveAndBelow = "12mm";

//Nastavení barvy pracovní plochy
//přes UIColors (viz poznámka výše)
pasteboardColor = UIColors.white;
previewBackgroundColor = UIColors.gray;
//nebo přes RGB hodnoty
//třeba
//pasteboardColor = [0, 0, 0];
//previewBackgroundColor = [192, 192, 192];
}

Důležitější je pak kontrola okrajů vytvářených stránek. Pro tu lze použít objekt marginPreferences, ovšem nikoli stejným způsobem jako tomu bylo u documentPreferences či pasteboardPreferences. Uvedený objekt totiž v námi nastíněných případech dovoluje měnit vždy nastavení pouze pro konkrétní stránku, takže například pro první stránku v dokumentu se nastavení okrajů a sloupců provede následovně:

//Použijte samostatně nebo třeba přidejte do předchozího skriptu
//připomeňme, že stránky jsou v kolekci/poli pages
//a přistupujeme k nim přes metodu pages.item(císlo_stránky)
//přičemž první stránka má index 0
with (myDocument.pages.item(0).marginPreferences){
columnCount = 7; //počet sloupců
columnGutter = "1mm"; //mezera mezi sloupci
top = "4mm"; //okraje nahoře
bottom = "6mm"; //okraje dole
left = "6mm"; //vlevo nebo též uvnitř, pokud jsou zapnuté protilehlé stránky
right = "4mm"; //vpravo nebo též vně, pokud jsou zapnuté protilehlé stránky
}

Pro všechny stránky v dokumentu lze použít třeba následující cyklus:

for (i=0;i<myDocument.pages.length;i++)
{with (myDocument.pages.item(i).marginPreferences){
columnCount = 7; //počet sloupců
columnGutter = "1mm"; //mezera mezi sloupci
top = "4mm"; //okraje nahoře
bottom = "6mm"; //okraje dole
left = "6mm"; //vlevo nebo též uvnitř, pokud jsou zapnuté protilehlé stránky
right = "4mm"; //vpravo nebo též vně, pokud jsou zapnuté protilehlé stránky
}
}

Práce s presety

Preset čili přednastavené hodnoty dovoluje uložit řadu údajů o nastavení stránek dokumentu v podobě samostatného konfiguračního souboru. Ten se pak použije při tvorbě dokumentu následujícím způsobem (blíže viz minulý díl našeho seriálu):

app.documents.add(true,DocumentPreset("název_presetu"));

V rámci presetu lze přitom zachytit jak nastavení popsaná výše s pomocí documentPreferences, tak marginPreferences. Výhodou presetu pak je především skutečnost, že se zde jedná o sadu hodnot, kterou můžeme používat opakovaně v různých skriptech, bez toho, že bychom museli znovu vše nastavovat.

Nový preset je možno vytvořit buďto interaktivně (přes příkaz File-Document Presets-Define/Soubor-Přednastavení dokumentu-Definovat) nebo zkopírováním vybraných vlastností nějakého existujícího dokumentu či nastavením hodnot vlastních. Poslední dvě možnosti jsou komplexně přiblíženy v uživatelské příručce InDesignu CS2 (s. 120-122) a zde jen reprodukujeme odpovídající skripty s příslušnými komentáři (a opravou drobných chyb).

Tvorba na základě zkopírování hodnot aktuálního dokumentu funguje následovně:

var myDocumentPreset; //proměnná pro preset

if(app.documents.length > 0){ //kontrolujeme, zda je nějaký dokument otevřený
var myDocument = app.activeDocument;

//Presety jsou uloženy v kolekci/poli documentPresets
//odkazujeme zde na ně přes metodu item() jejich jménem
//nejprve provedeme odpovídající přiřazení do proměnné, zatím se nestaráme
//zda daný preset (který se jmenuje stejně jako daná proměnná myDocumentPreset) existuje
myDocumentPreset = app.documentPresets.item("myDocumentPreset");

//Konstrukt try-catch nám dovolí ošetřit případ, kdy daný preset ještě neexistuje
//šlo by použít i podmínku if
try {
var myPresetName = myDocumentPreset.name; //zkusíme použít název presetu
}
catch (myError){//pokud preset daného jména neexistuje, vytvoříme jej
myDocumentPreset = app.documentPresets.add({name:"myDocumentPreset"});
}

//Ošetříme shodu nastavení měrových jednotek
app.viewPreferences.horizontalMeasurementUnits = myDocument.viewPreferences.horizontalMeasurementUnits;
app.viewPreferences.verticalMeasurementUnits = myDocument.viewPreferences.verticalMeasurementUnits;

//Nyní načteme z aktivního dokumentu jeho hodnoty do presetu
//smysl přiřazení vyčtete ze skriptů výše nebo referenční příručky InDesignu
with(myDocumentPreset){
//Hodnoty okrajů přebírá z nastavení dokumentu
var myMarginPreferences = app.activeDocument.marginPreferences;
//Možné je rovněž přebrání z aktivní stránky daného dokumentu
//var myMarginPreferences = app.activeWindow.activePage.marginPreferences;
left = myMarginPreferences.left;
right = myMarginPreferences.right;
top = myMarginPreferences.top;
bottom = myMarginPreferences.bottom;
columnCount = myMarginPreferences.columnCount;
columnGutter = myMarginPreferences.columnGutter;
documentBleedBottomOffset = app.activeDocument.documentPreferences.documentBleedBottomOffset;
documentBleedTopOffset = app.activeDocument.documentPreferences.documentBleedTopOffset;
documentBleedInsideOrLeftOffset = app.activeDocument.documentPreferences.documentBleedInsideOrLeftOffset;
documentBleedOutsideOrRightOffset = app.activeDocument.documentPreferences.documentBleedOutsideOrRightOffset;
facingPages = app.activeDocument.documentPreferences.facingPages;
pageHeight = app.activeDocument.documentPreferences.pageHeight;
pageWidth = app.activeDocument.documentPreferences.pageWidth;
pageOrientation = app.activeDocument.documentPreferences.pageOrientation;
pagesPerDocument = app.activeDocument.documentPreferences.pagesPerDocument;
slugBottomOffset = app.activeDocument.documentPreferences.slugBottomOffset;
slugTopOffset = app.activeDocument.documentPreferences.slugTopOffset;
slugInsideOrLeftOffset = app.activeDocument.documentPreferences.slugInsideOrLeftOffset;
slugRightOrOutsideOffset = app.activeDocument.documentPreferences.slugRightOrOutsideOffset;
}
}

Po provedení tohoto skriptu případně interaktivně zkontrolujme, zda máme v nabídce InDesignu (File-Document Presets/Soubor-Přednastavení dokumentu) nový preset s názvem myDocumentPreset a zda jeho nastavení odpovídá hodnotám v daném dokumentu.

Skript pro tvorbu presetu zadáním odpovídajících hodnot:

var myDocumentPreset; //proměnná pro preset

//Ošetření presetu obdobné jako v předchozím skriptu
myDocumentPreset = app.documentPresets.item("myDocumentPreset");
try {
var myPresetName = myDocumentPreset.name;
}
catch (myError){
myDocumentPreset = app.documentPresets.add({name:"myDocumentPreset"});
}

//Zde provedeme nastavení hodnot presetu konkrétními hodnotami
with(myDocumentPreset){
pageHeight = "9i";
pageWidth = "7i";
left = "4p";
right = "6p";
top = "4p";
bottom = "9p";
columnCount = 1;
documentBleedBottomOffset = "3p";
documentBleedTopOffset = "3p";
documentBleedInsideOrLeftOffset = "3p";
documentBleedOutsideOrRightOffset = "3p";
facingPages = true;
pageOrientation = PageOrientation.portrait;
pagesPerDocument = 1;
slugBottomOffset = "18p";
slugTopOffset = "3p";
slugInsideOrLeftOffset = "3p";
slugRightOrOutsideOffset = "3p";
}

Opět ověřte po provedení skriptu korektnost nastavení v InDesignu.

Preference aplikace

Třetí způsob ovlivnění parametrů dokumentu vychází z myšlenky, že nejprve nastavíme požadované parametry InDesignu a s těmi pak vytvoříme požadovaný dokument. Vhodný postup zde obvykle vypadá tak, že v rámci daného skriptu nejprve uložíme původní nastavení, pak provedeme příslušné změny a na závěr hodnoty obnovíme. Kód naznačující uvedený postup pro nastavení okrajů by mohl vypadat třeba takhle:

with (app.marginPreferences){
//Uložení původních hodnot pro marginPreferences
//všimněme si, že se jedná o objekt app.marginPreferences
//a nikoli document.marginPreferences jako v příkladech výše
var myY1 = top;
var myX1 = left;
var myY2 = bottom;
var myX2 = right;
//Nastavení nových hodnot
top = 0;
left = 0;
bottom = 0;
right = 0;
}

//Vložení dokumentu s novými hodnotami
var myDocument = app.documents.add();
myDocument.documentPreferences.pageHeight = "210mm";
myDocument.documentPreferences.pageWidth = "297mm";

//Obnovení původních hodnot
with (app.marginPreferences){
top = myY1;
left = myX1;
bottom = myY2;
right = myX2;
}

Obdobným způsobem lze pracovat i s nastaveními jiných hodnot, o kterých jsme hovořili výše: praktické odzkoušení zde necháváme na čtenáři.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » VSE  

 » Rubriky  » Go verze  

 » Rubriky  » Sazba  

 » Rubriky  » Polygrafie  

 » Rubriky  » Software  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: