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
Polygrafie
Skriptujeme InDesign (29): Metadata podruhé
Adobe InDesign sazba
6. listopadu 2006, 00.00 | Tento díl našeho pravidelného seriálu bude patřit zpracování na základě XMP metadat.
Ukážeme si několik jednodušších i složitějších workflow scénářů, při kterých může
nasazení metadat a skriptů ušetřit opravdu mnoho práce.
Poté, co jsme si v minulé části ukázali, jak v dokumentech InDesignu načítat a editovat XMP metadata, dostáváme se nyní k praktickým ukázkám toho, jak metadata využít v rámci workflow.
Hromadné nastavení metadat
Naše ukázky začneme nejprve u hromadného nastavování metadat dokumentů. Jistě, jedná se zde o jakousi aplikaci ve stylu "metadata pro metadata", nastavení daným způsobem mohou být každopádně velmi důležitá nejen proto, že ušetří mnoho práce. Zásadní jsou zde rovněž třeba skutečnosti, že daným způsobem můžeme garantovat bezchybnost takovéhoto zpracování či s vkládáním metadat spojit různé další úpravy dokumentů atp.
Příklad, který na tomto místě uvedeme, ukazuje, jak automaticky nastavit metadata u všech dokumentů InDesignu umístěných v dané složce. Indikace dokumentu je zde zajištěna s pomocí souborové přípony. Ve skriptu ukazujeme i způsob, jak vypnout interaktivitu s uživatelem během zpracování: takovéto nastavení zamezí problémům, vznikajícím upozorněními InDesignu na různé nestandardní stavy v dokumentu typu chybějících písem, špatných odkazů, nesouladu s nastavenými pravidly color managementu atp.
//Hromadně nastaví metadata v sadě dokumentů z dané složky
//Vypne přitom uživatelskou interakci (a po zpracování ji opět zapne)
//Pro tento skript je lepší na začátku nemít v InDesignu otevřen žádný
dokument
if(app.documents.length){alert("Uzavřete všechny dokumenty a spusťte
skript znovu");exit()}
//Nastavte složku podle svých požadavků. Zde určujeme napevno:
var myFolder="/c/casopis/";
//šel by rovněž interaktivní výběr, třeba takto
//var myFolder = Folder("c/").selectDlg("Zvolte slozku s dokumenty",
Folder("/c/casopis/"));
//if(!myFolder){alert("Nevybrali jste žádnou složku, končím");exit()}
//Vypneme interakci (upozorňování InDesignu na problémy typu
nesprávných odkazů, chybějících písem apod.)
//Prevzato od D. Saunderse
http://jsid.blogspot.com/2005/11/open-with-no-warnings.html
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.neverInteract;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.neverInteract;
}
//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
{
var
myDoc=app.open(myFiles[i]);
//otevřeme soubor
myAddMetadata(myDoc);
//nastavíme metadata (daná funkce je uvedena níže)
myDoc.close(SaveOptions.yes);
//změněný dokument uložíme
}
}
//Upozorníme na absenci dokumentů
else{
alert("Složka " + myFolder + "
neobsahuje žádný dokument InDesignu")
}
//Obnovíme interakci (upozorňování InDesignu na problémy typu
nesprávných odkazů, chybějících písem apod.)
//Prevzato od D. Saunderse
http://jsid.blogspot.com/2005/11/open-with-no-warnings.html
//Více též na
http://jsid.blogspot.com/2006/07/sample-scripts-wont-work.html
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.interactWithAll;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.interactWithAll;
}
//Funkce pro nastavování metadat (pro podrobnosti viz přechozí díl)
//lze samozřejmě použít jakékoli další zpracování
//pro vyplnění je použito šablony pokus2.xmp, která musí existovat
function myAddMetadata(myDoc)
{myDoc.metadataPreferences.replace(File("/c/casopis/pokus2.xmp"))}
Při vyplňování metadat si zde lze představit různé varianty. Konkrétně můžeme třeba napevno nastavovat pouze vybraná metadatové pole s pomocí následující funkce (jinak je skript identický s tím, který jsme právě uvedli):
//Nastavujeme jen vybrané vlastnosti
function myAddMetadata(myDoc)
{myDoc.metadataPreferences.properties={author: "Josef Novák",
copyrightInfoURL: "www.grafika.cz", copyrightNotice: "Chráněno
copyrightem", copyrightStatus: CopyrightStatus.yes}
}
Představit si lze rovněž variantu, kdy hodnotu měníme na základě jejího
aktuálního stavu:
//Nastavuje na základě hodnoty metadatového pole
function myAddMetadata(myDoc)
{if
(myDoc.metadataPreferences.author=="RK")
{myDoc.metadataPreferences.author="Richard K"}
}
Zpracování na základě metadatových polí
Popis možných workflow scénářů, zahrnující v sobě nasazení metadat, výrazně překračuje rozsah tohoto článku. Na tomto místě tudíž uvedeme pouze několik málo ukázek, které mohou pouze naznačit potenciál a techniku dané metody, více je už na představivosti samotného čtenáře a konkrétních podmínkách jeho workflow.
Ukažme si nejprve skript, který vychází z následujícího (velmi primitivního) workflow scénáře. Uživatelé nahrávají do určené složky (např. na sdíleném síťovém disku) dokumenty InDesignu a před uložením v nich nastaví metadatové pole Urgency na panelu Origin v dialogu File Info na určitou hodnotu. Náš skript "nahlédne" do všech dokumentů dané složky, nalezne dokumenty, mající nastavenu hodnotu Urgency na 1 (resp. "High") a - přeje-li si to uživatel - dané dokumenty zobrazí v InDesignu. Daným způsobem může tedy operátor, manager projektu apod. zpracovávat vždy soubory, které takovéto zpracování v rámci daného workflow nejvíce vyžadují. Ve skriptu, jenž dané zpracování řeší, jsme z didaktických důvodů použili obdobný postup zpracování jako v předchozích příkladech, jádro zpracování je zachyceno ve funkcích (myMetadaProcess, myFilteredFilesProcess) - nikde ale není řečeno, že struktura skriptu nemůže být takto trochu, či výrazně odlišná, jak si ostatně ukážeme v dalším příkladu.
//Otevře všechny dokumenty InDesignu z dané složky, mající
XMP pole Urgency nastaveno na High
//Vypne přitom uživatelskou interakci (a po zpracování ji opět zapne)
//Pro tento skript je lepší na začátku nemít v InDesignu otevřen žádný
dokument
if(app.documents.length){alert("Uzavřete všechny dokumenty a spusťte
skript znovu");exit()}
//Nastavte složku podle svých požadavků. Zde určujeme napevno:
var myFolder="/c/casopis/";
//šel by rovněž interaktivní výběr, třeba takto
//var myFolder = Folder("c/").selectDlg("Zvolte slozku s dokumenty",
Folder("/c/casopis/"));
//if(!myFolder){alert("Nevybrali jste žádnou složku, končím");exit()}
//Vypneme interakci (upozorňování InDesignu na problémy typu
nesprávných odkazů, chybějících písem apod.)
//Prevzato od D. Saunderse
http://jsid.blogspot.com/2005/11/open-with-no-warnings.html
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.neverInteract;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.neverInteract;
}
//Metoda getFiles vytvoří pole, do kterého načte všechny dokumenty
odpovídající dané souborové masce
var myFiles=Folder(myFolder).getFiles("*.indd");
//Pole, do kterého se budou ukládat názvy dokumentů, vyhovujících
zadané podmínce
var myFilteredFiles=new Array;
//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
{
var myFile=app.open(myFiles[i]);
myMetadaProcess(myFile);
//metadata každého dokumentu zpracujeme funkcí myMetadataProcess (viz
níže)
myFile.close(SaveOptions.no);
//dokument uzavřeme
}
myFilteredFilesProcess();
//dokumenty vyhovující podmínce z myMetadataProcess zpracujeme
}
//Upozorníme na absenci dokumentů
else{
alert("Složka " + myFolder + "
neobsahuje žádný dokument InDesignu")
}
//Obnovíme interakci (upozorňování InDesignu na problémy typu
nesprávných odkazů, chybějících písem apod.)
//Prevzato od D. Saunderse
http://jsid.blogspot.com/2005/11/open-with-no-warnings.html
//Více též na
http://jsid.blogspot.com/2006/07/sample-scripts-wont-work.html
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.interactWithAll;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.interactWithAll;
}
//Funkce pro zpracování metadat jednotlivých dokumentů
//V našem případě vkládá do pole myFilteredFiles názvy dokumentů,
//jež mají hodnotu XMP pole Urgency nastavenu na 1
function myMetadaProcess (myDoc)
{var
myStatus=myDoc.metadataPreferences.getProperty("http://ns.adobe.com/photoshop/1.0/","Urgency");
if
(myStatus==1){myFilteredFiles.push(myDoc.fullName)}
}
//Zpracuje pole myFilteredFiles
function myFilteredFilesProcess ()
{if(myFilteredFiles.length==0){alert("Urgenci 'High' nemá žádný z
dokumentů dané složky")}
else{if(confirm("Počet dokumentů se
statusem High: "+myFilteredFiles.length+"\nOtevřít je v InDesignu?")){
for(i=0;i<myFilteredFiles.length;i++){app.open(myFilteredFiles[i])}
}
}
}
Metadata a uživatelský XMP panel
Pokusme se nyní ukázat celou problematiku na trochu komplexnějším workflow scénáři. Jeho základem je uživatelský panel pro XMP metadata Output, který jsme vytvořili s pomocí bezplatného nástroje Metasampler společnosti Pound Hill Software. Daný panel dovoluje zaškrtnutím určit, zda se má pro daný dokument provést výstup na tiskárně a do PDF. Uživatel dále určuje, podle jakého presetu se má výstup provést.
Poté, co je panel instalován na příslušné počítače (náš panel lze stáhnout zde, instaluje se do
C:\Program Files\Common Files\Adobe\XMP\Custom File Info Panels
),
dovoluje uživatelům v InDesignu přes
dialog File Info určovat dané výstupní podmínky. Dokumenty s těmito nastaveními jsou
odesílány do výstupní složky, ve které dále uvedený skript provede příslušný výstup
dokumentu a zpracované dokumenty odsune do podsložky Out. Více již text samotného
skriptu, ke kterému ještě chceme poznamenat, že způsob jak zjistit odpovídající hodnoty
pro funkci getProperty jsme popsali v minulé části tohoto seriálu, nastaveními výstupu
jsme se pak zabývali před nějakým časem:
//Provede výstup dokumentů InDesignu se zadané složky na
základě XMP metadat z uživatelského pole Output
//Pro tento skript je lepší na začátku nemít v InDesignu otevřen žádný
dokument
if(app.documents.length){alert("Uzavřete všechny dokumenty a spusťte
skript znovu");exit()}
//Nastavte složku podle svých požadavků. Zde určujeme napevno:
var myFolder="/c/casopis/";
//šel by rovněž interaktivní výběr, třeba takto
//var myFolder = Folder("c/").selectDlg("Zvolte slozku s dokumenty",
Folder("/c/casopis/"));
//if(!myFolder){alert("Nevybrali jste žádnou složku, končím");exit()}
//Vypneme interakci (upozorňování InDesignu na problémy typu
nesprávných odkazů, chybějících písem apod.)
//Prevzato od D. Saunderse
http://jsid.blogspot.com/2005/11/open-with-no-warnings.html
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.neverInteract;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.neverInteract;
}
//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
{
var myFile=app.open(myFiles[i]);
myMetadataProcess(myFile);
//robustnější alternativa by byla třeba s try-catch
myFile.close(SaveOptions.no);
//dokument uzavřeme a neukládáme
myFiles[i].rename(myFolder+"/Out/"+myFiles[i].name);
//soubor dokumentu přesuneme do složky Out
}
}
//Upozorníme na absenci dokumentů
else{
alert("Složka " + myFolder + "
neobsahuje žádný dokument InDesignu")
}
//Obnovíme interakci (upozorňování InDesignu na problémy typu
nesprávných odkazů, chybějících písem apod.)
//Prevzato od D. Saunderse
http://jsid.blogspot.com/2005/11/open-with-no-warnings.html
//Více též na
http://jsid.blogspot.com/2006/07/sample-scripts-wont-work.html
if (app.version == 3) {
app.userInteractionLevel =
UserInteractionLevels.interactWithAll;
} else {
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.interactWithAll;
}
//Funkce pro zpracování metadat jednotlivých dokumentů
//V tomto případě zařídí automatizovaný výstup na základě metadat
function myMetadataProcess (myDoc)
{//Tisk
var
myPrintStatus=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop0");
if(myPrintStatus){var
myPrintPreset=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop1");
myDoc.print(false,myPrintPreset)}
//PDF export
var
myPDFStatus=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop2");
if(myPDFStatus){var
myPDFPreset=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop3");
myDoc.exportFile(ExportFormat.pdfType,
File(myFolder+myDoc.name.slice(0,-5)+".pdf"),false,myPDFPreset);}
}
Naznačené možnosti zpracování lze samozřejmě v případě panelu Output dále rozšířit (nastavení výstupních podmínek pro další formáty, zápis data provedení posledního výstupu, určení osoby která výstup schválila apod.). Problémem ovšem je, že Metasampler je jen velmi omezenou ukázkovou aplikací, v případě komplikovanějších panelů je buď třeba zakoupit komerční prostředky Pound Hill Software, nebo provést ruční editaci panelů. Je tedy otázkou, zda by nebylo jednodušší k vyplňování metadatových polí takto použít spíše odpovídajícího skriptu s příslušným dialogem (jeho vytvoření necháváme v tuto chvíli na čtenáři, v případě zájmu se k němu můžeme vrátit někdy příště), jenž by se distribuoval na jednotlivé počítače. Odpověď zde závisí na podmínkách daného worklow, uživatelské panely každopádně dokáží daná XMP metadata zobrazit například i v prostředí Acrobatu u PDF dokumentu, do něhož byla přenesena.
Samotný výše uvedený skript by také zasluhoval i ve stávající formě dopracování. Týká se to třeba větší robustnosti zpracování (ošetření krizových stavů jako je třeba neexistence daného presetu apod.), přidání protokolovací funkce apod. To už je ale na požadavcích čtenáře. Na tomto místě si ještě ukažme variantu daného skriptu fungující s aktivním dokumentem:
//Provede výstup aktivního dokumentu InDesignu na základě
XMP metadat z uživatelského pole Output
//Pokud není otevřen žádný dokument, tak skončíme
if(app.documents.length==0){alert("Není otevřen žádný dokument");exit()}
//Nastavíme dokument ke zpracování
var myDoc=app.activeDocument;
myMetadataProcess(myDoc);
//Funkce pro zpracování metadat jednotlivých dokumentů
//V tomto případě zařídí automatizovaný výstup na základě metadat
function myMetadataProcess (myDoc)
{//Tisk
var
myPrintStatus=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop0");
if(myPrintStatus){var
myPrintPreset=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop1");
myDoc.print(false,myPrintPreset)}
//PDF export
var
myPDFStatus=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop2");
if(myPDFStatus){var
myPDFPreset=myDoc.metadataPreferences.getProperty("http://ns.poundhill.com/phsa/1.0/","phsprop3");
myDoc.exportFile(ExportFormat.pdfType,
File(myDoc.fullName.toString().slice(0,-5)+".pdf"),false,myPDFPreset);}
}
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