Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » zwei Seiten vertauschen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

21. Mai 2020, 08:20
Bewertung:

gelesen: 14914

Beitrag als Lesezeichen
Hallo zusammen,

ich würde gerne zwei ausgewählte Seiten per Script vertauschen: 12 -> 50 - 50 -> 14

Wie finde ich denn ganz allgemein heraus, wie ich in diesem Fall z. B. die Eigenschaft "Seitenzahl" einer selektierten Seite auslese?
Die Logik, die Seiten dann zu tauschen kriege ich, denke ich, dann schon hin.

Gruß
Jo

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

21. Mai 2020, 08:58
Bewertung:

gelesen: 14898

Beitrag als Lesezeichen
Moin Jo,

zuerst einmal, Du bist hier im falschen Forum gelandet, Dein Beitrag gehört in die Skriptwerkstatt.
Zitat Wie finde ich denn ganz allgemein heraus, wie ich in diesem Fall z. B. die Eigenschaft "Seitenzahl" einer selektierten Seite auslese?

Hier stellt sich sich die Frage, welche Seitenzahl möchtest Du?

Da gibt es Erstens die Eigenschaft "name", üblicherweise steht darin die Seitenzahl, aber als Anwender kannst Du den Inhalt frei bestimmen.

Und dann gibt es noch die Eigenschaft "documentOffset", hier findest Du den Index der Seite innerhalb des Documents.

Also:
page.name
oder
page.documentOffset.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

21. Mai 2020, 09:21
Bewertung:

gelesen: 14885

Beitrag als Lesezeichen
Guten Morgen Werner,

sorry, wenn ich im falschen Forum gelandet bin. (kann das ein Admin verschieben)

Und Danke für deine Erklärung.

Gruß
Jo

zwei Seiten vertauschen

Martin Fischer
  
Beiträge gesamt: 12783

21. Mai 2020, 09:31
Bewertung:

gelesen: 14879

Beitrag als Lesezeichen
Antwort auf: die Eigenschaft "Seitenzahl" einer selektierten Seite auslese?


Eigenschaften und Methoden zu Seiten/pages findest Du hier dokumentiert: Page

Eine (oder mehrere) Seite(n) in der Seitenpalette zu ermitteln geht nur auf einem indirekten Weg.
Uwe Laubender zeigt dies beeindruckend mit einer Einfärbenmethode in GetPages-SELECTED-IN-PAGES-PANEL-v2.0.jsx.

Viele Grüße
Martin


zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

21. Mai 2020, 09:47
Bewertung:

gelesen: 14859

Beitrag als Lesezeichen
Danke euch!

Also "einfach" die Nummer zweier selectierter Seiten auslesen
so in der Art
var seiteA = app.selection[0].page.number
var seiteB = app.selection[1].page.number

und dann mit move verschieben

geht also nicht?

zwei Seiten vertauschen

Gerald Singelmann
  
Beiträge gesamt: 6269

21. Mai 2020, 10:10
Bewertung:

gelesen: 14849

Beitrag als Lesezeichen
Das page Objekt hat sowohl eine documentOffset Eigenschaft als auch eine name Eigenschaft.

documentOffset gibt an, die wievielte Seite im Dokument das ist.
name gibt an, was in der Seitennummerierungsvariable steht.

HTH

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

21. Mai 2020, 10:18
Bewertung:

gelesen: 14844

Beitrag als Lesezeichen
Danke Gerald,

würdest du mir bitte noch einen Tipp geben, wie ich nun konkret die Nummer der ausgewählten Seite ermitteln kann?

Danke!

Gruß
Jo

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

21. Mai 2020, 10:58
Bewertung:

gelesen: 14833

Beitrag als Lesezeichen
Doch, move sollte schon funktionieren:

probiere mal das aus:
Code
var /*Page*/first = app.activeDocument.pages.itemByName("4"); 
var /*Page*/second = app.activeDocument.pages.itemByName("5");
exchangePages(/*Page*/first, /*Page*/second);

