Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Script: Seitenhöhe anpassen

Script: Seitenhöhe anpassen

buehda
Beiträge gesamt: 59

24. Jan 2016, 12:21
Bewertung:

gelesen: 2413

Beitrag als Lesezeichen
Hallo zusammen

Ich möchte ein Script schreiben:
Die Höhe der aktuellen Seite soll so angepasst werden, dass sie den unteren Rand des untersten Objekts berührt. Die Höhenveränderung der Seite muss oben links als Nullpunkt haben.

Die Linealeinheit des Dokuments ist übrigens Pixel, falls das eine Rolle spielt.
Ich bin kein Programmierer, und habe mithilfe von anderen Scripts etwas gebastelt, ohne gutes Ergebnis:

Code
function naive_getDims(/*PageItem*/obj, /*bool*/visible) 
// return the [width,height] of <obj>
// according to its (geometric|visible)Bounds
{
var boundsProperty = ((visible)?'visible':'geometric')+'Bounds';
var b = obj[boundsProperty];
return [ b[2] ];
}

myDoc = app.documents[0];
app.select(app.activeWindow.activePage.allPageItems);
var pItem = app.selection[0]; // get the selected object
myDoc.documentPreferences.pageHeight = pItem.geometricBounds[2];



Fehler:
1. als Referenz wird immer das erste Objekt im Dokument genommen
2. pageHeight Veränderung passiert immer vom Dokumentmittelpunkt aus
3. Die Objekte werden mitskaliert


Toll wäre, wenn beim Start des Scripts ein Dialogfenster kommt, wo ich noch einen zusätzlichen Abstand eintippen kann. Wenn ich «20» eintippe, müsste das Script zur errechneten neuen Seitenhöhe einfach noch 20 dazurechnen.
Als Text könnte in der Dialogbox stehen: «Abstand unten:»


Wahrscheinlich wäre das ganze viel einfacher, oder nicht? Kann mir jemand auf die Sprünge helfen?

Vielen Dank & Gruss
buehda

Script: Seitenhöhe anpassen

Uwe Laubender
Beiträge gesamt: 5003

24. Jan 2016, 15:21
Bewertung:

gelesen: 2376

Beitrag als Lesezeichen
Hallo buehda,
das ist eine Frage, die mehr in die Skriptwerkstatt passt.

Man könnte folgendes machen:

1. Ein Duplikat aller PageItems der Seite.
2. Eine Gruppe mit den Duplikaten bilden.
3. Die Abmessungen auslesen.
4. Die Seitengröße mit reframe() ändern.
5. Die Gruppe löschen.

Zu beachten wäre:

1. reframe() funktioniert ausschließlich mit der Maßeinheit Points
2. besonderes Augenmerk sollte auf die Position des Nullpunkts gelegt werden

Da nur die Höhe der Seite geändert werden soll, könnte das ohne größere Probleme auch in Doppelseiten-Dokumenten funktionieren.

Was soll mit verankerten Rahmen geschehen? Sollen die auch beachtet werden?
Gedrehte Rahmen könnten eine Herausforderung sein.

Eine Frage zum Schluß:
Was ist der Sinn der Übung?
*****
Mit herzlichem Gruß,
Uwe Laubender

Script: Seitenhöhe anpassen

Uwe Laubender
Beiträge gesamt: 5003

24. Jan 2016, 17:29
Bewertung:

gelesen: 2332

Beitrag als Lesezeichen
Antwort auf [ buehda ] Fehler:
1. als Referenz wird immer das erste Objekt im Dokument genommen
2. pageHeight Veränderung passiert immer vom Dokumentmittelpunkt aus
3. Die Objekte werden mitskaliert


Die Beantwortung Deiner Fragen:
zu 1.: Das erste Objekt (nach Index des allPageItems-Array) der aktiven Seite wird genommen. Denn das wird von Dir per Index 0 referenziert.

zu 2.: Du meinst den Mittelpunkt des "Spreads". Und daran kannst Du auch nichts ändern, wenn Du die pageHeight der documentPreferences änderst. Deshalb mein Vorschlag die Seitenhöhe der individuellen Seite(n) mit der Methode reframe() zu ändern.

zu 3.: Die Objekte werden skaliert ?
Wirklich skaliert ?

Dann hast Du möglicherweise:
über die Palette "Liquid Layout" und die Musterseiten die "Liquid-Seiten-Regel" auf "Skalieren" stehen. Für die Normalseiten dann "Gesteuert durch Musterseite" (oder eine ähnliche Einstellung über "Liquid Layout", die zum Skalieren der Seiteninhalte führt).

Überprüfe mal die Einstellungen der Seiten mithilfe des "Seiten"-Werkzeugs und der Palette "Liquid Layout". Vielleicht hast Du ja auch die "Layoutanpassung" aktiviert. Gelbes Warndreieck in der Palette "Liquid Layout".
*****
Mit herzlichem Gruß,
Uwe Laubender

Script: Seitenhöhe anpassen

buehda
Beiträge gesamt: 59

25. Jan 2016, 21:31
Bewertung:

gelesen: 2177

Beitrag als Lesezeichen
Hallo Uwe

Vielen Dank für deine Antworten.


Zitat zu 1.: Das erste Objekt (nach Index des allPageItems-Array) der aktiven Seite wird genommen. Denn das wird von Dir per Index 0 referenziert.

Ok, andere Lösung.

Zitat zu 2.: Du meinst den Mittelpunkt des "Spreads". Und daran kannst Du auch nichts ändern, wenn Du die pageHeight der documentPreferences änderst. Deshalb mein Vorschlag die Seitenhöhe der individuellen Seite(n) mit der Methode reframe() zu ändern.

Gut, ich versuchs mit reframe().


Zitat Man könnte folgendes machen:

1. Ein Duplikat aller PageItems der Seite.
2. Eine Gruppe mit den Duplikaten bilden.
3. Die Abmessungen auslesen.
4. Die Seitengröße mit reframe() ändern.
5. Die Gruppe löschen.


1. & 2. hat geklappt
Code
myDoc = app.documents[0]; 
app.select(app.activeWindow.activePage.allPageItems);
var myRectangle = app.selection[0];
var myDuplicate = myRectangle.duplicate();


3. und 4. geht irgendwie nicht:
Code
var myBottomRight = myDuplicate.resolve(AnchorPoint.BOTTOM_RIGHT_ANCHOR, CoordinateSpaces.INNER_COORDINATES)[0]; 

var myPage = app.activeWindow.activePage;
var myBounds = myPage.bounds;
var myY1 = myBounds[0];
var myX1 = myBounds[1];
var myX2 = myBounds[3];
myPage.reframe(CoordinateSpaces.INNER_COORDINATES, [[myX1, myY1], [myX2, myBottomRight]]);


Fehlermeldung: Ungültiger Wert für Parameter "opposingCorners" der Methode "reframe". Array of 2 Arrays of 2 Reals erwartet, aber ((0, 0), ……

Ihr merkt, ich hab keinen blassen Schimmer von Javascript;-)
Falls mir jemand weiterhelfen mag, danke!!

Gruss buehda