[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Reihenfolge von allPageItems beeinflussen (CS6, WIN)

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

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

cwenet
Beiträge gesamt: 1139

4. Okt 2013, 15:58
Beitrag # 1 von 11
Bewertung:
(2523 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

mit folgendem Script möchte ich aus einer ausgewählten Gruppe (duplicate_vorher.idml) alle
Texte sammeln und in einem neuen Textframe in gewünschter Reihenfolge platzieren.
Jeder Absatz ist jeweils mit einem eindeutigen Absatzformat formatiert.
Wie kann ich die Reihenfolge selber bestimmen? So soll es aussehen: siehe bitte duplicate_nachher.idml -> Seite 2


Code
var myDoc = app.activeDocument; 
var allFrames = app.selection[0].allPageItems;
var myPage = myDoc.pages.add();
var myTextFrame = myPage.textFrames.add();
myTextFrame.geometricBounds = [0, 0, 200, 200];


for (var f=0; f<allFrames.length; f++) {

try {
var myText = allFrames[f].parentStory;
myText.duplicate(LocationOptions.AFTER,myTextFrame.insertionPoints[-1]) ;
myTextFrame.insertionPoints[-1].contents = '\r';
}
catch (myError){}
}



Über Hilfe freue ich mich.
Gruss
Christoph

(Dieser Beitrag wurde von cwenet am 4. Okt 2013, 16:03 geändert)

Anhang:
duplicate_nacher.idml (34.1 KB)   duplicate_vorher.idml (30.5 KB)
X

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

Uwe Laubender
Beiträge gesamt: 5316

4. Okt 2013, 16:11
Beitrag # 2 von 11
Beitrag ID: #518068
Bewertung:
(2516 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Christoph!

Den Index, also die Reihenfolge der ausgewählten Elemente kannst Du ab CS5.5 durch die Klickreihenfolge der angewählten Elemente bestimmen. Also beim Einsammeln der Elemente durch Hochstelltaste + Mausklick.


als Antwort auf: [#518065]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

cwenet
Beiträge gesamt: 1139

4. Okt 2013, 16:24
Beitrag # 3 von 11
Beitrag ID: #518069
Bewertung:
(2508 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Uwe,

danke für Deine Antwort. Ich habe es, glaube ich, nicht verstanden.
Durch das Einsammeln per Maus und Klick soll die Reihenfolge in der Gruppe geändert werden?

Die Gruppe ist aber bereits fertig. Wie kann ich die Reihenfolge per Script ändern?
Bzw., wie kann ich die Reihenfolge bei der Ausgabe im neuen Frame bestimmen?

Grüße
Christoph


als Antwort auf: [#518068]
(Dieser Beitrag wurde von cwenet am 4. Okt 2013, 16:25 geändert)

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

Gerald Singelmann
  
Beiträge gesamt: 6269

4. Okt 2013, 19:35
Beitrag # 4 von 11
Beitrag ID: #518083
Bewertung:
(2459 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wenn ich nichts übersehen habe, sind die beiden idml vollkommen identisch.

Ein Script, das nichts am Dokument ändert, könnte so aussehen:

Code
#target indesign 
main();

function main() {
}


;)

Andernfalls würde ein Hinweis helfen, was denn am zweiten idml anders ist als im ersten.


als Antwort auf: [#518065]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

cwenet
Beiträge gesamt: 1139

4. Okt 2013, 19:42
Beitrag # 5 von 11
Beitrag ID: #518084
Bewertung:
(2447 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Gerald Singelmann,

das Ergebnis befindet sich auf Seite 2 im Dokument duplicate_nachher.idml.

Gruss Christoph


als Antwort auf: [#518083]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

Gerald Singelmann
  
Beiträge gesamt: 6269

4. Okt 2013, 21:05
Beitrag # 6 von 11
Beitrag ID: #518086
Bewertung:
(2425 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Aaaahhhh,

na dann kann man auch mein Script-Fragment mit Leben füllen.

Diese Routine geht von einer markierten Gruppe mit Textrahmen aus und implementiert dann in etwa die Reihenfolge, in der Überschriften in nicht verketteten Textrahmen ins IHV übernommen werden: erst von links nach rechts (weiter links kommt zuerst, inklusive kleiner Toleranz (= "diff")) und dann von oben nach unten.

Der Trick ist, dass man seine eigene Sortierroutine für die Standard-Funktion Array.sort() schreiben kann.

Das Fragment sollte leicht an eigene Bedürfnisse anpassbar sein.

Code
#target indesign 
var diff = 5;
if (app.selection.length > 0)
main();

function main() {
var sel = app.selection[0];
var items = sel.allPageItems;
items.sort( my_item_sort );
for (var n = 0; n < items.length; n++) {
if (items[n].constructor.name == "TextFrame" ) {
$.writeln( items[n].contents );
}
}

function my_item_sort( a, b ) {
var agb = a.geometricBounds;
var bgb = b.geometricBounds;
var at = agb[0];
var al = agb[1];
var bt = bgb[0];
var bl = bgb[1];

if ( al < ( bl - diff) ) {
return -1;
} else if ( bl < ( al - diff ) ) {
return 1;
} else {
if ( at < bt ) {
return -1;
} else if ( bt < at ) {
return 1;
} else {
return 0;
}
}
}
}



als Antwort auf: [#518084]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

cwenet
Beiträge gesamt: 1139

5. Okt 2013, 07:48
Beitrag # 7 von 11
Beitrag ID: #518087
Bewertung:
(2374 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Merci viel mal, Gerald,

es klappt primstens.

Hier meine angepasste Variante des Hauptscripts:

Code
#target indesign  
var diff = 5;

if (app.selection.length > 0)
main();

function main() {
var sel = app.selection[0];
var items = sel.allPageItems;
items.sort( my_item_sort );

var myDoc = app.activeDocument;
var myPage = myDoc.pages.add();
var myTextFrame = myPage.textFrames.add();
myTextFrame.geometricBounds = [0, 0, 200, 200];

for (var n = 0; n < items.length; n++) {
if (items[n].constructor.name == "TextFrame" ) {
var myText = items[n].parentStory;
myText.duplicate(LocationOptions.AFTER, myTextFrame.insertionPoints[-1]) ;
myTextFrame.insertionPoints[-1].contents = '\r';
}
}


Schönes Wochenende
Christoph


als Antwort auf: [#518086]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

Uwe Laubender
Beiträge gesamt: 5316

5. Okt 2013, 08:38
Beitrag # 8 von 11
Beitrag ID: #518089
Bewertung:
(2362 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ cwenet ] Durch das Einsammeln per Maus und Klick soll die Reihenfolge in der Gruppe geändert werden?


Ähem. Natürlich nicht. Der Index der Auswahl ist natürlich gemeint.
Der lässt sich verändern.

Gerald hat ja mittlerweile eine Lösung gepostet…


als Antwort auf: [#518069]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

cwenet
Beiträge gesamt: 1139

5. Okt 2013, 10:08
Beitrag # 9 von 11
Beitrag ID: #518091
Bewertung:
(2342 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Uwe,

für Deine Antwort.

Schönen Tag
Christoph


als Antwort auf: [#518089]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

Gerald Singelmann
  
Beiträge gesamt: 6269

5. Okt 2013, 11:02
Beitrag # 10 von 11
Beitrag ID: #518095
Bewertung: ||
(2326 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@Christoph,

Wenn in der Gruppe verkettete Textrahmen sind, bekommt man deren Inhalt doppelt.

Code
#target indesign 
var diff = 5;

if (app.selection.length > 0) main();

function main() {
var sel = app.selection[0];
var items = sel.allPageItems;
items.sort(my_item_sort);

var myDoc = app.activeDocument;
var myPage = myDoc.pages.add();
var myTextFrame = myPage.textFrames.add();
myTextFrame.geometricBounds = [0, 0, 200, 200];

var story_ids = "#";
for (var n = 0; n < items.length; n++) {
if (items[n].constructor.name == "TextFrame") {
var myText = items[n].parentStory;
var my_story_id = myText.id;
if (story_ids.search( "#" + my_story_id + "#" ) == -1 ) {
story_ids = story_ids + my_story_id + "#";

myText.duplicate(LocationOptions.AFTER, myTextFrame.insertionPoints[-1]);
myTextFrame.insertionPoints[-1].contents = '\r';
}
}
}
function my_item_sort( a, b ) {
var agb = a.geometricBounds;
var bgb = b.geometricBounds;
var at = agb[0];
var al = agb[1];
var bt = bgb[0];
var bl = bgb[1];

if ( al < ( bl - diff) ) {
return -1;
} else if ( bl < ( al - diff ) ) {
return 1;
} else {
if ( at < bt ) {
return -1;
} else if ( bt < at ) {
return 1;
} else {
return 0;
}
}
}
}



als Antwort auf: [#518087]

Reihenfolge von allPageItems beeinflussen (CS6, WIN)

cwenet
Beiträge gesamt: 1139

5. Okt 2013, 11:30
Beitrag # 11 von 11
Beitrag ID: #518100
Bewertung:
(2315 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oh. Vielen Dank Gerald für das Update.

Schöne Grüße
Christoph


als Antwort auf: [#518095]
X