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 (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):
- 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
-
5. ledna 2017
-
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
-
10. prosince 2024