[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Eventscript MetadataBeforeSafe.jsx ergänzen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

9. Apr 2009, 09:37
Beitrag # 1 von 36
Bewertung:
(11345 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,

auf der Suche nach einer Möglichkeit, den Bearbeiter eines Dokumentes zu ermitteln sind wir auf das EventScript von Gerald Singelmann "MetadataBeforeSafe.jsx gestossen. Eine tolle Möglichkeit, sein Dokument beim sichern direkt mit MetaDaten zu versehen. Jetzt sollen die Metadaten noch durch E-Mail, Telefon etc ergänzt werden.

Meine eigenen Versuche sind alle gescheitert, weil ich partout nicht rausgefunden habe, wie ich die entsprechenden Felder ansprechen kann (versucht habe ich z.B. email, EMail, e-mail, E-Mail...) aber immer wieder bekam ich eine Meldung, dass diese Eigenschaft nicht unterstützt wird.

Im ScriptingGuide habe ich nachgeschaut und dazu folgende Zeile entdeckt, von der ich ausging, dass sie mir damit die entsprechenden Felder ausfüllen kann. Leider kam auch hier eine Meldung dass die Eigenschaft createContainerItem nicht bekannt ist.

Code
  var myNewContainer = createContainerItem("http://ns.adobe.com/xap/1.0/", "email"); 
setProperty("http://ns.adobe.com/xap/1.0/", "email/*[1]", "okvern@adobe.com");


Auch mit der Dokumentation zu XMP bin ich nicht weitergekommen, da hier die Feldnamen z.B. Autor wiederum creator heißen und das will auch nicht funktionieren.

Was ist denn mein Fehler?
X

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

14. Apr 2009, 09:00
Beitrag # 2 von 36
Beitrag ID: #392768
Bewertung:
(11300 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Noch eine Frage zu dem oben genannten Script. Beim Hinzufügen einer Datei zu einem Buch und der anschließenden Neupaginierung der Buchdatei tritt folgender Fehler im Script auf. Ist es möglich, die Meldung zu unterdrücken?


als Antwort auf: [#392545]
Anhang:
Bild 6.png (29.7 KB)

Eventscript MetadataBeforeSafe.jsx ergänzen

Martin Fischer
  
Beiträge gesamt: 12775

14. Apr 2009, 09:21
Beitrag # 3 von 36
Beitrag ID: #392769
Bewertung:
(11293 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

Du könntest der genannten Zeile 15 etwa folgende Zeile voranstellen:

Code
if (app.documents.count() > 0) 


Und wenn auch das nicht hilft, hilft eine try-catch Klammer:

Code
try { 
app.activeDocument.metadataPreferences.author = 'MSch';
}
catch(e) {}



als Antwort auf: [#392768]

Eventscript MetadataBeforeSafe.jsx ergänzen

Martin Fischer
  
Beiträge gesamt: 12775

14. Apr 2009, 09:32
Beitrag # 4 von 36
Beitrag ID: #392771
Bewertung:
(11287 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,
Antwort auf: Meine eigenen Versuche sind alle gescheitert, weil ich partout nicht rausgefunden habe, wie ich die entsprechenden Felder ansprechen kann (versucht habe ich z.B. email, EMail, e-mail, E-Mail...) aber immer wieder bekam ich eine Meldung, dass diese Eigenschaft nicht unterstützt wird.


Die Metadaten hast Du gefunden?
metadataPreferences als Eigenschaft eines Dokuments.
Dort ist zwar kein Feld für email und Telefonnummer vorgesehen, aber Du könntest vielleicht eines der vorhandenen Felder dafür missbrauchen. Etwa die copyrightNotice oder keywords.

Zu XMP in InDesign über JavaScript siehe auch das Skript zur Ermittlung von Metadaten von verknüpften Bildern mit Links zu weiteren Quellen.


als Antwort auf: [#392545]

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

14. Apr 2009, 09:36
Beitrag # 5 von 36
Beitrag ID: #392772
Bewertung:
(11283 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Hallo Markus,

Du könntest der genannten Zeile 15 etwa folgende Zeile voranstellen:

Code
if (app.documents.count() > 0) 


Und wenn auch das nicht hilft, hilft eine try-catch Klammer:

Code
try { 
app.activeDocument.metadataPreferences.author = 'MSch';
}
catch(e) {}



Guten Morgen Martin,

habe nun alle metadaten in die try-catch Klammer gestellt und nun läuft es ohne Fehlermeldung!

Vielen Dank!

Sonnige Grüße aus dem Harz!


als Antwort auf: [#392769]

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

14. Apr 2009, 09:48
Beitrag # 6 von 36
Beitrag ID: #392773
Bewertung:
(11279 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank für die Hinweise Martin.

Andere Felder zu missbrauchen, haben wir auch schon überlegt; jedoch werden diese Felder teilweise für die tatsächlichen Zwecke in Cumulus ergänzt. Deswegen haben wir diesen Schritt wieder verworfen.

Es ist auch nicht so wichtig, da wir eine überschaubare Mitarbeiterzahl haben und deshalb eigentlich die Initialien ausreichen. Im Prinzip handelt es sich hier "nur" um eine interne Information, damit z.B. rausgefunden werden kann, wer einen neuen Stand gespeichert hat, bzw. wer bestimmte PDF-Dateien erzeugt hat.


als Antwort auf: [#392771]

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

17. Apr 2009, 22:13
Beitrag # 7 von 36
Beitrag ID: #393353
Bewertung:
(11169 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich bin gerade verzweifelt dabei ein im Guide mitgeliefertes Script auf meine Bedürfnisse zum Thema Metadatenergänzung zu modifizieren.
Ich hoffe auf ein wenig Unterstützung.

Der Code entstammt dem Script "ComplexUI.jsx". Ich habe ihn noch nicht komplett bereinigt und ich habe auch nicht nicht bis zum letzten alle Begriffe verstanden (aber ich gebe mir Mühe... ;-) Zum Schluß soll das ganze als Eventscript laufen und in diesem Fall nur beim "Speichern unter"-Befehl ausgeführt werden.

Mein bisheriger Stand: bei einem geöffneten Dokument wird das Script im Debugging-Modus gestartet. Es öffnet sich ein Dialogfeld, indem eine Versionsnummer und eine Länderkennung eingestellt werden sollen. Soweit so gut. Probehalber habe ich die beiden Felder in die Stichworte und in die Beschreibung auslesen lassen. Diese Felder sind aber leider später belegt. Es soll das IPTC Feld "Genre" für die Länderkennung und das "IPTC-Szene"-Feld für die Versionsnummer genommen werden, da diese Felder beide von Cumulus ausgelesen werden können.

Nun zu meinen Fragen: Wie kann ich diese beiden Felder ansprechen?
Ist es möglich eine Mehrfachauswahl bei den Radiobuttons zu generieren, so dass ich in diesem Fall auch eine 2-sprachige Version damit auslesen kann? Spätere Fragen könnten folgen...

Danke fürs Mitdenken.
Markus


Code
//Metadatenerfassung.jsx 
//Ein InDesign CS4 JavaScript

main();
function main(){
mySetup();
mySnippet();
myTeardown();
}
function mySetup(){
}
function mySnippet(){
//<fragment>
var myDialog = app.dialogs.add({name:"Metadatenerfassung", canCancel:true});
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
//Create a border panel.
with(borderPanels.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"aktuelle Versionsnummer:"});
}
with(dialogColumns.add()){
//Create a pop-up menu ("dropdown") control.
var meineVersionsnummer = dropdowns.add({stringList:["01", "02", "03"], selectedIndex:0});
}
}
//Create another border panel.
with(borderPanels.add()){
staticTexts.add({staticLabel:"Länderkennung:"});
var meineLänderkennung = radiobuttonGroups.add();
with(meineLänderkennung){
var DE_Länderkennung = radiobuttonControls.add({staticLabel:"de_DE", checkedState:true});
var EN_Länderkennung = radiobuttonControls.add({staticLabel:"en_EN"});
var ES_Länderkennung = radiobuttonControls.add({staticLabel:"es_ES"});
var INT_Länderkennung = radiobuttonControls.add({staticLabel:"International"});
}
}
}
}
//Display the dialog box.
if(myDialog.show() == true){
var myParagraphAlignment, myString, meineVersionsnummer;
//If the user didnít click the Cancel button,
//then get the values back from the dialog box.
//Get the example text from the text edit field.

//Erfassung der Versionsnummer
if(meineVersionsnummer.selectedIndex == 0){
app.activeDocument.metadataPreferences.keywords = ["01",];
}
else if(meineVersionsnummer.selectedIndex == 1){
app.activeDocument.metadataPreferences.keywords = ["02",];
}
else if(meineVersionsnummer.selectedIndex == 2){
app.activeDocument.metadataPreferences.keywords = ["03",];
}
//Erfassung der Länderkennung
if(meineLänderkennung.selectedButton == 0){
app.activeDocument.metadataPreferences.description = "de_DE";
}
else if(meineLänderkennung.selectedButton == 1){
app.activeDocument.metadataPreferences.description = "en_EN";
}
else if(meineLänderkennung.selectedButton == 2){
app.activeDocument.metadataPreferences.description = "es_ES";
}
else if(meineLänderkennung.selectedButton == 3){
app.activeDocument.metadataPreferences.description = "International";
}
}

}
function myTeardown(){
}
//<fragment>
function myMakeDocument(myString, myPointSize, myParagraphAlignment, myVerticalJustification){
//Create a new document.
var myDocument = app.documents.add();
with(myDocument){
viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;
viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;
var myPage = pages[0];
with(myPage){
//Create a text frame.
var myTextFrame = pages.item(0).textFrames.add();
with(myTextFrame){
//Set the geometric bounds of the frame using the "myGetBounds" function.
geometricBounds = myGetBounds(myDocument, myPage);
//Set the contents of the frame to the string you entered in the dialog box.
contents = myString;
//Set the alignment of the paragraph.
texts.item(0).justification = myParagraphAlignment;
//Set the point size of the text.
texts.item(0).pointSize = myPointSize;
//Set the vertical justification of the text frame.
textFramePreferences.verticalJustification = myVerticalJustification;
}
}
}
}
//</fragment>
//Utility function for getting the bounds of the "live area" of a page.
function myGetBounds(myDocument, myPage){
with(myDocument.documentPreferences){
var myPageHeight = pageHeight;
var myPageWidth = pageWidth;
}
with(myPage.marginPreferences){
var myTop = top;
var myLeft = left;
var myRight = right;
var myBottom = bottom;
}
myRight = myPageWidth - myRight;
myBottom = myPageHeight- myBottom;
return [myTop, myLeft, myBottom, myRight];
}



als Antwort auf: [#392773]
(Dieser Beitrag wurde von Vikimaus am 17. Apr 2009, 22:20 geändert)

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

18. Apr 2009, 00:38
Beitrag # 8 von 36
Beitrag ID: #393363
Bewertung:
(11146 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, hier mein für heute vorerst letztes Ergebnis:

Ich bin nun soweit gekommen, dass ich das Script händisch starten kann und incl. meiner aktiven Abfragen auch statische Felder ausgefüllt werden. Nun fehlt mir "nur" noch die Möglichkeit, das ganze ohne Fehler zu produzieren als Eventscript zum laufen zu bekommen und zwar beim "Speichern unter". Desweiteren habe ich es nicht hinbekommen in der Vorgänger-Version eine Mehrfachauswahl bei den Länderkennungen ausführen zu lassen.

Kann mir vielleicht außerdem noch jemand verraten, wie ich Einfluss auf das Layout des Auswahlfensters nehmen kann? Ich hätte die beiden Auswahlen unter- und nicht nebeneinander.

Und zudem habe ich auch nicht herausbekommen, wie ich die beiden IPTC-Felder wie oben genannt ansprechen kann. Das muss doch auch gehen, oder?

Code
//Metadatenerfassung_2.jsx  
//Ein InDesign CS4 JavaScript

main();

function main()
{
app.activeDocument.metadataPreferences.author = "MSch";
app.activeDocument.metadataPreferences.copyrightNotice = "(C)Adobe";
app.activeDocument.metadataPreferences.copyrightInfoURL = "http://www.adobe.com";
app.activeDocument.metadataPreferences.copyrightStatus = CopyrightStatus.YES;
}
//<fragment>
var myDialog = app.dialogs.add({name:"Metadatenerfassung", canCancel:true});
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
//Create a border panel.
with(borderPanels.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"aktuelle Versionsnummer:"});
}
with(dialogColumns.add()){
//Create a pop-up menu ("dropdown") control.
var meineVersionsnummer = dropdowns.add({stringList:["01", "02", "03"], selectedIndex:0});
}
}
}
}
//Add a dialog column.
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
//Create a border panel.
with(borderPanels.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Länderkennung:"});
}
with(dialogColumns.add()){
//Create a pop-up menu ("dropdown") control.
var meineLänderkennung = dropdowns.add({stringList:["Deutsch","Englisch","Französisch",
"Spanisch","Italienisch","Portugiesisch","Niederländisch","Schwedisch",
"Finnisch","Norwegisch","Polnisch","Ungarisch","Tschechisch",
"Kroatisch","Bosnisch","Rumänisch","Slowenisch","Türkisch",
"Griechisch", "Russisch", "Japanisch", "Chinesisch", "International",], selectedIndex:0});
}
}
}
}
//Display the dialog box.
if(myDialog.show() == true){
var myParagraphAlignment, myString, meineVersionsnummer;
//If the user didnít click the Cancel button,
//then get the values back from the dialog box.
//Get the example text from the text edit field.

//Erfassung der Versionsnummer
if(meineVersionsnummer.selectedIndex == 0){
app.activeDocument.metadataPreferences.keywords = ["01",];
}
else if(meineVersionsnummer.selectedIndex == 1){
app.activeDocument.metadataPreferences.keywords = ["02",];
}
else if(meineVersionsnummer.selectedIndex == 2){
app.activeDocument.metadataPreferences.keywords = ["03",];
}
//Erfassung der Länderkennung
if(meineLänderkennung.selectedIndex == 0){
app.activeDocument.metadataPreferences.description = "de_DE";
}
else if(meineLänderkennung.selectedIndex == 1){
app.activeDocument.metadataPreferences.description = "en_EN";
}
else if(meineLänderkennung.selectedIndex == 2){
app.activeDocument.metadataPreferences.description = "fr_FR";
}
else if(meineLänderkennung.selectedIndex == 3){
app.activeDocument.metadataPreferences.description = "es_ES";
}
else if(meineLänderkennung.selectedIndex == 4){
app.activeDocument.metadataPreferences.description = "it_IT";
}
else if(meineLänderkennung.selectedIndex == 5){
app.activeDocument.metadataPreferences.description = "pt_PT";
}
else if(meineLänderkennung.selectedIndex == 6){
app.activeDocument.metadataPreferences.description = "nl_NL";
}
else if(meineLänderkennung.selectedIndex == 7){
app.activeDocument.metadataPreferences.description = "se_SE";
}
else if(meineLänderkennung.selectedIndex == 8){
app.activeDocument.metadataPreferences.description = "fi_FI";
}
else if(meineLänderkennung.selectedIndex == 9){
app.activeDocument.metadataPreferences.description = "no_NO";
}
else if(meineLänderkennung.selectedIndex == 10){
app.activeDocument.metadataPreferences.description = "pl_PL";
}
else if(meineLänderkennung.selectedIndex == 11){
app.activeDocument.metadataPreferences.description = "hu_HU";
}
else if(meineLänderkennung.selectedIndex == 12){
app.activeDocument.metadataPreferences.description = "cz_CZ";
}
else if(meineLänderkennung.selectedIndex == 13){
app.activeDocument.metadataPreferences.description = "hr_HR";
}
else if(meineLänderkennung.selectedIndex == 14){
app.activeDocument.metadataPreferences.description = "ba_BA";
}
else if(meineLänderkennung.selectedIndex == 15){
app.activeDocument.metadataPreferences.description = "ro_RO";
}
else if(meineLänderkennung.selectedIndex == 16){
app.activeDocument.metadataPreferences.description = "si_SI";
}
else if(meineLänderkennung.selectedIndex == 17){
app.activeDocument.metadataPreferences.description = "tr_TR";
}
else if(meineLänderkennung.selectedIndex == 18){
app.activeDocument.metadataPreferences.description = "gr_GR";
}
else if(meineLänderkennung.selectedIndex == 19){
app.activeDocument.metadataPreferences.description = "ru_RU";
}
else if(meineLänderkennung.selectedIndex == 20){
app.activeDocument.metadataPreferences.description = "ja_JA";
}
else if(meineLänderkennung.selectedIndex == 21){
app.activeDocument.metadataPreferences.description = "cn_CN";
}
else if(meineLänderkennung.selectedIndex == 22){
app.activeDocument.metadataPreferences.description = "INT";
}
}



als Antwort auf: [#393353]
(Dieser Beitrag wurde von Vikimaus am 18. Apr 2009, 00:40 geändert)

Eventscript MetadataBeforeSafe.jsx ergänzen

Hans Haesler
  
Beiträge gesamt: 5826

18. Apr 2009, 09:53
Beitrag # 9 von 36
Beitrag ID: #393372
Bewertung:
(11113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Vickymaus,

nach jeder Ausführung Deines Scripts bleibt eine neue Dialog-"Leiche" im Speicher zurück. Das kannst Du mit folgendem Script überprüfen:

Code
//DialogeZaehlen.js 

nDlogs = app.dialogs.length;
alert ("Anzahl Dialog-Leichen: " + nDlogs);

Erst mit dem Beenden von InDesign werden diese unsichtbaren Dinger gelöscht.

Es ist deshalb gute Praxis, zu Beginn des Scripts (oder spätestens bevor der Dialog definiert wird) aufzuräumen:

Code
// Dialoge löschen, welche offengeblieben sind 
try {
app.dialogs.everyItem().destroy();
}
catch (e) {
}

Und wenn der gezeigte Dialog geschlossen wird, dann muss das Entfernen aus dem Speicher für zwei Fälle vorgesehen werden: Klick auf "OK", Klick auf "Abbrechen".

Code
if(myDialog.show() == true) { // = Klick auf "OK" 
//
// Ergebnisse auswerten
//
myDialog.destroy(); // Dialog löschen
}
else { // = Klick auf "Abbrechen"
myDialog.destroy(); // Dialog löschen
exit();
}

Das Anordnen untereinander gelingt, wenn nur [b]eine Haupspalte definiert ist. Damit die 'borderPanels' sichtbar werden muss aber jedes Mal auch eine Spalte eingefügt werden, gefolgt von einer 'dialogRow', damit Text und Dropdown auf einer Zeile stehen.
Das 'minWidth:77' hilft, die sonst unterschiedliche Breite der beiden Umrandungen auszugleichen. Am Schluss habe ich eine zweite Spalte mit einer leeren Textstelle (Breite: 4) eingefügt, damit es etwas Luft zwischen den Umrandungen und den Buttons hat.

Code
var myDialog = app.dialogs.add({name:"Metadatenerfassung", canCancel:true}); 
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
//Create a border panel.
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"aktuelle Versionsnummer:"});
//Create a pop-up menu ("dropdown") control.
var meineVersionsnummer = dropdowns.add({stringList:["01", "02", "03"], selectedIndex:0, minWidth:77});
}
}
}
//Create a border panel.
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"Länderkennung:"});
//Create a pop-up menu ("dropdown") control.
var meineLänderkennung = dropdowns.add({stringList:["Deutsch","Englisch","Französisch",
"Spanisch","Italienisch","Portugiesisch","Niederländisch","Schwedisch",
"Finnisch","Norwegisch","Polnisch","Ungarisch","Tschechisch",
"Kroatisch","Bosnisch","Rumänisch","Slowenisch","Türkisch",
"Griechisch", "Russisch", "Japanisch", "Chinesisch", "International",], selectedIndex:0});
}
}
}
}
with (dialogColumns.add()) {
staticTexts.add({staticLabel:" ", minWidth:4});
}
}
//Display the dialog box.
if(myDialog.show() == true) { // = Klick auf "OK"
//
// Ergebnisse auswerten
//
myDialog.destroy(); // Dialog löschen
}
else { // = Klick auf "Abbrechen"
myDialog.destroy(); // Dialog löschen
exit();
}

