[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Abfrage isValid funktioniert nicht wunschgemäß

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

Abfrage isValid funktioniert nicht wunschgemäß

faxinger
Beiträge gesamt: 245

25. Okt 2018, 15:59
Beitrag # 1 von 5
Bewertung:
(2565 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich bin immer noch bei meinem Skript des Preisausrichtens und stehe nun vor folgendem Problem:

Ich habe 3 Objekte ausgewählt: preis, preiszusatz, und grundpreis_zusatz.

Wenn alle 3 ausgewählt sind funktioniert das ausrichten der einzelnen Elemente, wenn ich nur 2 ausgewählt habe funktioniert es nicht.

Ich habe versucht mit if Anweisungen und isValid das Problem in den Griff zu bekommen, aber leider hat das nicht funktioniert.

Müsste ich mit einer try catch Operation arbeiten?

Hier nochmal das Skript:
Code
// die Auswahl   
var sel = app.selection;

// eine Liste mit Variablen-Namen vorbereiten
var
preis,
preiszusatz,
grundpreis_zusatz;
// eine Scheife durch die Auswahl
for (var i = 0; i < sel.length; i++) {
// das gerade untersuche Objekt in der Auswahl
var curSel = sel[i];
// das gerade verwendete Objektformat
var objStyleName = curSel.appliedObjectStyle.name;

//den Namen des Objektformats prüfen und der Variablen zuweisen
if (objStyleName == "preis") preis = curSel;

else if (objStyleName == "preiszusatz") preiszusatz = curSel;
else if (objStyleName == "grundpreis_zusatz") grundpreis_zusatz = curSel;
};

var preis_erste_zahl = preis.contents[0];
var font_groesse_preis = preis.characters[0].pointSize;
var faktor = font_groesse_preis*0.001;

var abstand_preis = preis_erste_zahl;
switch(preis_erste_zahl) {
case "0":
abstand_preis = faktor*0.9
break;
case "1":
abstand_preis = faktor*-31.2
break;
case "2":
abstand_preis = faktor*10
break;
case "3":
abstand_preis = faktor*10.75
break;
case "4":
abstand_preis = faktor*7.5
break;
case "5":
abstand_preis = faktor*13.1
break;
case "6":
abstand_preis = faktor*1
break;
case "7":
abstand_preis = faktor*-18
break;
case "8":
abstand_preis = faktor*10.5
break;
case "9":
abstand_preis = faktor*-0.75
break;
};

// preiszusatz A U S R I C H T E N A M P R E I S //
if (preiszusatz.isValid)
{

var preiszusatz_gb = preiszusatz.geometricBounds;
var preiszusatz_breite = preiszusatz_gb[3] - preiszusatz_gb[1];
var preiszusatz_hoehe = preiszusatz_gb[2] - preiszusatz_gb[0];
var preis_hoehe = preis.geometricBounds[2] - preis.geometricBounds[0];
var preisgbX = preis.geometricBounds[1];
var preisgbY = preis.geometricBounds[0];
preiszusatz.move([preisgbX - preiszusatz_breite - abstand_preis, preisgbY + preis_hoehe - preiszusatz_hoehe]) ;
};

// grundpreis_zusatz A U S R I C H T E N A M P R E I S //
if (grundpreis_zusatz.isValid)
{
var preis_inhalt = preis.contents;
var kommaindex = preis_inhalt.indexOf(".");
var x_koord_preis_komma_stelle = preis.characters[kommaindex+1].endHorizontalOffset;
var grundpreis_zusatz_gb = grundpreis_zusatz.geometricBounds;
var grundpreis_zusatz_hoehe = grundpreis_zusatz_gb[2] - grundpreis_zusatz_gb[0];
var preis_hoehe = preis.geometricBounds[2] - preis.geometricBounds[0];
var preisgbX = preis.geometricBounds[1];
var preisgbY = preis.geometricBounds[0];
grundpreis_zusatz.move([x_koord_preis_komma_stelle, preisgbY + preis_hoehe - grundpreis_zusatz_hoehe]) ;

};




Danke für eure Mithilfe.

(Dieser Beitrag wurde von faxinger am 25. Okt 2018, 16:06 geändert)
X

Abfrage isValid funktioniert nicht wunschgemäß

Hans Haesler
  
Beiträge gesamt: 5791

25. Okt 2018, 18:42
Beitrag # 2 von 5
Beitrag ID: #567134
Bewertung:
(2548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,

auf den Einsatz von isValid kannst Du so verzichten:
– Zu Beginn prüfen, ob drei Objekte ausgewählt sind.
– Dann bei der Prüfung des Objektformats, den Wert von check erhöhen.

Wenn check nicht 11 zurückgibt, sind nicht die korrekten Objekte ausgewählt.
Man könnte diesen Test noch verfeinern, um mitzuteilen, welches Objektformat fehlt.

Code
//PreisAusrichten_01d.js 

// die Auswahl
var sel = app.selection;

// die Auswahl prüfen
if (sel.length != 3) {
alert ("Drei Objekte auswählen, bitte.", "Stopp");
exit();
}

// Variablen-Namen vorbereiten
var preis, preiszusatz, grundpreis_zusatz;
var check = 0;

// eine Scheife durch die Auswahl
for (var i = 0; i < sel.length; i++) {
// das gerade untersuchte Objekt in der Auswahl
var curSel = sel[i];
// das gerade verwendete Objektformat
var objStyleName = curSel.appliedObjectStyle.name;
//den Namen des Objektformats prüfen und der Variablen zuweisen
if (objStyleName == "preis") {
preis = curSel;
check = check+1;
}
else if (objStyleName == "preiszusatz") {
preiszusatz = curSel;
check = check+4;
}
else if (objStyleName == "grund_preiszusatz") {
grundpreis_zusatz = curSel;
check = check+6;
}
}

// prüfen, ob die drei richtigen Objekte ausgewählt sind
if (check != 11) {
alert ("Nicht alle gewählten Objekte sind korrekt.", "Stopp");
exit();
}

var preis_erste_zahl = preis.contents[0];
var font_groesse_preis = preis.characters[0].pointSize;
var faktor = font_groesse_preis*0.001;
var abstand_preis = preis_erste_zahl;
var valArr = [0.9, -31.2, 10, 10.75, 7.5, 13.1, 1, -18, 10.5, -0.75];

abstand_preis = faktor*valArr[abstand_preis*1];

// preiszusatz A U S R I C H T E N A M P R E I S //
var preiszusatz_gb = preiszusatz.geometricBounds;
var preiszusatz_breite = preiszusatz_gb[3] - preiszusatz_gb[1];
var preiszusatz_hoehe = preiszusatz_gb[2] - preiszusatz_gb[0];
var preis_hoehe = preis.geometricBounds[2] - preis.geometricBounds[0];
var preisgbX = preis.geometricBounds[1];
var preisgbY = preis.geometricBounds[0];
preiszusatz.move([preisgbX - preiszusatz_breite - abstand_preis, preisgbY + preis_hoehe - preiszusatz_hoehe]);

// grundpreis_zusatz A U S R I C H T E N A M P R E I S //
var preis_inhalt = preis.contents;
var kommaindex = preis_inhalt.indexOf(".");
var x_koord_preis_komma_stelle = preis.characters[kommaindex+1].endHorizontalOffset;
var grundpreis_zusatz_gb = grundpreis_zusatz.geometricBounds;
var grundpreis_zusatz_hoehe = grundpreis_zusatz_gb[2] - grundpreis_zusatz_gb[0];
var preis_hoehe = preis.geometricBounds[2] - preis.geometricBounds[0];
var preisgbX = preis.geometricBounds[1];
var preisgbY = preis.geometricBounds[0];
grundpreis_zusatz.move([x_koord_preis_komma_stelle, preisgbY + preis_hoehe - grundpreis_zusatz_hoehe]);

Die switch-Konstruktion ist ersetzt durch das Holen des entsprechenden Wertes im definierten Array.

Gruss, Hans


als Antwort auf: [#567127]

Abfrage isValid funktioniert nicht wunschgemäß

faxinger
Beiträge gesamt: 245

29. Okt 2018, 16:43
Beitrag # 3 von 5
Beitrag ID: #567223
Bewertung:
(2443 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
vielen Dank für deine Antwort, aber ich glaube hier liegt ein Missverständnis vor:

Mit meiner isValid-Prüfung wollte ich nur sicher gehen ob das Objekt überhaupt existiert. Falls es nicht exisitert dann soll das Skript diesen Umstand ignorieren.

Die Auswahl mit den 3 Objekten ist nur als Beispiel gedacht. Es kann vorkommen dass auch nur 2 oder auch mehr als 3 Objekte (es könntne auch 7 oder 8 sein) ausgewählt bzw. vorhanden sind. Selbst dann soll das Skript laufen und die ausgewählten Objekte dahin verschieben wie im Skript angegeben.

Das Problem meines Skriptes ist, dass, falls eines der Objektformate nicht vorhanden war, es abgebrochen hat.

Ich möchte aber, dass es das mit den vorhandenen Objektformaten eben macht was es machen soll.

Also sprich: Falls dieses oder jenes Objektformat nicht in der Auswahl enthalten ist, dann ignoriere das und gehe weiter im Skript.

Ich hoffe ich konnte es halbwegs nachvollziehbar erklären wo ich hin möchte.

LG
faxinger


als Antwort auf: [#567134]

Abfrage isValid funktioniert nicht wunschgemäß

Martin Fischer
  
Beiträge gesamt: 12337

29. Okt 2018, 18:35
Beitrag # 4 von 5
Beitrag ID: #567230
Bewertung:
(2426 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,

eine Idee:

initialisiere die beiden Variablen preiszusatz und grundpreis_zusatz mit dem Wert null:

Code
preiszusatz = null; 
grundpreis_zusatz = null;



Dann kannst Du unten eine if-Abfrage nach != null statt isValid einbauen:

Code
if (preiszusatz != null)   
// ...


Viele Grüße
Martin




als Antwort auf: [#567223]
(Dieser Beitrag wurde von Martin Fischer am 29. Okt 2018, 19:09 geändert)

Abfrage isValid funktioniert nicht wunschgemäß

faxinger
Beiträge gesamt: 245

31. Okt 2018, 16:47
Beitrag # 5 von 5
Beitrag ID: #567275
Bewertung:
(2343 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Martin,

das war genau das was ich gebraucht habe.

Schönen Feiertag.

LG faxinger


als Antwort auf: [#567230]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
29.10.2020

Ortsunabhängig
Donnerstag, 29. Okt. 2020, 10.00 - 10.30 Uhr

Webinar

Wir stellen Ihnen in diesem kostenlosen ca. 30-minütigen Webinar das neueste Produkt aus dem Hause Enfocus vor. Enfocus bringt mit BoardingPass eine pfiffige Lösung auf den Markt, welche eingehende Daten auf die wichtigsten druckrelevanten Kriterien hin gleich im Mail-Browser prüfen lässt. Mit BoardingPass sind auch Kundenberater und Avor-/Vertriebs-Mitarbeiter in der Lage, eingegangene Druckdaten innerhalb ihres Mail-Programmes sofort zu prüfen und dem Auftraggeber eine leicht verständliche Rückmeldung über diese zu geben. Die Druckdaten müssen also gar nicht erst über den internen Workflow des Druckdienstleisters laufen, sondern können direkt auf druckrelevante Kriterien geprüft und auch begutachtet werden.

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=292

Enfocus BoardingPass
Veranstaltungen
02.11.2020 - 03.11.2020

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Montag, 02. Nov. 2020, 08.30 Uhr - Dienstag, 03. Nov. 2020, 17.00 Uhr

Kurs

Dieser Basic-Kurs ist der perfekte Einstieg in die Welt von InDesign, dem vielseitigen Layout-Programm. Sie lernen, wie InDesign aufgebaut ist, wie saubere Dokumente erstellt werden und wie man korrekt mit gelieferten InDesign-Projekten umgeht.

Preis: CHF 1'400.-
Dauer: 2 Tage

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/desktop-publishing/adobe-indesign-cc/kurs-indesign-cc-basic

Neuste Foreneinträge


Letzter Aufruf für InDesign CC 2019 ?

Buchdateien kopieren

Wie importiere ich eine Word Datei mit Fussnoten in Indesign?

Indesign CC2021 verliert Speicherpfad von Dateien

bearbeitete jpg´s nicht mehr markiert

Pantone - reiner Buntaufbau

Suitcase von 3 Benutzern an 7 Rechnern?

Probleme mit dem Strukturbaum Acrobat Pro DC (barrierefrei)

PDF_RGB-AUSGABE

Suchescript um auf meinem webserver nach Namen oder nummern zu suchen
medienjobs