Skriptujeme InDesign (7): Výstup - 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:



skenerista, osvitář

Skriptujeme InDesign (7): Výstup

Adobe InDesign sazba

15. února 2006, 00.00 | Tiskový výstup i export do různých elektronických formátů lze v InDesignu velmi zajímavě
automatizovat a kontrolovat s pomocí skriptování. Jak? To si ukážeme v další části
našeho seriálu.

InDesign nabízí různé možnosti výstupu dokumentů, tedy především výstup tiskový, výstup do EPS a PostScriptu (obvykle jako příprava pro následnou tiskovou montáž), PDF (předání podkladu na jiné pracoviště, ke korekturám, elektronickému publikování aj.) a dále třeba JPEG a SVG (elektronická, zejména webová grafika), RTF (text dokumentů pro zpětné použití v textových procesorech) či XML (cross-media publishing). Všechny tyto výstupní možnosti jsou kontrolovatelné s pomocí skriptování a při všech může být skriptování vynikajícím pomocníkem. Šetří totiž čas (odpadá nutnost úmorného opakovaného nastavování stejných dialogů, není třeba otvírat a zavírat dokumenty atd.), eliminuje chyby (skript může mít v sobě uložena všechna nastavení výstupní úlohy) a dovoluje realizovat úkony, které by se normálně prováděly jen s obtížemi (výstup na bázi podmínek či metadat, určení pojmenování nebo umístění výstupních souborů aj.). V tomto našem článku se podíváme na základy uvedeného typ zpracování a to především co se týká výstupu na tiskárně či do PostScriptu, PDF, EPS a JPEG.

Tiskový a postscriptový výstup

Metoda pro tisk dokumentu existuje jak pro objekt document, tak pro objekt aplikace (app), v obou případech má označení print. S její pomocí lze přitom provést výstup nejen na tiskárnu, ale též do postscriptového souboru. Co se výstupu přes objekt document týče, má příslušný příkaz obecný tvar:

print(tiskový_dialog,preset)

kde tiskový_dialog je logická proměnná, určující zda se má před tiskem zobrazit tiskový dialog (implicitní volba je true čili zapnuto) a řetězec preset určuje přednastavení, které se při výstupu použije. Možné použití je třeba:

//Vytiskne aktivní dokument otevřený v InDesignu bez tiskového dialogu
//a s použitím presetu "laserjet"
app.activeDocument.print(false,"laserjet");

V případě tisku přes objekt aplikace je obecný tvar příkazu print následující:

app.print(dokumenty,tiskový_dialog,preset)

kde dokumenty určují jeden dokument či pole dokumentů k vytištění, stanovené souborovými cestami, ostatní dva parametry mají stejný význam jako v předchozím případě. Příklad použití:

app.print(File("/c/clanky/skriptid/abc.indd"));

Zásadní otázkou je nastavení odpovídajících parametrů tiskového výstupu. Pod kontrolou je zde vše, co v rámci odpovídajícího dialogu InDesignu. Nastavení je přitom řešeno s pomocí objektu printPreferences. Použití uvedeného objektu je skutečně detailně popsáno v uživatelské příručce InDesignu CS2 (s. 130-133) a na tomto místě by bylo spíše nesmyslné reprodukovat příslušný několikastránkový skript. Podívejme se proto dále na danou záležitost spíše z hlediska principů. (Podrobnější studium v příručce pak necháváme na čtenáři.) A především zdůrazněme, že hodnoty, které nejsou ve skriptu nastaveny daným způsobem se přebírají z aktuálního nastavení tisku v dané instalaci InDesignu.

