[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Seiten sortieren

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

Seiten sortieren

jodi
Beiträge gesamt:

19. Mai 2014, 16:42
Beitrag # 1 von 17
Bewertung:
(14499 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

wie aufwendig wäre folgendes Skript:
Jede Seite, die in einem benannten Textrahmen einen bestimmten Ausdruck stehen hat, wird ans Ende des Dokuments verschoben.

Gruß
Jo
X

Seiten sortieren

Hans Haesler
  
Beiträge gesamt: 5826

20. Mai 2014, 08:13
Beitrag # 2 von 17
Beitrag ID: #527494
Bewertung:
(14438 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

der Aufwand ist nicht gross:
– Eine Rückwärtsschleife durch die Seiten.
– Bei jeder Seite den Inhalt des Texrahmens abfragen.
– Ist der bestimmte Ausdruck drin ...
– ... dann die aktuelle Seite ans Ende verschieben.

Das Verschieben klappt mit:

Code
curPage.move(LocationOptions.AFTER, curDoc.pages.item(-1)); 

Allerdings wirst Du die verschobenen Seiten in umgekehrter Reihenfolge wiederfinden.

Falls dies ein Problem ist: Eine Variable definieren var ctr = -1 und diese anstelle des fixen (-1) einsetzen: (ctr).
Nach jeder Verschiebung um eins kleiner machen: ctr--

Gruss, Hans


als Antwort auf: [#527470]

Seiten sortieren

jodi
Beiträge gesamt:

20. Mai 2014, 14:54
Beitrag # 3 von 17
Beitrag ID: #527514
Bewertung:
(14389 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für deinen wie immer hilfreichen Tipp.
Ich habe das Skript eigentlich fertig. Es funktioniert eigentlich auch. ;-)

Code
// das aktive Dokument  
var curDoc = app.activeDocument;
// die aktive Seite
var curPage = app.activeWindow.activePage;
// alle Objekte auf der aktiven Seite
var allPageItems = curPage.allPageItems;

var anzahl_tüten = 0;
var ctr=-1;
var _alleSeiten = curDoc.pages;
var z=0;
for (var i = 0; i < _alleSeiten.length; i++) {
var _seite = _alleSeiten[i];
z++;
curPage = _alleSeiten[i];
var allPageItems = curPage.allPageItems;
for ( var a = 0; a < allPageItems.length; a++ ) {
// das aktive Objekt
var curPageItem = allPageItems[a];
// wenn das Objekt einen Namen 'Milchtüte' hat, mach was
if ( curPageItem.name == "Milchtüte") {
if(curPageItem.contents == "lecker Milch"){
anzahl_tüten ++;
curPage.move(LocationOptions.AFTER, curDoc.pages.item(-1));
ctr--;
$.sleep(500)
}
}
}
}

alert(z + " Seiten, davon mit " + "Milchtüten: " + anzahl_tüten);

Dennoch ein paar Fragen:
a) manchmal muss man das Script mehrmals laufen lassen, bis alle Seiten am Ende sind, nämlich vor allem dann, wenn zwischen den Seiten leere Seiten sind. Warum?
b) Wie kann ich es realisieren, dass ich beim Aufruf des Skriptes erst nach der "Suchphrase" gefragt werde?
c) Wo hätte ich selbst so etwas wie "curPage.move(LocationOptions.AFTER, curDoc.pages.item(-1));" finden sollen?

Vielen Dank!

Gruß
Jo


als Antwort auf: [#527470]

Seiten sortieren

Hans Haesler
  
Beiträge gesamt: 5826

20. Mai 2014, 17:16
Beitrag # 4 von 17
Beitrag ID: #527519
Bewertung:
(14354 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

zuerst zum Script. Es läuft, aber:
– Die Zeilen 3 bis 6 sowie die 13 können entfernt werden.
– Die Schleife durch die Seiten sollte rückwärts laufen.
– Die Variable 'ctr' ist zwar definiert und wird dekrementiert, aber nicht benutzt.

So wäre es besser:

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

var anzahl_tüten = 0;
var ctr = -1;
var _alleSeiten = curDoc.pages;
var z = 0;

for (var p=_alleSeiten.length-1; p>-1; p--) {
z++;
var curPage = _alleSeiten[p];
var allPageItems = curPage.allPageItems;
for (var a=0; a<allPageItems.length; a++) {
// das aktive Objekt
var curPageItem = allPageItems[a];
// wenn das Objekt einen Namen 'Milchtüte' hat, mach was
if (curPageItem.name == "Milchtüte") {
if (curPageItem.contents == "lecker Milch") {
anzahl_tüten ++;
curPage.move(LocationOptions.AFTER, curDoc.pages.item(ctr));
ctr--;
}
}
}
}

alert (z + " Seiten, davon mit " + "Milchtüten: " + anzahl_tüten);

Und jetzt sind auch die Einzüge richtig.

Guter Rat: Beschaffe Dir "UltraEdit" http://www.ultraedit.com/downloads.html und benutze das schröckliche ESTK nur in Ausnahmefällen.

Zu Deinen Fragen:
a) Das kann ich nicht nachvollziehen. Da müsste ich eines Deiner Dokument haben.
b) Zu Beginn des Scripts einen Dialog einfügen. Ein 'prompt' reicht auch:

Code
// einen Prompt zeigen 
var searchString = prompt("Suchphrase:", "", "Suchstring eingeben");
// wenn "Abbrechen" geklickt ...
if (searchString == null) {
// ... dann abbrechen
exit();
}
else if (searchString == "") {
alert ("Leere Eingabe. Nochmals bitte.", "Stop");
exit();
}

c) Erste Wahl ist das Object-Model-Verzeichnis von Jongware: http://www.jongware.com/idjshelp.html
Herunterladen, was Deiner InDesign-Version und Plattform entspricht.

