Auf Kommentar antworten

Objekte bestimmter Ebenen bewegen

Dieser Beitrag ist eigentlich nur ein halbgegorener Gesprächsbeitrag zu diese Diskussion auf HDS, und das hier gezeigte Skript ist nicht mehr als ein proof-of-concept. Dieser Beitrag wird in ein paar Wochen also auch wieder verschwinden. Vielleicht mag der eine oder andere Skripter sich der Aufgabe annehmen, das in ein brauchbares Produkt weiterzuentwickeln.

Dieser Beitrag ist eigentlich nur ein halbgegorener Gesprächsbeitrag zu diese Diskussion auf HDS, und das hier gezeigte Skript ist nicht mehr als ein proof-of-concept. Dieser Beitrag wird in ein paar Wochen also auch wieder verschwinden. Vielleicht mag der eine oder andere Skripter sich der Aufgabe annehmen, das in ein brauchbares Produkt weiterzuentwickeln.

Das Skript ist das Experiment zu diesem Vorschlag in der Diskussion, man könne ja erst alle Seiten in das andere Dokument kopieren und dann die Objekte nach vorn schieben.

Das Problem aus Skriptsicht ist, dass man per Skript nur einzelne Seiten duplizieren kann, aber nicht alle Seiten mit einem mal. Das heißt: nur wenn ich mit der Hand die Seiten verschiebe, bleiben die Textverkettungen erhalten. Jedenfalls ist das mein derzeitiger Wissenstand.

Das Vorgehen wäre also folgendes:

Wahrscheinlich sollte man im Zieldokument diese Option ausschalten, damit beim Seitenkopieren keine Überraschungen passieren. Mein folgendes Beispiel würde bei angeschalteter Option aus einer linken eine rechte Seite machen.

Dann markiert man in der Seitenpalette des Quelldokuments (rechts) alle Seiten und zieht sie ins Zieldokument. Man wird gefragt, wo die Seiten eingefügt werden sollen. Antwort: nach der letzten Seite.

Das Zieldokument sieht jetzt so aus. Dies ist der Moment, in dem das Skript gestartet wird. Das Quelldokument rechts muss offen bleiben! Es verschiebt alle Objekte um soviele Druckbögen nach vorn, wie im rechten Dokument Druckbögen vorhanden sind. Dann werden die letzten wieviele-rechts-vorhanden-sind Druckbögen gelöscht. Wenn im linken Dokument vorher nicht genug Seiten angelegt waren, werden hinterher Objekte fehlen.

Also angenommen, ich habe DokA mit 3 Seiten und DokB mit 5 Seiten, und ich habe die Seiten von DokB nach DokA geschoben:
Dann sieht das Script anhand des hinten noch offenen DokB, dass 5 Seiten zu verschieben sind. Es wird vorausgesetzt, dass es die letzten 5 Seiten sind.
Seite 4 landet auf Seite 1.
Seite 5 auf Seite 2.
Seite 6 auf Seite 3.
Seite 7 auf Seite 4.
Seite 8 auf Seite 5.
Danach werden Seite 4-8 gelöscht.

Nach dem Skript siehts dann so aus.

Derzeit ist es festverdrahtet, dass die Ebene "text" bewegt wird. Das Skript müsste also noch weitergeschrieben werden, dass die Ebene abgefragt wird und dass diverse Sicherheitsabfragen passieren und dass eine Anleitung kommt, ob man wirklich alles vorbereitet hat und so weiter.

  1. // moveLayerForward.jsx
  2.  
  3. // ©CuppaScripts 19.4.2009
  4. //DESCRIPTION: Nachdem man die Seiten von Dokument B in Dokument A manuell eingefügt hat, bewegt dieses Script alle Objekte der Ebene "text" um entsprechend viele Seiten nach vorn
  5.  
  6. // Fragment als proof of concept
  7. //
  8.  
  9. main();
  10.  
  11. function main() {
  12.         var docA = app.documents[0];
  13.         var docB = app.documents[1];
  14.         var nSpreadsB = docB.spreads.length;
  15.         var nSpreadsA = docA.spreads.length;
  16.         var nA2 = nSpreadsA - nSpreadsB;
  17.         var bLayer = docA.layers.item("text");
  18.         for (var n = nA2; n < nSpreadsA; n++) {
  19.                 for(var m = docA.spreads[n].pageItems.length-1; m >= 0; m=m-1)
  20.                         if (docA.spreads[n].pageItems[m].itemLayer == bLayer)
  21.                                 docA.spreads[n].pageItems[m].move(docA.spreads[n - nA2]);              
  22.         }
  23.         for (var n = nSpreadsA-1; n >= nA2; n=n-1)
  24.                 docA.spreads[n].remove();
  25. }

Antworten

Aktualisieren Type the characters you see in this picture. Type the characters you see in the picture; if you can't read them, submit the form and a new image will be generated. Not case sensitive.  Switch to audio verification.