/*Boolean*/function exchangePages(/*Page*/first, /*Page*/second){
try{
var /*Page*/p = null;
if (first.documentOffset === 0)
p = app.activeDocument.pages.item(2);
else
p = app.activeDocument.pages.item(first.documentOffset+1);
first.move(LocationOptions.BEFORE,second);
second.move(LocationOptions.BEFORE,p);
}
catch (error){
alert(error.message);
}
}


Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

21. Mai 2020, 11:30
Bewertung:

gelesen: 14828

Beitrag als Lesezeichen
Danke dir! Das klappt gut.
Und statt die Nummern einzugeben, die Seiten per Maus in der Seitenübersicht auswählen, geht eben nicht so tivial, oder? Habe ich das richtig verstanden?

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

21. Mai 2020, 12:04
Bewertung:

gelesen: 14813

Beitrag als Lesezeichen
Zitat Und statt die Nummern einzugeben, die Seiten per Maus in der Seitenübersicht auswählen, geht eben nicht so tivial, oder? Habe ich das richtig verstanden?

Richtig, Du kannst zwar die aktuelle Seite auslesen, aber wenn Du mehrere Seiten auslesen willst, brauchst Du entweder eine EventHandler-Lösung, einen nicht modalen Dialog, oder für jede Selection ein Skript, das die Selektionen sammelt und ein zweites Skript das die Selektionen verarbeitet.

Machbar, aber ich finde das sprengt den Rahmen einer kostenlosen Skriptlösung.

Ich füge Deine Anforderung auf jeden Fall mal der ToDo-Liste meines ProjektHandlers hinzu:
WpsProjectHandler

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

22. Mai 2020, 08:14
Bewertung:

gelesen: 14727

Beitrag als Lesezeichen
Danke dir für deine Antwort.

Ich erkläre mein Problem mal kurz: evtl. gibt es ja noch eine andere Lösung. Ich setze jedes Jahr für meine Schule den Jahresbericht. Sehr oft muss ich Seiten vertauschen, z.B. 17 mit 23. Wenn das über die Auswahl per Maus zu kompliziert ist, könntest du mir evtl. noch einen kleinen Lösungsansatz geben, wie ich dein o.g. Skript so umbauen kann, dass ich die beiden Seiten über ein Dialogfenster eingeben kann?
(Ich programmiere sehr viel in Angular und anderen Sprachen, aber irgendwie finde ich keinen Zugang zu diesen Skripten)

Herzlichen Dank und Grüße
Jo

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

22. Mai 2020, 09:41
Bewertung:

gelesen: 14703

Beitrag als Lesezeichen
Moin Jo,

ich muss mit dem Klammerbeutel gepudert sein! :-)

Ich liefere normalerweise niemals solch anwenderunfreundlichen und nicht ausgetestete Skripte ab!

Das folgende Skript funktioniert so:

1. Start: Skript ist aktiv und efordert, dass Du die erste Seite anspringst und ein Element auf der Seite selektierst.
Danach springst Du die zweite Seite an und selektierst wieder ein Element.
Danach sollten die Seiten vertauscht sein.
Dies kannst du beliebig lange wiederholen.
Danach musst Du das Skript erneut starten.

Das alles machst Du bitte erst nachdem Du Dein Dokument gesichert hast und auf eigenes Risiko!!!!!!!!

Code
// AFTER_SELECTION_CHANGED 
// CC 2020;
#target indesign-15.064
// CS 6 not testet!!!!!
// #target indesign-8.0
#targetengine "mySelectionChangedSession"

if ((afterSelectionChanged === undefined) || (afterSelectionChanged == null)){
var afterSelectionChanged = new AfterSelectionChanged();
if (afterSelectionChanged != null)
alert("PageExchange is active");
}
else{
afterSelectionChanged.removeListener();
afterSelectionChanged = null;
alert("PageExchange is inactive");
}