Das Inhaltsverzeichnis anzeigen, in der Spalte "Contents" auf den Link "Layout Suite" klicken. Dann in der rechten Spalte auf "Page".
Zuerst werden die "Properties" (die Eigenschaften) aufgeführt. Also hinunterscrollen zu den "Methods" (Befehle). Und bei 'move' ist alles erklärt. Zu Beginn ist es zwar ziemlich verwirrend. Doch mit einiger Erfahrung findet man sich besser zurecht.

Gruss, Hans


als Antwort auf: [#527514]
(Dieser Beitrag wurde von Hans Haesler am 20. Mai 2014, 17:29 geändert)

Seiten sortieren

jodi
Beiträge gesamt:

20. Mai 2014, 18:46
Beitrag # 5 von 17
Beitrag ID: #527521
Bewertung:
(14326 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das unterscheidet halt den Profi vom Laien!
Vielen Dank für das Skript.
Das mit dem Object-Model-Verzeichnis muss ich mir nochmals genauer zu Gemüte führen.

Schöne Grüße aus Regensburg
Jo


als Antwort auf: [#527519]

Seiten sortieren

jodi
Beiträge gesamt:

20. Mai 2014, 20:40
Beitrag # 6 von 17
Beitrag ID: #527524
Bewertung:
(14284 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Eine Frage noch zu UltraEdit:
Hat das Programm einen "Code-Beautifier" an Bord? Also ein Tool, das mir den Code am Ende nochmal hinsichtlich Einrückungen bearbeitet?

Gruß
Jo


als Antwort auf: [#527521]

Seiten sortieren

Hans Haesler
  
Beiträge gesamt: 5826

20. Mai 2014, 21:27
Beitrag # 7 von 17
Beitrag ID: #527527
Bewertung:
(14265 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

nein, das hat er nicht.

Aber das Ein- und Ausrücken geschieht schon mal während des Tippens automatisch.
Bedingung ist, dass die Syntaxhervorhebung aktiviert ist.

Eine (unvollständige) Aufzählung von angenehmen Vorteilen:
1. Leerschläge, Tabulatoren und Returns sind sichtbar.
2. Automatische Aus- und Einrückung von geschweiften Klammern.
3. Das Pendant zu einer angewählten Klammern wird angezeigt.
4. Syntaxhervorhebung.
5. Die Fenster sind immer auf voller Grösse (kein Zurechtzupfen).
6. Ein Fenster kann horizontal oder vertikal unterteilt werden.
7. Ein zweites Script kann gleichzeitig angezeigt werden (nach dem Öffnen den Reiter packen und zum linken oder unteren Rand ziehen).
8. Den Artikel "Format > Weißraum an Zeilenenden entfernen" wähle ich immer zum Säubern eines Scripts aus dem Forum.
9. "Format > Leerzeichen zu Tabulatoren (Führende)" ebenfalls.
10. Man kann in den "Spaltenmodus" umschalten und somit bei allen Zeile nur die Zeichen 1 bis 10 (oder so) auswählen.

Die Syntaxhervorhebung (einzustellen unter "Einstellungen... > Anzeige"), das Ein- und Ausrücken sowie das Anzeigen der Klammerpaare funktioniert nur mit ".js"-Dateien automatisch.
Mit ".jsx" kann man es zwar auch haben, aber bei jeder Datei muss man "Ansicht > Ansicht als (Syntaxhervorhebung) > JavaScript" wählen.

Wie beim ESTK können mehrere Zeile ausgewählt und mit Tab nach rechts (= einrücken) verschoben werden. Und mit Umschalt + Tab nach links (= ausrücken).

Gruss, Hans


als Antwort auf: [#527524]

Seiten sortieren

jodi
Beiträge gesamt:

21. Mai 2014, 10:21
Beitrag # 8 von 17
Beitrag ID: #527538
Bewertung:
(14186 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

herzlichen Dank für die ausführlichen Erläuterungen.

Schöne Grüße
Jo


als Antwort auf: [#527527]

Seiten sortieren

Hans Haesler
  
Beiträge gesamt: 5826

21. Mai 2014, 13:09
Beitrag # 9 von 17
Beitrag ID: #527566
Bewertung:
(14158 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

bitte sehr.

Einen hab' ich noch ... die Schriftart: > Einstellungen > Editor > Dateitypen

Ganz unten sind Buttons, mit welchen der Dialog zum Ändern der Schriftart aufgerufen werden kann.
Bei mir funktioniert es am besten mit "Courier New", 14 pt.

Gruss, Hans


als Antwort auf: [#527538]

Seiten sortieren

jodi
Beiträge gesamt:

1. Jun 2014, 18:37
Beitrag # 10 von 17
Beitrag ID: #528036
Bewertung:
(14032 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe nochmals eine kleine Frage zu diesem Skript. (Das Skript sortiert Seiten nach hinten, wenn ein bestimmter Textrahmen einen bestimmten Ausdruck enthält.)

Code
// das aktive Dokument  
var curDoc = app.activeDocument;
var anzahl_tüten = 0;
var ctr = -1;
var _alleSeiten = curDoc.pages;
var z = 0;

// einen Prompt zeigen
var searchString = prompt("Suchphrase:", "", "Suchstring eingeben");
// wenn "Abbrechen" geklickt ...
if (searchString == null) {
// ... dann abbrechen
exit();
}
else if (searchString == "") {
alert ("Leere Eingabe. Nochmals bitte.", "Stop");
exit();
}

for (var p=_alleSeiten.length-1; p>-1; p--) {
z++;
var curPage = _alleSeiten[p];
var allPageItems = curPage.allPageItems;
for (var a=0; a<allPageItems.length; a++) {
// das aktive Objekt
var curPageItem = allPageItems[a];
// wenn das Objekt einen Namen 'Milchtüte' hat, mach was
if (curPageItem.name == "rubrikbox") {
if (curPageItem.contents == searchString) {
anzahl_tüten ++;
curPage.move(LocationOptions.AFTER, curDoc.pages.item(ctr));
ctr--;
}
}
}
}

alert (z + " Seiten, davon mit " + searchString + ": " + anzahl_tüten);


Das Problem, das ich habe ist, dass in der entsprechenden Box nach _genau_ dem Ausdruck gesucht wird. Leider wird er nicht gefunden, wenn ich z. B. noch ____ (Underscores) zum "Füllen" dabei habe.
Wie kann ich das Problem beheben, also alá "Suchstring*"

Vielen Dank und schöne Grüße
Jo


als Antwort auf: [#527566]

Seiten sortieren

Hans Haesler
  
Beiträge gesamt: 5826

1. Jun 2014, 19:42
Beitrag # 11 von 17
Beitrag ID: #528037
Bewertung:
(14010 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

versuche es bitte mal so:

Code
if (curPageItem.name == "rubrikbox") { 
if (curPageItem.contents.indexOf(searchString) != -1) {

Mit indexOf(searchString) wird geprüft, ob ein Teil des Suchstrings im Inhalt des Textrahmens namens "rubrikbox" enthalten ist.

Wenn der Suchstring enthalten ist, dann wird als Index eine Zahl von Null aufwärts zurückgegeben.
Wenn aber der Suchstring im Inhalt nicht vorkommt, dann ist das Ergebnis -1.

Deshalb lautet der Test:

Code
if (...(...) != -1) 

Das Ausrufezeichen gefolgt vom Gleichheitszeichen bedeutet nicht gleich.
Also: Wenn der Index nicht minus eins ist (dann verschiebe die Seite).

Guter Rat: Die Kommentare sowie die Namen der Variablen an jene echter Objekte anpassen. Denn "Milchtüten" und "anzahl_tüten" war nur zum Verständnis, was abläuft gedacht. In einem richtigen Script sind solche Ausdrücke fehl am Platz.

Gruss, Hans


als Antwort auf: [#528036]

Seiten sortieren

jodi
Beiträge gesamt:

2. Jun 2014, 12:00
Beitrag # 12 von 17
Beitrag ID: #528054
Bewertung:
(13932 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

perfekt, jetzt klappt es!
VIELEN DANK!

Gruß
Jo


als Antwort auf: [#528037]

Seiten sortieren

jodi
Beiträge gesamt:

20. Okt 2015, 18:27
Beitrag # 13 von 17
Beitrag ID: #543836
Bewertung:
(12669 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich greife diesen Thread nochmal auf. Mit folgendem Skript sortiere ich ein ca. 230 seitiges Dokument. Jede Seite beinhaltet einige Bilder und etwas Text. Das Sortieren dauert jedoch sehr lange, teilweise stürzt mir ID sogar ab.
Code
// das aktive Dokument  
var curDoc = app.activeDocument;
var anzahl_tüten = 0;
var ctr = -1;
var _alleSeiten = curDoc.pages;

var search_array = ["D","E","T","C","A","B"]


for (var n = 0; n < search_array.length; n++) {
var z = 0;
for (var p=_alleSeiten.length-1; p>-1; p--) {
z++;
var curPage = _alleSeiten[p];
var allPageItems = curPage.allPageItems;
for (var a=0; a<allPageItems.length; a++) {
// das aktive Objekt
var curPageItem = allPageItems[a];
if (curPageItem.name == "preisgruppe") {
if (curPageItem.contents.indexOf(search_array[n]) != -1) {
anzahl_tüten ++;
curPage.move(LocationOptions.AFTER, curDoc.pages.item(ctr));
ctr--;
}
}
}
}
}
alert ("FERTIG");



Kann man das Skript irgendwie "vereinfachen", damit das Sortieren schneller geht?


als Antwort auf: [#528054]

Seiten sortieren

Hans Haesler
  
Beiträge gesamt: 5826

20. Okt 2015, 19:57
Beitrag # 14 von 17
Beitrag ID: #543837
Bewertung:
(12626 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

mit allPageItems werden alle Objekte einer Seite aufgelistet: Textrahmen, Bildrahmen, Bilder, Gruppen. Und die in den Gruppen enthaltenen Rahmen ebenfalls.

Doch Deine Testrahmen sind ja nur Textrahmen. Deshalb könnten sie direkt angesprochen werden. Bedingung ist, dass der Name "preisgruppe" im Bedienfeld "Ebenen" zugewiesen worden ist. Und dass diese Rahmen nicht mit anderen gruppiert sind.

Dann kann das Script vereinfacht werden. Zum Beispiel so:

Code
var curDoc = app.activeDocument; 
var ctr = -1;
var allPages = curDoc.pages;
var nPages = allPages.length;
var searchArray = new Array("D","E","T","C","A","B");
var nItems = searchArray.length;

for (var n=0; n<nItems; n++) {
for (var p=nPages-1; p>-1; p--) {
var curPage = allPages[p];
// der aktuelle Testrahmen
var testFrame = curPage.textFrames.itemByName("preisgruppe");
// dessen Inhalt prüfen
if (testFrame.contents.indexOf(searchArray[n]) != -1) {
curPage.move(LocationOptions.AFTER, curDoc.pages.item(ctr));
ctr--;
}
}
}
alert ("FERTIG", " ");

So werden nur die Rahmen mit Namen "preisgruppe" angefragt und zwar direkt. Das Script sollte spürbar schneller ausgeführt werden. Habe es aber nur mit zehn Seiten ausprobiert.

Der try / catch ist eine Vorsichtsmassnahme für den Fall wenn auf einer der Seiten kein Rahmen "preisgruppe" vorhanden ist.

Bei Zeitmessungen mit einem anderen Script habe ich festgestellt, dass es etwas bringt, wenn die Anzahl Elemente einer Variablen zugewiesen werden und dann dieser Wert in der Schleife als Zielwert benutzt wird.

Gruss, Hans


als Antwort auf: [#543836]

Seiten sortieren

jodi
Beiträge gesamt:

21. Okt 2015, 14:33
Beitrag # 15 von 17
Beitrag ID: #543852
Bewertung:
(12519 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hans, vielen Dank für deine Hilfe.

Ich bekomme leider folgende Fehlermeldung:

Fehler 45, ungültiges Objekt, Zeile 14

Habe ich was falsch gemacht?!


als Antwort auf: [#543837]
X

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
17.04.2024

Online
Mittwoch, 17. Apr. 2024, 10.00 - 10.30 Uhr

Webinar

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? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!