Damit sind aber noch nicht alle Deine Probleme gelöst, doch das wirst Du schon schaffen.

Gruss, Hans


als Antwort auf: [#393363]

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

18. Apr 2009, 10:05
Beitrag # 10 von 36
Beitrag ID: #393373
Bewertung:
(11109 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für Deine Mühen! Ich befinde mich momentan noch am Anfang und verstehe viele Zusammenhänge noch nicht!

Deshalb bin ich echt dankbar für Deine Erklärungen! Das bringt Licht ins Dunkle! Sobald ich heute wieder etwas Luft habe, werde ich "mein Lernprojekt" weiter fortführen und Deine ganzen Verbesserungen übertragen.

Allen ein schönes Wochenende!
Markus


als Antwort auf: [#393372]

Eventscript MetadataBeforeSafe.jsx ergänzen

Hans Haesler
  
Beiträge gesamt: 5826

18. Apr 2009, 10:25
Beitrag # 11 von 36
Beitrag ID: #393374
Bewertung:
(11104 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Vickymaus,

bitteschön.

Noch etwas. Wenn die Versionsnummern und die Länderkennungnen in Arrays definiert werden, dann kann man auf die 'if/else if'-Auswertung des Dialoges verzichten:

Code
try { 
app.dialogs.everyItem().destroy();
}
catch (e) {
}

var versNumbers = new Array (["01"], ["02"], ["03"]);

var countryShorts = new Array ("de_DE", "en_EN", "fr_FR", "es_ES", "it_IT",
"pt_PT", "nl_NL", "se_SE", "fi_FI", "no_NO", "pl_PL", "hu_HU", "cz_CZ", "hr_HR",
"ba_BA", "ro_RO", "si_SI", "tr_TR", "gr_GR", "ru_RU", "ja_JA", "cn_CN", "INT");

var myDialog = app.dialogs.add({name:"Metadatenerfassung", canCancel:true});
with(myDialog){
with(dialogColumns.add()){
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"aktuelle Versionsnummer:"});
var meineVersionsnummer = dropdowns.add({stringList:["01", "02", "03"], selectedIndex:0, minWidth:77});
}
}
}
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"Länderkennung:"});
var meineLänderkennung = dropdowns.add({stringList:["Deutsch","Englisch","Französisch",
"Spanisch","Italienisch","Portugiesisch","Niederländisch","Schwedisch",
"Finnisch","Norwegisch","Polnisch","Ungarisch","Tschechisch",
"Kroatisch","Bosnisch","Rumänisch","Slowenisch","Türkisch",
"Griechisch", "Russisch", "Japanisch", "Chinesisch", "International",], selectedIndex:0});
}
}
}
}
with (dialogColumns.add()) {
staticTexts.add({staticLabel:" ", minWidth:4});
}
}
if(myDialog.show() == true) {
var versNum = meineVersionsnummer.selectedIndex;
app.activeDocument.metadataPreferences.keywords = versNumbers[versNum];
var ctryInd = meineLänderkennung.selectedIndex;
app.activeDocument.metadataPreferences.description = countryShorts[ctryInd];
myDialog.destroy();
}
else {
myDialog.destroy();
exit();
}

Gruss, Hans


als Antwort auf: [#393373]

Eventscript MetadataBeforeSafe.jsx ergänzen

Vikimaus
Beiträge gesamt: 214

18. Apr 2009, 10:35
Beitrag # 12 von 36
Beitrag ID: #393375
Bewertung:
(11095 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Hans!

Ich kann mir nicht helfen, aber irgendwie sieht das kompakter aus ;-)


als Antwort auf: [#393374]

Eventscript MetadataBeforeSafe.jsx ergänzen

Hans Haesler
  
Beiträge gesamt: 5826

19. Apr 2009, 10:55
Beitrag # 13 von 36
Beitrag ID: #393439
Bewertung:
(10998 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Vikimaus,

[ jetzt habe ich es endlich geschafft, Dein Pseudo ohne Fehler zu tippen :-]

Eine gute und eine schlechte Nachricht. Die gute zuerst: Mit folgendem Code funktioniert es als Eventscript.

Zu beachten: InDesign beenden. Die Script-Datei in den Ordner "Startup Scripts" (im Ordner Scripts) speichern. InDesign starten.

Die verschiedenen Listen werden nun vor dem Zusammensetzen der Dialog-Elemente definiert. Bei jedem Speichern (oder Speichern unter...) wird die Funktion 'askUser' aufgerufen. Das Dialogfenster wird gezeigt, nach Klick auf "OK" wird die Funktion 'setMetadata' aufgerufen und die Einträge werden gemacht.

Code
//MetadatenErfassung.jsx   
//Ein InDesign-CS4-JavaScript

#targetengine "session"

var eventListener1 = app.addEventListener("beforeSave", askUser, false);
var eventListener2 = app.addEventListener("beforeSaveAs", askUser, false);

var dlogNumbers = new Array ("01", "02", "03");
var versNumbers = new Array (["01"], ["02"], ["03"]);

var countryNames = new Array ("Deutsch", "Englisch", "Französisch",
"Spanisch", "Italienisch", "Portugiesisch", "Niederländisch", "Schwedisch",
"Finnisch", "Norwegisch", "Polnisch", "Ungarisch", "Tschechisch",
"Kroatisch", "Bosnisch", "Rumänisch", "Slowenisch", "Türkisch",
"Griechisch", "Russisch", "Japanisch", "Chinesisch", "International");

var countryShorts = new Array ("de_DE", "en_EN", "fr_FR", "es_ES", "it_IT",
"pt_PT", "nl_NL", "se_SE", "fi_FI", "no_NO", "pl_PL", "hu_HU", "cz_CZ", "hr_HR",
"ba_BA", "ro_RO", "si_SI", "tr_TR", "gr_GR", "ru_RU", "ja_JA", "cn_CN", "INT");

function askUser() {
var aDialog = app.dialogs.add({name:"Metadatenerfassung", canCancel:true});
with (aDialog) {
with (dialogColumns.add()) {
with (borderPanels.add()) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({staticLabel:"Aktuelle Versionsnummer:"});
var versNumber = dropdowns.add({stringList:dlogNumbers, selectedIndex:0, minWidth:77});
}
}
}
with (borderPanels.add()) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({staticLabel:"Länderkennung:"});
var curCountry = dropdowns.add({stringList:countryNames, selectedIndex:0});
}
}
}
}
with (dialogColumns.add()) {
staticTexts.add({staticLabel:" ", minWidth:4});
}
}
if (aDialog.show() == true) {
var versNum = versNumber.selectedIndex;
var ctryInd = curCountry.selectedIndex;
setMetadata(versNum, ctryInd);
aDialog.destroy();
}
else {
aDialog.destroy();
exit();
}
}

function setMetadata(versNum, ctryInd) {
app.activeDocument.metadataPreferences.author = "MSch";
app.activeDocument.metadataPreferences.copyrightNotice = "© Adobe";
app.activeDocument.metadataPreferences.keywords = versNumbers[versNum];
app.activeDocument.metadataPreferences.description = countryShorts[ctryInd];
app.activeDocument.metadataPreferences.copyrightInfoURL = "http://www.adobe.com";
app.activeDocument.metadataPreferences.copyrightStatus = CopyrightStatus.YES;
}

Und die schlechte Nachricht: Ich habe es noch nicht geschafft, die gewünschten IPTC-Felder anzusprechen.

Es gäbe allerdings zwei andere Möglichkeiten.
1. Man könnte die Infos mit 'setLabel' ins Dokument schreiben. Dann wären sie aber nur per Script zugänglich. Doch das wäre nicht komplizierter als das Anzeigen der Dateiinformationen.
2. Man könnte die Infos in den ... Infobereich des Dokuments schreiben. Dann wären sie immer sichtbar (vorausgesetzt die Werte für 'Infobereich' stehen nicht auf Null) und könnten auch gedruckt werden.

Gruss, Hans


als Antwort auf: [#393375]

Eventscript MetadataBeforeSafe.jsx ergänzen

Martin Fischer
  
Beiträge gesamt: 12775

20. Apr 2009, 08:04
Beitrag # 14 von 36
Beitrag ID: #393491
Bewertung:
(10951 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

> Und die schlechte Nachricht: Ich habe es noch nicht geschafft, die gewünschten IPTC-Felder anzusprechen.

Das IPTC-Genre Feld kannst Du folgendermaßen auswerten:
Code
var myLink = app.documents.firstItem().links.firstItem(); 
var myGenre = myLink.linkXmp.getProperty("http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/", "IntellectualGenre");


Das IPTC-Scene Feld sollte demnach so anzusprechen sein:
Code
var myScene = myLink.linkXmp.getProperty("http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/", "Scene"); 

Das funktioniert (bei mir) aber nicht.
Möglicherweise habe ich in meiner Testkonfiguration den Wert für die Szene falsch notiert:

Zitat von http://www.iptc.org/std/Iptc4xmpCore/1.0/specification/Iptc4xmpCore_1.0-spec-XMPSchema_8.pdf Describes the scene of a photo content. Specifies one ore more terms from the IPTC
"Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered
list.



als Antwort auf: [#393439]

Eventscript MetadataBeforeSafe.jsx ergänzen

Hans Haesler
  
Beiträge gesamt: 5826

20. Apr 2009, 08:27
Beitrag # 15 von 36
Beitrag ID: #393493
Bewertung:
(10943 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

bei mir funktionierte es auch nicht. Aber ich hatte mich aus mehreren Gründen nicht lange damit befasst:
1. Zeit ...
2. Man sollte das IPTC-Feld des Dokuments ansprechen können (und nicht eines importierten Bildes).
3. Die Lösung mit dem Infobereich scheint mir praktischer.

Aber warten wir ab, was Markus dazu meint.

Gruss, Hans


als Antwort auf: [#393491]
X