[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:
(9430 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: 5791

20. Mai 2014, 08:13
Beitrag # 2 von 17
Beitrag ID: #527494
Bewertung:
(9369 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:
(9320 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: 5791

20. Mai 2014, 17:16
Beitrag # 4 von 17
Beitrag ID: #527519
Bewertung:
(9285 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:
(9257 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:
(9215 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: 5791

20. Mai 2014, 21:27
Beitrag # 7 von 17
Beitrag ID: #527527
Bewertung:
(9196 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:
(9117 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: 5791

21. Mai 2014, 13:09
Beitrag # 9 von 17
Beitrag ID: #527566
Bewertung:
(9089 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:
(8963 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: 5791

1. Jun 2014, 19:42
Beitrag # 11 von 17
Beitrag ID: #528037
Bewertung:
(8941 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:
(8863 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:
(7600 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: 5791

20. Okt 2015, 19:57
Beitrag # 14 von 17
Beitrag ID: #543837
Bewertung:
(7557 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:
(7450 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

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
04.09.2020 - 05.03.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 04. Sept. 2020, 13.00 Uhr - Freitag, 05. März 2021, 12.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte. Mit dem Abschluss «Publisher Professional – Profil «Multimedia» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

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/publishing-lehrgaenge/lehrgang-publisher-professional-profil-multimedia

Veranstaltungen
22.09.2020 - 23.09.2020

Digicomp Academy AG, Basel, Bern oder virtuell
Dienstag, 22. Sept. 2020, 08.30 Uhr - Mittwoch, 23. Sept. 2020, 17.00 Uhr

Kurs

In diesem Basic-Kurs lernen Sie das Wichtigste über den Aufbau und die Funktionsweise von Photoshop. Zusammen mit den notwendigen Grundlagen von Farbenlehre bis Bildauflösung lernen Sie zudem die kreativen Möglichkeiten von Photoshop kennen.

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-photoshop-cc/kurs-adobe-photoshop-cc-basic

Neuste Foreneinträge


Wörter mit Bindestrichen werden nicht automatisch getrennt. Alternative?

Pfeil zurück geht nur im eingeloggten Zustand

Zeichen nach Absatzformat

Formularfelder mit Mediävalziffern

HP Designjet Z6100 - Papierzuschuss

Automatische Farbmengenberechnung

Lüftergeräusch nach Installation von Catalina update 10.15.6

QuarkXpress 8 Layouteigenschaften

InDesign - Bild in schräg gestellten Rahmen einfügen

Falsche Silbentrennungen
medienjobs