/*Object*/function AfterSelectionChanged(){
var/*EventListener*/ afterSelectionChangedListener = app.activeDocument.eventListeners.add("afterSelectionChanged", listenerTest);

function listenerTest () {
var /*Page*/page = null;
if (!("pages" in this))
this.pages = [];
if (app.selection.length > 0)
page = wpsGetParentPageOfObjectIfPossible(app.selection[0]);
if (page != null){
this.pages.push(page);
if (this.pages.length > 1){
exchangePages(this.pages[0], this.pages[1]);
this.pages.length = 0;
}
app.selection = NothingEnum.NOTHING;
}
}
this.removeListener = function(){
if(afterSelectionChangedListener != null)
afterSelectionChangedListener.remove();
}
/*page*/function wpsGetParentPageOfObjectIfPossible(/*object*/o)
{
try
{
var /*String*/whatIsIt = null, /*Page*/parentPage = null;

if (o === undefined)
return null;
if (o === null)
return null;
if (!(o.isValid))
return null;

if ("parentPage" in o)
return o.parentPage;

parentPage = (("parentTextFrames" in o) && (o.parentTextFrames.length >0)) ? o.parentTextFrames[0].parentPage : null;

if (parentPage != null)
return parentPage;

while (o != null)
{
if ("parentPage" in o)
return o.parentPage;
var whatIsIt = o.constructor;
switch (whatIsIt) {
case Page : return o;
case Character : o = o.parentTextFrames[0]; break;
case Footnote :; // drop through
case Cell : o = o.insertionPoints[0].parentTextFrames[0]; break;
case Note : o = o.storyOffset.parentTextFrames[0]; break;
case XMLElement : if (o.insertionPoints[0] != null) { o = o.insertionPoints[0].parentTextFrames[0]; break; }
case Application : return null;
default: o = o.parent;
}
if (o == null) return null;
}
return o
}
catch (error)
{
alert(error.message + "\nin File: " + error.fileName + "\nZeile: " + error.line);
// throw error;
}
return null;
}
/*Boolean*/function exchangePages(/*Page*/first, /*Page*/second){
try{
var /*Page*/p = null;
if (first.documentOffset === 0)
p = app.activeDocument.pages.item(2);
else {
if ((first.documentOffset +1) === second.documentOffset){
second.move(LocationOptions.BEFORE,first);
}
else{
p = app.activeDocument.pages.item(first.documentOffset+1);
first.move(LocationOptions.BEFORE,second);
second.move(LocationOptions.BEFORE,p);
}
}
}
catch (error){
alert(error.message);
}
}
}


Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

22. Mai 2020, 10:00
Bewertung:

gelesen: 14696

Beitrag als Lesezeichen
Grundgütiger! Werner! VIELEN DANK!

Ich weiß gerade echt nicht, was ich sagen soll!? Bin echt baff!
Ich probiere es gleich mal aus!

Herzliche Grüße
Jo

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

22. Mai 2020, 11:51
Bewertung:

gelesen: 14676

Beitrag als Lesezeichen
So, ich melde mich mit etwas Verspätung. Ich musste mein Projekt erst auf den Mac umziehen, da ich auf meinem Windows-Rechner ID 2020 nicht installiert habe.
Das Skript ist total genial. Allerdings werden die Seiten nicht immer korrekt vertauscht. In erster Linie dann nicht, wenn zwischen den Seiten noch andere sind, was ja im Prinzip der Kern der Problematik ist. Für das Tauschen zweier benachbarter Seiten brauch man ja auch kein Skript. Und zum Teil bekomme ich die Meldung "Ungültiger Wert für Parameter "reference" der Methode "move". Page or Spread erwartet, aber nothing erhalten."

Ich gebe hier einfach eine Rückmeldung! Ich möchte das bitte in keinster Weise als Kritik oder so verstanden wissen! Ich bin immer noch voller Anerkennung und Respekt für das, was Werner hier gemacht hat. Nochmals vielen Dank dafür!

Beste Grüße aus Regensburg
Jo

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

22. Mai 2020, 12:21
Bewertung:

gelesen: 14668

Beitrag als Lesezeichen
Moin Jo,

Zitat So, ich melde mich mit etwas Verspätung. Ich musste mein Projekt erst auf den Mac umziehen, da ich auf meinem Windows-Rechner ID 2020 nicht installiert habe.