//K nastavování preferencí je vhodné použít příkaz with,
//ušetří nám hodně psaní.
with(app.activeDocument.printPreferences){
//Začneme nastaveními na panelu General. Jako první se stanovuje
//název tiskárny. Tím může být buďto řetězec, který odpovídá pojmenování tiskárny v systému
//(pojmenování lze zjistit z tiskového dialogu InDesignu nebo třeba přes pole získané vlastností
//app.activeDocument.printPreferences.printerList;)
printer = "HP LaserJet 4P/4MP PS";
//nebo virtuální tiskárna pro tisk do postscriptového souboru
//printer=Printer.postscriptFile;
//kdy je možné určit i soubor do kterého bude výstup proveden, třeba
//printFile = "/c/test.ps";
//Dále lze nastavit ppd, ovšem nikoli pokud je tisk prováděn na tiskárnu
//(pokus o nastavení by generoval chybu)
//ppd = "AGFA-SelectSet5000SF";
//Nastavení kopií je zase možné jenom když tiskneme na tiskárnu, nikoli do souboru
copies = 3;
//Snášení je možno nastavit pouze pro tiskárnu, která jej podporuje
//jinak bude pokus o toto nastavení generovat chybu
//collating = false;
//Lze určit pořadí v jakém mají být stránky řazeny
reverseOrder = true;
//Nastavit lze volby pro tisk archů
printSpreads = false;
//a předlohových stránek
printMasterPages = false;
//a to lépe před určením stránkového rozsahu (jinak jsou možné chyby).
//Rozsah stránek se určuje buďto řetězcem obdobně jako v tiskovém dialogu InDesignu, takže třeba
pageRange = "1-2,3,5";
//dále je možno nechat vytisknout všechny stránky
//pageRange = PageRange.allPages;
//Tisknout lze všechny stránky z daného rozsahu (Sequences.all), nebo pouze liché (Sequences.odd) či sudé (Sequences.even).
sequence = Sequences.odd;
//Zapnout lze tisk netisknutelných objektů
printNonprinting = true;
//prázdných stránek
printBlankPages = true;
//vodítek a mřížky
printGuidesGrids = true;

//Takto lze pokračovat dalšími panely, všimněme si ale jen několika způsobů, jak ošetřit
//možné chyby dané pokusem o nastavení hodnot, které v daném kontextu nejsou možné.
//Nejobvyklejší je použití konstruktu try-catch
try {paperTransverse = false;}  //zkusíme dané nastavení
catch(e){}                      //není-li v daném kontextu možné, pokračujeme bez
                                //chybového hlášení
//Obdobně můžeme třeba výše použít
try {ppd = "AGFA-SelectSet5000SF";}
catch(e){}
//Zkusíme nastavit úroveň PostScriptu
try{
postScriptLevel = PostScriptLevels.level3;
}
catch(e){}
//apod.


//Jsou ale možné i jiné řídící struktury.
//Například je-li oblast spadávky v některém směru nenulová, exportujeme příslušné značky
//takto
if(bleedBottom == 0 && bleedTop == 0 && bleedInside == 0 && bleedOutside == 0){
bleedMarks = true;
}
else{
bleedMarks = false;
}


//Atd. atd. - více viz InDesign CS2 Scripting Guide s. 130-133
//a InDesign CS2 Scripting Reference s. 1015-1021

} //na závěr nesmíme zapomenout uzavřít with

//Pak je obvyklé zadat příkaz k tisku, třeba se zapnutým dialogem
//ať vše ještě jednou zkontrolujeme, tedy např.
app.activeDocument.print();

Jak je výše vidět, tisková nastavení kontrolovaná přes skript, jsou poměrně senzitivní a navzájem závislá, takže nesprávné použití může generovat chyby, tudíž předčasné ukončení skriptu či nežádoucí výstupy. Je tedy dobré důkladné ošetření s pomocí řídících struktur a následná kontrola korektnosti chování skriptu v různých podmínkách ještě před tím, než se pustíme do tisku velkých objemů dokumentů s danými nastaveními. Kontrolu nám takto poskytuje zejména tiskový dialog InDesignu.

V mnoha případech může být lepší použít zmíněné presety (i proto, že se na ně lze odkazovat v různých skriptech). V jejich případě se tvorba či nastavení dají kontrolovat dosti podobným způsobem jako v případě presetů pro tvorbu nových dokumentů, které jsme probrali v minulé části tohoto seriálu. Možné je tedy buďto vytvoření presetu interaktivně (v odpovídajícím dialogu InDesignu, často nejlepší volba) a dále přímým nastavením hodnot nebo převzetím těchto hodnot z aktuálního nastavení dokumentu.

Tvorba tiskového presetu může vypadat třeba následovně:

//Vytvoříme proměnnou pro preset
var myPreset;
//Proměnné přiřadíme preset stejného názvu
myPreset = app.printerPresets.item("myPreset");
//Zkusíme zda preset daného názvu existuje
try{
myPreset.name;
}
//a pokud ne, tak jej vytvoříme
catch(myError){
myPreset = app.printerPresets.add({name:"myPreset"});
}

//Nyní přiřadíme do presetu hodnoty
//Používáme try-catch, aby nedošlo ke zbytečným chybám
with (myPreset){
try{
printer = "HP LaserJet 4P/4MP PS";
}
catch(e){}

try{
pageRange = PageRange.allPages;
}
catch(e){}

try{
copies = 5;
}
catch(e){}

try{
reverseOrder = true;
}
catch(e){}


try{
sequence = Sequences.even;
}
catch(e){}
//atd.
}   //uzavřeme with
//Co nenastavíme, to se přebere z aktuálních nastavení tiskového dialogu

Přebírání hodnot do presetu z aktivního dokumentu funguje na obdobné bázi, jenom část s with vypadá nějak následovně:

with(app.activeDocument.printPreferences){
try{
myPreset.printer = printer;
}
catch(e){}

try{
myPreset.ppd = ppd;
}
catch(e){}

try{
myPreset.copies = copies;
}
catch(e){}

//atd.
//Více viz uživatelská příručka s. 133-138
}

PDF, EPS a další

Pokud potřebujeme s pomocí skriptu provést export dokumentu, poslouží nám k tomu dokumentová metoda exportFile. Ta má obecný tvar:

exportFile(format,file,showingOptions,PDFpreset)

kde format určuje formát do kterého se exportuje (ExportFormat.pdfType pro PDF, ExportFormat.epsType pro EPS, ExportFormat.jpgType pro JPEG apod.), file určuje soubor do kterého se má export provést, volitelný parametr showingOptions zapne či vypne zobrazení příslušného exportního dialogu (jde tedy o logickou hodnotu) a PDFpreset stanoví případně PDF preset, na jehož základě se provede výstup do PDF. Příklady použití:

//Exportuje aktivní dokument do PDF dokumentu podle presetu Screen
app.activeDocument.exportFile(ExportFormat.pdfType,File("/c/pokus/myTestDocument.pdf"),false,"Screen");

//Exportuje aktivní dokument do EPS souborů
app.activeDocument.exportFile(ExportFormat.epsType,File("/c/pokus/myTestDocument.eps"),false);

Již dané dva příklady evokují možnost převést jeden dokument v rámci jednoho skriptu do více podob. Naskýtají se zde tedy poměrně zajímavé a efektně vyhlížející aplikace ve stylu následujícího (dlužno říci, že v mnohém značně nehotového, ale nad alespoň v něčem inspirativního) skriptu:

//Tento skript zkonvertuje všechny dokumenty InDesignu ze zadané složky do různých podob.

//Nastavte složku podle svých požadavků.
var myFolder="/c/pokus/"
//Předpokládáme, že v dané složce jsou vytvořeny podsložky pre-press, screen, jpeg a out,
//dále musíme mít vytvořeny PDFpresety PrePress a Screen

//Vyberte soubory dle svých požadavků (zde všechny s příponou indd)
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
    {//otevřeme soubor
     var myDocOpen=app.open(myFiles[i])
     //exportujeme do PDF a podsložky pre-press podle presetu PrePress
      myDocOpen.exportFile(ExportFormat.pdfType, File(myFolder+"/pre-press/"+myDocOpen.name.slice(0,-5)+".pdf"), false, "PrePress");
     //exportujeme do PDF a podsložky Screen podle presetu Screen
      myDocOpen.exportFile(ExportFormat.pdfType, File(myFolder+"/screen/"+myDocOpen.name.slice(0,-5)+".pdf"), false, "Screen");
     //exportujeme do JPEG a podsložky jpeg
     //vhodné by zde bylo ještě doplnit nastavení preferencí pro JPEG export
      myDocOpen.exportFile(ExportFormat.JPG, File(myFolder+"/jpeg/"+myDocOpen.name.slice(0,-5)+".jpeg"), false);
     //uzavřeme dokument
      myDocOpen.close(SaveOptions.no);
     //přesuneme exportovaný dokument do podsložky out
      myFiles[i].rename(myFolder+"/out/"+myFiles[i].name);
    }
}
//Upozorníme na absenci dokumentů
else{
    alert("Složka " + myFolder + " neobsahuje žádný dokument InDesignu")
}

//Upozorníme, že jsme skončili (vhodné zejména pro větší kolekce dokumentů)
alert("Hotovo");

//Odstranění přípony .indd ze jména souboru řeší metoda objektu String slice
//(v daném případě vrací řetězec - jméno dokumentu - bez posledních pěti znaků)
//jinak by šlo použít i regulární výrazy, kterým se budeme věnovat jindy.

Otázkou jsou samozřejmě příslušná nastavení jednotlivých exportů. Mechanizmus je obdobný jako v případě tisku. K dispozici tedy jsou odpovídající objekty preferencí (PDFExportPreferences, EPSExportPreferences, JPEGExportPreferences apod.), u kterých nastavujeme příslušné vlastnosti, přičemž daný objekt odpovídá příslušnému vizuálnímu dialogu InDesignu. V případě PDF pak máme k dispozici i presety, mechanizmus je zde opět obdobný jak bylo popsáno výše.

Nemá zde cenu nějak dopodrobna rozebírat práci s těmito nastaveními, když odpovídající principy jsme rozebrali v případě tisku. Uživatel zde v případě potřeby musí sáhnout po referenční příručce, PDF a EPS export je dobře rozebrán i v příručce uživatelské (str. 138-142).

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: