hilfdirselbst.ch
Facebook Twitter gamper-media
cwenet S
Beiträge: 855
4. Okt 2013, 15:58
Beitrag #1 von 11
Bewertung:
(2158 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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)
Top

Anhang:
 
X
Uwe Laubender S
Beiträge: 3991
4. Okt 2013, 16:11
Beitrag #2 von 11
Beitrag ID: #518068
Bewertung:
(2151 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#518065] Top
 
cwenet S
Beiträge: 855
4. Okt 2013, 16:24
Beitrag #3 von 11
Beitrag ID: #518069
Bewertung:
(2143 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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)
Top
 
Gerald Singelmann  M  p
Beiträge: 6178
4. Okt 2013, 19:35
Beitrag #4 von 11
Beitrag ID: #518083
Bewertung:
(2094 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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.

--------------------------

InDesign-Wissen und Automatisierung nicht nur rund um die Suite.

http://www.cuppascript.com
als Antwort auf: [#518065] Top
 
cwenet S
Beiträge: 855
4. Okt 2013, 19:42
Beitrag #5 von 11
Beitrag ID: #518084
Bewertung:
(2082 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


Lieber Gerald Singelmann,

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

Gruss Christoph
als Antwort auf: [#518083] Top
 
Gerald Singelmann  M  p
Beiträge: 6178
4. Okt 2013, 21:05
Beitrag #6 von 11
Beitrag ID: #518086
Bewertung:
(2060 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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;
}
}
}
}


--------------------------

InDesign-Wissen und Automatisierung nicht nur rund um die Suite.

http://www.cuppascript.com
als Antwort auf: [#518084] Top
 
cwenet S
Beiträge: 855
5. Okt 2013, 07:48
Beitrag #7 von 11
Beitrag ID: #518087
Bewertung:
(2009 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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] Top
 
Uwe Laubender S
Beiträge: 3991
5. Okt 2013, 08:38
Beitrag #8 von 11
Beitrag ID: #518089
Bewertung:
(1997 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


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…
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#518069] Top
 
cwenet S
Beiträge: 855
5. Okt 2013, 10:08
Beitrag #9 von 11
Beitrag ID: #518091
Bewertung:
(1977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


Vielen Dank Uwe,

für Deine Antwort.

Schönen Tag
Christoph
als Antwort auf: [#518089] Top
 
Gerald Singelmann  M  p
Beiträge: 6178
5. Okt 2013, 11:02
Beitrag #10 von 11
Beitrag ID: #518095
Bewertung: ||
(1961 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


@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;
}
}
}
}


--------------------------

InDesign-Wissen und Automatisierung nicht nur rund um die Suite.

http://www.cuppascript.com
als Antwort auf: [#518087] Top
 
cwenet S
Beiträge: 855
5. Okt 2013, 11:30
Beitrag #11 von 11
Beitrag ID: #518100
Bewertung:
(1950 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Reihenfolge von allPageItems beeinflussen (CS6, WIN)


Oh. Vielen Dank Gerald für das Update.

Schöne Grüße
Christoph
als Antwort auf: [#518095] Top
 
X