Ich glaube nicht, dass Du das musstest.
Sondern nur das machen:
Code
// AFTER_SELECTION_CHANGED  
// CC 2020;
// #target indesign-15.064
// CS 6 not testet!!!!!
#target indesign-8.0

Zitat Das Skript ist total genial.

Das kann nicht sein, wenn Du Probleme hast.
Zitat In erster Linie dann nicht, wenn zwischen den Seiten noch andere sind, was ja im Prinzip der Kern der Problematik ist.

Liefere mir bitte eine Datei, und beschreibe mir genau, was Du machst, wenn was nicht funktioniert.
Zitat Und zum Teil bekomme ich die Meldung "Ungültiger Wert für Parameter "reference" der Methode "move". Page or Spread erwartet, aber nothing erhalten."

s. o., ohne genaue Angaben hift selbst meine Kristallkugel nicht.
Zitat Ich gebe hier einfach eine Rückmeldung! Ich möchte das bitte in keinster Weise als Kritik oder so verstanden wissen! Ich bin immer noch voller Anerkennung und Respekt für das, was Werner hier gemacht hat.

Kritik und Rückmeldungen sind wichtig, davon lebt meine Arbeit, aber jetzt bist Du dran mit der Arbeit, aslo bitte Testdaten und eine genaue Fehlerbeschreibung.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

Uwe Laubender
Beiträge gesamt: 5316

22. Mai 2020, 13:04
Bewertung:

gelesen: 8317

Beitrag als Lesezeichen
Antwort auf: Danke euch!

Also "einfach" die Nummer zweier selectierter Seiten auslesen
so in der Art
var seiteA = app.selection[0].page.number
var seiteB = app.selection[1].page.number

und dann mit move verschieben

geht also nicht?


Hallo Jo,
Dein Code hier setzt voraus, dass die beiden Seiten mit dem Seitenwerkzeug ausgewählt sind. Eine Auswahl im Seiten-Bedienfeld wird nicht mit app.selection eingefangen.

Zudem kennt das Objekt Page keine Eigenschaft, die number heißt. Aber das wurde bereits diskutiert.

Zum Verständnis:

Über page.name bekommst Du einen String zurückgeliefert.
Über page.documentOffset eine Zahl. Die Zählung im Dokument beginnt mit der 0 für die erste Seite.

Benutzt Du die Eigenschaft name, dann ist der zurückgelieferte String möglicherweise nicht eindeutig. Es könnte sein, dass es im Dokument mehrere Seiten mit dem gleichen Namen gibt.

Also halte Dich besser an die Eigenschaft documentOffset, wenn Du eine Seite ermittelt hast; durch welches Verfahren auch immer.
*****
Mit herzlichem Gruß,
Uwe Laubender

zwei Seiten vertauschen

Uwe Laubender
Beiträge gesamt: 5316

22. Mai 2020, 13:59
Bewertung:

gelesen: 8306

Beitrag als Lesezeichen
Ahem. Nachdem ich nochmal auf den Code von Jo geschaut habe, muss ich mich verbessern:

Falls app.selection[0] tatsächlich das Objekt Page zurückgeben würde, wäre eine Seite mit dem Seitenwerkzeug ausgewählt

Da aber Jo app.selection[0].page geschrieben hatte, müsste in app.selection[0] das Dokument mit app.selection eingefangen worden sein. Das funktioniert so aber nicht.
*****
Mit herzlichem Gruß,
Uwe Laubender

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

22. Mai 2020, 14:01
Bewertung:

gelesen: 8305

Beitrag als Lesezeichen
So, ich habe getestet:
1. Die Meldung "Ungültiger Wert für Parameter "reference" der Methode "move". Page or Spread erwartet, aber nothing erhalten." kommt nur, wenn die letzte Seite im Dokument getauscht werden soll.
2. Die Fehler bei der Sortierung habe ich zusammen mit der Datei hier abgelegt: https://www.dropbox.com/...schen_Forum.zip?dl=0
(Ich kann hier leider keine Dateien hochladen.)

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

22. Mai 2020, 14:06
Bewertung:

gelesen: 8302

Beitrag als Lesezeichen
Hallo Jo,

damit kann ich etwas anfangen und melde mich.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

22. Mai 2020, 15:15
Bewertung:

gelesen: 8296

Beitrag als Lesezeichen
Also zweiter Versuch:
Code
// AFTER_SELECTION_CHANGED 
// CC 2020;
#target indesign-15.064
// CS 6 not testet!!!!!
// #target indesign-8.0
#targetengine "mySelectionChangedSession"

if ((afterSelectionChanged === undefined) || (afterSelectionChanged == null)){
var afterSelectionChanged = new AfterSelectionChanged();
if (afterSelectionChanged != null)
alert("PageExchange is active");
}
else{
afterSelectionChanged.removeListener();
afterSelectionChanged = null;
alert("PageExchange is inactive");
}

/*Object*/function AfterSelectionChanged(){
var/*EventListener*/ afterSelectionChangedListener = app.eventListeners.itemByName("PageExchange");

this.pages = [];

if (afterSelectionChangedListener != null)
afterSelectionChangedListener.remove();

afterSelectionChangedListener = app.eventListeners.add("afterSelectionChanged", listenerTest);
afterSelectionChangedListener.name = "PageExchange";

function listenerTest () {
if (app.selection.length > 0){
page = wpsGetParentPageOfObjectIfPossible(app.selection[0]);
if (page != null){
afterSelectionChanged.pages.push(page);
if (afterSelectionChanged.pages.length > 1){
exchangePages(afterSelectionChanged.pages);
}
app.selection = NothingEnum.NOTHING;
}
}
}
this.removeListener = function(){
if(afterSelectionChangedListener != null)
afterSelectionChangedListener.remove();
if ("pages" in this)
this.pages.length = 0;
}
/*page*/function wpsGetParentPageOfObjectIfPossible(/*object*/o)
{
try
{
var /*String*/whatIsIt = null, /*Page*/parentPage = null;

if (o === undefined)
return null;
if (o === null)
return null;
if (!(o.isValid))
return null;

if ("parentPage" in o)
return o.parentPage;

parentPage = (("parentTextFrames" in o) && (o.parentTextFrames.length >0)) ? o.parentTextFrames[0].parentPage : null;

if (parentPage != null)
return parentPage;

while (o != null)
{
if ("parentPage" in o)
return o.parentPage;
var whatIsIt = o.constructor;
switch (whatIsIt) {
case Page : return o;
case Character : o = o.parentTextFrames[0]; break;
case Footnote :; // drop through
case Cell : o = o.insertionPoints[0].parentTextFrames[0]; break;
case Note : o = o.storyOffset.parentTextFrames[0]; break;
case XMLElement : if (o.insertionPoints[0] != null) { o = o.insertionPoints[0].parentTextFrames[0]; break; }
case Application : return null;
default: o = o.parent;
}
if (o == null) return null;
}
return o
}
catch (error)
{
alert(error.message + "\nin File: " + error.fileName + "\nZeile: " + error.line);
// throw error;
}
return null;
}
/*Boolean*/function exchangePages(){
try{
var /*Page*/p = null, /*Page*/first = afterSelectionChanged.pages[0], /*Page*/second = afterSelectionChanged.pages[1];
if (first.documentOffset === 0)
p = app.activeDocument.pages[1];

if ((first.documentOffset +1) === second.documentOffset){
second.move(LocationOptions.BEFORE,first);
}
else{
p = app.activeDocument.pages[first.documentOffset-1];
first.move(LocationOptions.BEFORE,second);
second.move(LocationOptions.AFTER,p);
}
}
catch (error){
alert(error.message);
}
afterSelectionChanged.pages.length = 0;
}
}

Viel Erfolg!

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

22. Mai 2020, 16:25
Bewertung:

gelesen: 8265

Beitrag als Lesezeichen
Hallo Werner! Danke für deine Mühen!

Ich gebe mal einfach folgendes Feddback:
1. Tausch: 3 <-> 9 -> ALLES OK
2. Tausch: 9 <-> 3 -> 3 wieder bei 3, ABER 8 und 9 vertauscht

ABER: Wenn man jedoch das Skript nach Tausch 1 stoppt und erneut startet, klappt Tausch 2 auch ohne Probleme.

Ich kann damit absolut leben. Es ist ja so schon eine sehr große Erleichterung!

Herzlichen Dank und schöne Grüße
Jo

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

22. Mai 2020, 17:00
Bewertung:

gelesen: 8250

Beitrag als Lesezeichen
Hallo Jo,

Zitat Ich kann damit absolut leben.


Ich eigentlich nicht! :-)

Aber bei funktioniert es.

Das Problem dieses Skriptes besteht darin, dass, sobald es scharf ist, ein ziemlicher Blindflug abläuft, wenn man zum Beispiel 2x auf die gleiche Seite klickt, merkt man das nicht, aber der Speicher wird verworfen.

Auswahl, Auswahl merken, 2. Auswahl, merken, tauschen, gemerkte Auswahlen verwerfen.

Solche Situationen sorgen dafür, dass das Schreiben eines Skriptes oft nur einen kleinen Teil der Arbeitszeit ausmacht. Der Großteil der Zeit wird zu Testen der möglichen Randbedingungen benötigt, und oft reicht die Fantasie eines Einzelnen dafür nicht aus.

Uwe, Weltmeister des Testens, zu welchen Ergebnis kommst Du? :-)

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

Uwe Laubender
Beiträge gesamt: 5316

22. Mai 2020, 19:46
Bewertung:

gelesen: 8239

Beitrag als Lesezeichen
Ich wurde gerufen?
Komme im Moment noch zu keinem Ergebnis, da ich mich gerade um andere Dinge kümmern muss. Skandal! ;-)

Was das Auswählen von Seiten angeht, hier ein Tipp:

[1] Wechseln zum Seiten-Werkzeug.
[2] Auswahl der beiden zu tauschenden Seiten im Seiten-Bedienfeld:
Nicht zusammenhängende Seiten mit der Strg-Taste ( auf Windows ) und Klicken auf die Seitensymbole einfangen.


Dann kann ein Skript die beiden ausgewählten Seiten als:
Code
var page1 = app.documents[0].selection[0]; 

und
Code
var page2 = app.documents[0].selection[1]; 

abgreifen.
*****
Mit herzlichem Gruß,
Uwe Laubender

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

23. Mai 2020, 18:56
Bewertung:

gelesen: 8173

Beitrag als Lesezeichen
Moin Uwe,

Zitat Ich wurde gerufen?

Ja! :-)

Zitat Was das Auswählen von Seiten angeht, hier ein Tipp:

[1] Wechseln zum Seiten-Werkzeug.
[2] Auswahl der beiden zu tauschenden Seiten im Seiten-Bedienfeld:
Nicht zusammenhängende Seiten mit der Strg-Taste ( auf Windows ) und Klicken auf die Seitensymbole einfangen.


Die Auswahl der Seiten war bisher ja mein kleinstes Problem, größer, dass die richtigen zwei Seiten ausgewählt und dann die Seiten auch richtig platziert werden.

Bei meiner bisherigen Lösung funktioniert das ja so:
Der Anwender markiert ohne optische Rückmeldung zwei Seiten und dann vertauscht das Skript diese zwei Seiten automatisch.

Das erfordert bei der Anwendung eine hohe Konzentration und führt leicht zu Fehlselektionen mit entsprechend falschen Ergebnissen.

Aber durch die Programmierung und die Rückmeldungen von Jo wurde mein Ehrgeiz gepackt und ich arbeite an der für mich ultimativen Lösung.

Mein privates Pflichtenheft sieht jetzt so aus:

1. Während des ganzen Skriptlaufes muss es optische Rückmeldungen geben.
2. Die Selektion der Seiten soll der/die Anwender/in auf die für sie/ihn bequemste Art vornehmen können.
3. Es sollen beliebig viele Seitenpaare ausgewählt werden können.
4. Der eigentliche Tauschvorgang sollte manuell gestartet werden.
5. Das Ergebnis soll nachvollziehbar sein.
6. Das Skript sollte weitgehend fehlerresistent sein.

Sobald die neue Version fertig ist, werde ich sie zur Verfügung stellen.

Zurück zu Deinem Vorschlag zur Auswahl, der zeigt, wie man eine Reihe von Seiten in der Zwischenablage sammeln kann. Das ist schon mal sehr gut!

Aber bei einer wirklich großen Anzahl von ausgewählten Seiten wird es dann wieder schwierig mit der optischen Rückmeldung.

Aber Dein Vorschlag beinhaltet für mich die perfekte Lösung:

Während ein einfaches Anklicken einer Seite kein afterSelectionChanged auslöst, wird nach Anwahl des Seitenwerkzeuges mit jedem Klick ein Event ausgelöst.

Das ist perfekt!

Ach ja, ein erster Ausblick auf meine neue Skriptversion:

WpsExchangePages

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

23. Mai 2020, 20:16
Bewertung:

gelesen: 8158

Beitrag als Lesezeichen
Hallo zusammen, hallo Werner!

Ich wollte durch meinen Post hier nichts lostreten. Da ich ja, wie bereits erwähnt, selber sehr viele programmiere, kann ich absolut verstehen, dass man in Sachen Usability und Errorhandling immer hohe Ansprüche hat.
Ich bin total gespannt auf dein Skript. Wenn ich zumindest, durchs Testen, einen bescheidenen Teil zu deiner Arbeit beitragen kann - gerne!

Herzliche Grüße

Jo

zwei Seiten vertauschen

WernerPerplies
Beiträge gesamt: 2762

24. Mai 2020, 12:16
Bewertung:

gelesen: 8106

Beitrag als Lesezeichen
Moin Jo,

so Augen zu und durch, ich habe jetzt Folgendes realisiert:

1. Nach Skriptstart erscheint ein nicht modales Dialogfenster, das während der Arbeit offen bleiben kann.

2. Es können ein oder mehrere Seitenpaare ausgewählt werden.

3. Die Seitenauswahl kann sowohl direkt in einem Eingabefeld, oder durch Klick auf auszuwählende Seiten vorgenommen werden.
Das Eingabefeld erfordert ein bestimmtes Eingabeformat, deshalb sollte zuerst ein Paar durch Selektion erzeugt werden.

Bis jetzt gefällt mir die Sache ganz gut, aber es gibt noch Schwächen, z. B. ist kein Tausch über unterschiedliche Dokument möglich.
die Meldungen müssten zur besseren AnpassbarKeit in ein eigenes Objekt ausgelagert werden.
Das Protokoll sollte in eine externe Datei exportiert werden können.

Und Euch wird da sicherlich noch einiges weitere einfallen. ;-)

Besonderheiten des Skriptes:

1. Das eigentliche Skript steckt in einem Objekt, welches sowohl private als auch öffentliche Methoden kennt.

2. Die Überwachung der Selektionen wird über einen EventHandler realisiert (AfterSelectionChanged).

3. Das Skriptfenster wird über die private Methode createNoneModalDialog erzeugt.

4. Der eigentliche Tauschvorgang steckt in der privaten Methode exChangeOnePair und erfordert eine Sonderbehandlung, wenn im Seitenpaar die erste oder letzte Seite des Dokuments enthalten ist.

So, ich denke, das ist erstmal genug Stoff.

Da das Skript inzwischen recht groß geworden ist, gibt es es nur über diesen Link:
WpsPageExchange – Skript zum Tausch von Seiten in Adobe InDesign
Dieser Link enthält ein kleines Video (mein zweites überhaupt!) und einen Link zu meinem Supportforum.

Ich hoffe, das Skript gefällt.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

zwei Seiten vertauschen

photojo
Beiträge gesamt: 38

29. Mai 2020, 10:09
Bewertung:

gelesen: 7726

Beitrag als Lesezeichen
Hallo Uwe,

sorry für die verspätete Rückmeldung, ich habs irgendwie übersehen.
Danke für deinen Tipp!

Grüße
Jo