[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Skript für Menübefehle hintereinander ausführen/ + Extras

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

Skript für Menübefehle hintereinander ausführen/ + Extras

mb_new
Beiträge gesamt: 123

7. Feb 2014, 11:12
Beitrag # 1 von 12
Bewertung:
(4094 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zusammen!
Im Mitgliedsnamen schon zu sehen: new!
Beschäftige mich schon länger mit Indesign Skripten und habe auch schon einige erfolgereich (wenn auch einfache) laufen und sie erleichtern das tägliche Arbeiten enorm.
Nun stehe ich aber an und hoffe hier Hilfe zu finden.

Was möchte ich tun?
Ich möchte 3 Menübefehle hintereinander ausführen (einzeln bekomme ich es schon hin) und dann möchte ich auch noch, dass man automatisch auf die erste Seite des Dokuments kommt und de rDokumentenname ausgelesen wird, Teile davon textlich ersetzt und in das automatische aufgerufene Feld eingesetzt wird.

Hier im Detail mit einigen Erklärungen:

1.) ich rufe einen Menübefehl (eines PlugIns hier) auf, der das aktuelle Dokument aus dem Plug Inherauslöst. Das funktioniert auch.
app.menuActions.itemByID(301673).invoke();

2.) danach möchte ich, dass man auf die erste Seite des Dokuments gelangt - wie geht das?
und die Nummerierungs und Abschnittsoptionen geöffnet werden. Letzteres bringe ich zu stande mit:
app.menuActions.itemByID(23818).invoke();

3.) danach soll wieder ein Befehl des PlugIns geöffnet werden.
Einzeln bekomme ich das hin (wieder mit app.menuActions.itemByID(301709).invoke(); ) doch nach der Nummerierung funktioniert es nicht, da der Befehl erwartet, das zuerst die Nummerierung geschlossen wird.

4) in diesem Befehl (der startet für das Dokument einen Workflow) soll dann automatisch der neue Dokumentenname aus der Zwischenablage kopiert werden.
Das stelle ich mir so vor, doch ich bekomms nicht hin:
Vor Schritt 3: Dokumentennamen auslesen, das ".indd." entfernen, Teile des Namens ersetzen und Teile löschen (zB "AT_AnzXY Zusatzname.indd" soll werden "DE_AnzXY"), das dann in die Zwischenablage kopieren und im unter Punkt 3 aufgerufenen Fenster aus der Zwischenablage reinkopieren (das Feld wohin das reinkopiert wir ist automatisch ausgewählt)

Ich hoffe ich habs nicht zu kompliziert erklärt, hoff die Profis hier können (vielleicht auch nur teilweise) weiterhelfen.
DANKE martin
X

Skript für Menübefehle hintereinander ausführen/ + Extras

Kai Rübsamen
Beiträge gesamt: 4684

7. Feb 2014, 18:43
Beitrag # 2 von 12
Beitrag ID: #523308
Bewertung:
(4040 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin und Willkommen auf hds,

ich hab leider von menuActions keine Ahnung, aber viell. bringen dich die nachfolgenden Zeilen bei deinen anderen Fragen etwas weiter:

Code
// das aktive Dokument 
var curDoc = app.activeDocument;

// das aktive Layoutfenster
var lW = curDoc.layoutWindows[0];
// Seite 1 wird zur aktiven Seite
lW.activePage = curDoc.pages[0];
// Ansicht > Seite in Fenster einpassen
lW.zoom( ZoomOptions.FIT_PAGE );

// der Dokumentname ohne Suffix
var curDocName = curDoc.name.slice( 0, -5 );
alert ( curDocName );
// vom Dokumentnamen entsprechende Teile ausschneiden bzw. ergänzen
var str = curDocName.replace(/\s.+/,"").replace(/^AT/,"DE");
alert ( str );



als Antwort auf: [#523300]

Skript für Menübefehle hintereinander ausführen/ + Extras

Kai Rübsamen
Beiträge gesamt: 4684

7. Feb 2014, 19:40
Beitrag # 3 von 12
Beitrag ID: #523309
Bewertung:
(4021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ansonsten habe ich es so verstanden, dass man MenuActions dann nimmt, wenn man eigene Skripte oder in deinem Fall das plugin ansprechen möchte, aber bei in InDesign vorhandenen Eigenschaften lieber aufs Objektmodell ausweichen soll?!

Code
var curDoc = app.activeDocument; 

var firstSec = curDoc.sections.item(0);

with ( firstSec ) {
// Automatische Seitennummerierung deaktiveren
continueNumbering = false;
// Seitennummerierung beginnen bei:
pageNumberStart = 1;
// Abschnittspräfix:
sectionPrefix = "A-";
// Format:
pageNumberStyle = PageNumberStyle.UPPER_ROMAN;
// Abschnittsmarke;
marker = "Abschnitt 1";
}

var secSec = curDoc.sections.add(curDoc.pages[3]);

with ( secSec ) {
// Seitennummerierung beginnen bei:
pageNumberStart = 1;
// Format:
pageNumberStyle = PageNumberStyle.ARABIC;
}



als Antwort auf: [#523308]

Skript für Menübefehle hintereinander ausführen/ + Extras

Hans Haesler
  
Beiträge gesamt: 5826

8. Feb 2014, 11:08
Beitrag # 4 von 12
Beitrag ID: #523314
Bewertung:
(3943 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

der Kai hat Dir schon fast alle Lösungen aufgezeigt.

Bleibt noch der Konflikt im Punkt 3. Um diesen zu vermeiden, bietet sich folgende Lösung an: Den Dialog "Nummerierungs- und Abschnittsoptionen" nicht öffnen, sondern mit einem Prompt die Startseitennummer erfragen.

Code
// das Dokument 
var curDoc = app.documents[0];
// zur Eingabe der Seitennummer auffordern
var startPage = prompt ("Die Seitennummer eingeben:", "", "Startseite");
if (startPage == null) {
exit();
}
// die Eingabe prüfen
if (startPage == "") {
alert ("Die Eingabe ist leer.", "Stop");
exit();
}
else {
for (var n=0; n<startPage.length; n++) {
var curChar = startPage[n];
if ("0123456789".indexOf(curChar) == -1) {
alert ("Ungültige Eingabe.", "Stop");
exit();
}
}
}

// den Abschnittsanfang ändern
curDoc.sections[0].continueNumbering = false;
curDoc.sections[0].pageNumberStart = startPage*1;

Falls auch das Abschnittspräfix usw. zugewiesen werden soll, kann anstelle des Prompts ein einfacher Dialog eingesetzt werden.

Gruss, Hans


als Antwort auf: [#523309]

Skript für Menübefehle hintereinander ausführen/ + Extras

mb_new
Beiträge gesamt: 123

8. Feb 2014, 15:23
Beitrag # 5 von 12
Beitrag ID: #523322
Bewertung:
(3904 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Kai und Hans!
Dank euren Ansätzen und Lösungen bin ich meinem Ziel sehr, sehr nahe!
Also ich schaff es den Dokumentennamen wie gewünscht zu ändern -> hierzu unten noch eine Frage, die Seitennummerieung funktioniert wie gewünscht.
PERFEKT.
Ob sich dann der Menübefehl für das Indesign Plugin auch noch öffnet, kann ich erst am Montag im Büro sagen, denke aber schon.

Und hier noch eine Frage zu den "replace" Änderungen im Namen:
Also es hkann sein, dass die Urdokumente verschiedene Länderkürzel drinnen haben, das Ergebnis soll aber immer "DE sein.
zB:
Urdok1: "AT_AnzXY Zusatzname.indd"
Urdok2: "Bay_AnzXY Zusatzname.indd"
Ziel soll sein: "DE_AnzXY"

Ich hab das so gelöst:
Code
// Bay in DE ändern 
var newName = docName.replace(/\s.+/,"").replace(/Bay/,"DE");
// AT in DE ändern
var newerName= newName.replace(/\s.+/,"").replace(/AT/,"DE");


Es funktioniert - doch ist das so elegant und "richtig"?
Geht es auch, dass die "replace" Funktion zB AT ausliest egal ob Groß- oder Kleinschreibung (es kann zB at oder bay oder At, bzw Bay in den Urdokumenten stehen).

Das neue Dokument speichere ich dann automatisch in einem Desktop Ordner, diese Lösung hab ich schon geschafft!)

Herzlichen Dank für Eure Hilfe, ohne euren Ansätzen würd ich mich noch immer krumm suchen!
Danke
Martin


als Antwort auf: [#523314]

Skript für Menübefehle hintereinander ausführen/ + Extras

Hans Haesler
  
Beiträge gesamt: 5826

8. Feb 2014, 16:06
Beitrag # 6 von 12
Beitrag ID: #523323
Bewertung:
(3881 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

bitte sehr.

Wenn im Dateinamen die Kennung immer von einem Underscore gefolgt ist und vor dem Zusatznamen immer ein Leerschlag steht könnte die Aufgabe auch so gelöst werden:
– die Position des Underscore-Zeichens speichern
– die Position des Leerschlags speichern
– mit slice() den entsprechenden Teilstring ausschneiden und "DE" davorsetzen.

Übrigens fehlt noch die Sache mit der Zwischenablage. Dazu folgende Outline:
– einen temporären Textrahmen erzeugen
– den Namen einsetzen
– den Inhalt des Rahmens auswählen
– kopieren
– den Textrahmen wieder entfernen

Diese beiden Anregungen als Code:

Code
// das Dokument 
var curDoc = app.documents[0];
// der Dateiname
var docName = curDoc.name;
// Positionen speichern
var startPos = docName.indexOf("_");
var stopPos = docName.indexOf(" ");
// definitive Kennung davor und Teil-Name ansetzen
var defName = "DE" + docName.slice(startPos, stopPos);
// testen, ob der Name korrekt ist
alert ("|" + defName + "|");
// einen temporären Rahmen erzeugen
var tmpFrame = curDoc.textFrames.add();
// den Namen einsetzen ...
tmpFrame.contents = defName;
// ... und auswählen
tmpFrame.paragraphs[0].select();
// kopieren
app.copy();
// den Rahmen entfernen
tmpFrame.remove();

Dann ist nur noch zu hoffen, dass InDesign gewillt ist, den Inhalt der Zwischenablage in ein "fremdes" Texteingabefeld einzusetzen ...

Gruss, Hans


als Antwort auf: [#523322]
(Dieser Beitrag wurde von Hans Haesler am 8. Feb 2014, 16:10 geändert)

Skript für Menübefehle hintereinander ausführen/ + Extras

WernerPerplies
Beiträge gesamt: 2772

8. Feb 2014, 16:14
Beitrag # 7 von 12
Beitrag ID: #523325
Bewertung:
(3875 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

sofern die Zeichenfolge LKZ_ immer so vorkommt, wäre dies eine von vielen Möglichkeiten:
Code
var regex = new RegExp("\\w*?_","i"); 
var newName = docName.replace(regex, "DE_");



als Antwort auf: [#523322]

Skript für Menübefehle hintereinander ausführen/ + Extras

Kai Rübsamen
Beiträge gesamt: 4684

8. Feb 2014, 19:29
Beitrag # 8 von 12
Beitrag ID: #523328
Bewertung:
(3842 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Es sind ja mehrere Vorgänge für den String notwendig:
1. Den Suffix abtrennen
2. Den Text nach dem Leerzeichen löschen
3. Den variablen Text vor dem "_" gegen "DE" tauschen

Alle drei Vorgänge können auch mit einem Regex erschlagen werden:

Code
var doc = app.activeDocument; 
var docName = doc.name;
alert( docName );

var newName = docName.replace(/\w+(_\S+).+/ , "DE$1");
alert ( newName );



als Antwort auf: [#523325]

Skript für Menübefehle hintereinander ausführen/ + Extras

mb_new
Beiträge gesamt: 123

9. Feb 2014, 15:18
Beitrag # 9 von 12
Beitrag ID: #523336
Bewertung:
(3787 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,
danke für die vielen Anregungen und Codes!
Daraus hab ich für mich nun die Elemente rausgesucht und mit viel Try/Error das Skript für mich einmal soweit zu laufen bekommen. Ob es zu 100% funktioniert, sehe ich morgen im Büro.
Das mit dem Namen habe ich nun so gelöst (da nämlich die Kürzel nicht immer am Anfang stehen und auch die Mutation zB nach DE oder auch von AT nach BaWue ... sein könnte)
Code
var doc = app.activeDocument;  
var docName = doc.name;
//alert( docName );

// Dialog Mutation nach
var myMut = prompt ("Mutation nach:", "DE")
if (myMut == null) {
exit();
}
// die Eingabe prüfen
if (myMut == "") {
alert ("Die Eingabe ist leer.", "Stop");
exit();
}

var newName = docName.replace(/\s.+/,"").replace(/(AT)|(Bay)|(BaWue)/i , myMut);

alert ( newName );


Hierzu noch eine kleine Frage: ist es möglich in einem prompt 2 Abfragen gemeinsam zu machen? Eben die Seitennummer und das Land in das mutiert wird?

Das mit der Zwischenablage habe ich nun so geregelt, dass mir das Dokument in einen Ordner gespeichert wir, der am Desktop liegt. Der Workflow verschiebt danach automatisch das Dokument, so ist immer nur das aktuell bearbeitete in diesem Ordner.

Danke nochmals an alle, die hier Inputs gaben und mir das Ding zum Laufen gebracht haben.
lg
Martin


als Antwort auf: [#523328]

Skript für Menübefehle hintereinander ausführen/ + Extras

Hans Haesler
  
Beiträge gesamt: 5826

9. Feb 2014, 17:00
Beitrag # 10 von 12
Beitrag ID: #523338
Bewertung:
(3769 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ja, die beiden Infos können im selben Textfeld eingegeben werden.
Dabei muss man sich an die Vorgaben (Reihenfolge und Trennzeichen) halten:

Code
// das Dokument 
var curDoc = app.documents[0];
// der Dateiname
var docName = curDoc.name;

// zur Eingabe "Land" und "Seitennummer" auffordern
var infString = prompt ("Länderkürzel, Leerschlag, Startseite:", "", "Land + Startseite");
if (infString == null) {
exit();
}
// die Eingabe prüfen
if (infString == "") {
alert ("Die Eingabe ist leer.", "Stop");
exit();
}
else {
// die Eingabe aufteilen ...
var infArray = infString.split(" ");
// ... und zuweisen
var mutString = infArray[0];
var startPage = infArray[1];
// prüfen, ob "Startseite" nur aus Ziffern besteht
for (var n=0; n<startPage.length; n++) {
var curChar = startPage[n];
if ("0123456789".indexOf(curChar) == -1) {
alert ("Ungültige Eingabe.", "Stop");
exit();
}
}
}
// den Abschnittsanfang ändern
curDoc.sections[0].continueNumbering = false;
curDoc.sections[0].pageNumberStart = startPage*1;

var newName = docName.replace(/\s.+/,"").replace(/(AT)|(Bay)|(BaWue)/i, mutString);

alert ("|" + newName + "|");

Anstelle des Prompts könnte auch ein einfacher Dialog codiert werden, welcher zwei separate Texteingabefelder anbietet.

Gruss, Hans


als Antwort auf: [#523336]

Skript für Menübefehle hintereinander ausführen/ + Extras

Hans Haesler
  
Beiträge gesamt: 5826

9. Feb 2014, 21:09
Beitrag # 11 von 12
Beitrag ID: #523342
Bewertung:
(3724 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

und so könnte der erwähnte Dialog mit zwei Eingabefeldern aussehen:

Code
// die Funktion aufrufen, welche den Dialog zeigt und das Ergebnis zurückgibt 
var okay = false;
while (okay == false) {
var anArray = displayDialog();
var mutString = anArray[0];
if (mutString == "" || mutString == " ") {
alert ("Die Kürzel-Eingabe ist leer.\nBitte nochmals.", "Achtung");
}
else {
okay = true;
}
var startPage = anArray[1];
}

alert ("Länderkürzel: " + mutString + " / Startseite: " + startPage, "");

// den Dialog vorbereiten und anzeigen ////////////////////////////////////////////////////////////
function displayDialog() {
try {
app.dialogs.everyItem().destroy();
}
catch (e) {
}
var labelWidth = 100;
var fieldWidth = 36;
var aDialog = app.dialogs.add({name:"Länderkürzel und Startseite"});
with (aDialog) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({staticLabel:"Länderkürzel:", minWidth:labelWidth});
var strField = textEditboxes.add({editValue:"", minWidth:fieldWidth});
staticTexts.add({staticLabel:"", minWidth:0});
}
with (dialogRows.add()) {
staticTexts.add({staticLabel:"Startseite:", minWidth:labelWidth});
var numField = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:999, minWidth:fieldWidth});
}
}
}
if(aDialog.show() == true) {
// die Eingaben auswerten
var strVal = strField.editContents;
var numVal = numField.editValue;
// den Dialog entfernen
aDialog.destroy();
// das Ergebnis zum Aufruf zurückschicken
return [strVal, numVal];
}
else{
// wenn "Abbrechen", den Dialog entfernen ...
aDialog.destroy();
// ... und die Ausführung abbrechen
exit();
}
}

Falls die Kürzel definiert sind, könnte man sie in einen Array geben und im Dialog anstelle des Eingabefeldes ein lokales Menü einbauen.

Gruss, Hans


als Antwort auf: [#523338]

Skript für Menübefehle hintereinander ausführen/ + Extras

mb_new
Beiträge gesamt: 123

12. Feb 2014, 23:14
Beitrag # 12 von 12
Beitrag ID: #523558
Bewertung:
(3621 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ein herzliches Danke an alle Beteiligten!

Ich hab mir aus allen Anregungen die Dinge für mich herausgepickt, einiges probiert und das Ding gestern so zum Laufen gebracht, dass es 1a funktioniert.
Alles was ich wollte (+ vieles mehr - wie zB ein feiner Eingabedialog - den hab ich gleich für andere Skripte auch adaptiert) funktioniert einwandfrei.
Ich bin begeistert über meine Zeitersparnis. Das teste ich jetzt ncoh in Minuten/Tag.

Danke
Martin


als Antwort auf: [#523342]
X

Aktuell

PDF / Print
IWS-Logo_300

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
20.06.2024

Online
Donnerstag, 20. Juni 2024, 15.00 - 15.45 Uhr

Webinar

Etiketten-Workflows gehören zu den anspruchsvollsten in der grafischen Industrie. Ihre PDF-Dateien sind oft sehr komplex und erfordern eine spezielle Vorbereitung. pdfToolbox bietet viele Möglichkeiten, um diese Arbeit zu automatisieren. Nehmen Sie an unserem Webinar "pdfToolbox für den Etikettendruck" teil und lernen Sie einige der Funktionen kennen, die Ihren Etiketten-Workflow effizienter gestalten. Einige der Bereiche, die Sie kennenlernen werden, sind: Beschnitt erzeugen Beim Etikettendruck ist das Druckmotiv oft nicht rechteckig. Lernen Sie, wie Sie einen passenden Beschnitt für alle Arten von Formen hinzufügen können. Produktionsreife Dateien erstellen nutzen Sie bereits vorliegende Inhalte oder Seiteninformationen, um eine Weißform hinter dem Seiteninhalt hinzuzufügen, eine passgenaue Lackform für bestimmte Objekte zu erzeugen oder eine Stanzlinie mit korrektem Sonderfarbnamen zu erstellen. Ausschießen, Step & Repeat, N-Up Mit der Ausschieß-Engine von pdfToolbox lassen sich Seiten zu größeren Druckbögen zusammenfassen, wobei verschiedene Layouts und Komplexitäten unterstützt werden. Hochwertige Freigabe-Bögen Erstellen Sie automatisch Freigabe-Bögen mit Vorschaubildern Ihrer Produktionsdatei und Auftragsdaten aus dem MIS. Qualitätskontrolle pdfToolbox enthält Standard-Preflight-Profile, die die grundlegenden Anforderungen an PDF-Dateien in Etiketten-Workflows abdecken. Prüfen Sie ob Ihre Dokumente internationalen Standards wie ISO PDF/X oder GWG (Ghent Workgroup) Spezifikationen entspricht. Verpackungs- und etikettenspezifische Vorgaben, wie der ISO-Standard „Processing Steps“, werden ebenfalls unterstützt.

kostenlos

Ja

Organisator: callassoftware

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

pdfToolbox für den Ettikettendruck
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

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

So optimieren Sie Ihren LFP-Workflow