Hallo Sherlock,
es brennt mir schon länger auf den Nägeln, für diesen Zweck ein Skript zu erstellen. Jetzt ist die Gelegenheit gekommen.
Hier ein erster Versuch, den Satzspiegel anhand von ausgewählten Objekten zu definieren.
Code /* NAME: adjustMargins2selPageItems.jsx VERSION: 0.1 AUTHOR: Martin Fischer DATE: 21.12.2011 //DESCRIPTION:Passt die Ränder der Seiten von ausgewählten Seitenobjekten an die Kanten dieser Seitenobjekte an. */ main(); function main() { if ( app.selection.length > 0 ) { var restoreViewPrefs = setupViewPrefs(); for (var i = 0; i < app.selection.length; i++) if (app.selection[i].hasOwnProperty( 'geometricBounds' ) ) adjust_margins(app.selection[i], app.activeDocument, restoreViewPrefs); restoreViewPrefs(); } } // ------------------------------------------- // Ränder anpassen // ------------------------------------------- function adjust_margins(cur_sel, doc, restoreViewPrefs) { var gb = cur_sel.geometricBounds; var ph = _round( doc.documentPreferences.pageHeight, 100); var pw = _round( doc.documentPreferences.pageWidth, 100); var cur_page = findPage(cur_sel); if (cur_page != null) { if (gb[0] >= 0 && gb[1] >= 0 && gb[2] <= ph && gb[3] <= pw) { cur_page.marginPreferences.top = gb[0]; cur_page.marginPreferences.bottom = ph - gb[2]; if (doc.documentPreferences.facingPages == true && cur_page.side == PageSideOptions.LEFT_HAND) { cur_page.marginPreferences.right = gb[1]; cur_page.marginPreferences.left = pw - gb[3]; } else { cur_page.marginPreferences.left = gb[1]; cur_page.marginPreferences.right = pw - gb[3]; } } else { restoreViewPrefs(); alert('Achtung!\rKoordinaten des ausgewählten Objekts überprüfen.\rDas Objekt muß innerhalb der Seite liegen.'); } //if (gb[0] >= 0 && gb[1] >= 0 && gb[2] <= ph && gb[3] <= pw) } else { restoreViewPrefs(); alert('Seite konnte nicht ermittelt werden.'); } //if (cur_page != null) } // ------------------------------------------- // Runden // ------------------------------------------- function _round (val, fac) { return Math.round(val * fac)/fac; } // ------------------------------------------- // Seite ermitteln // ------------------------------------------- // Gregor Fellenz // 27.7.2010 // http://forums.adobe.com/message/3003131#3003131 function findPage(theObj) { if (theObj.hasOwnProperty("baseline")) { theObj = theObj.parentTextFrames[0]; } while (theObj != null) { if (theObj.hasOwnProperty ("parentPage")) return theObj.parentPage; var whatIsIt = theObj.constructor; switch (whatIsIt) { case Page : return theObj; case Character : theObj = theObj.parentTextFrames[0]; break; case Footnote :; // drop through case Cell : theObj = theObj.insertionPoints[0].parentTextFrames[0]; break; case Note : theObj = theObj.storyOffset.parentTextFrames[0]; break; case XMLElement : if (theObj.insertionPoints[0] != null) { theObj = theObj.insertionPoints[0].parentTextFrames[0]; break; } case Application : return null; default: theObj = theObj.parent; } if (theObj == null) return null; } return theObj } // end findPage // -------------------------------------------------------------------- // Ansichtsvorgaben sichern & wiederherstellen // -------------------------------------------------------------------- // Dirk Becker // http://www.hilfdirselbst.ch/foren/Ma%DFsystem_tempor%E4r_umstellen_%28WIN_CS4%29_P424011.html#424011 function setupViewPrefs() { var doc = app.activeDocument; with ( doc ) { var vp = viewPreferences.properties; var zp = zeroPoint; var mm = MeasurementUnits.MILLIMETERS; viewPreferences.properties = { horizontalMeasurementUnits: mm, verticalMeasurementUnits: mm, rulerOrigin: RulerOrigin.pageOrigin }; zeroPoint = [0,0]; } return function ( ) { with ( doc ) { viewPreferences.properties = vp; zeroPoint = zp; } } } Voraussetzung Es ist mindestens ein Seitenobjekt (Textrahmen, Rechteck ...) ausgewählt, das komplett auf einer Seite liegt, d.h. das nicht über die Seitengrenzen hinausragt.
Was macht das Skript? Das Skript passt die Ränder der Seite, auf der das ausgewählte Objekt liegt, an dessen Konturen an.
Liegt das ausgewählte Objekt auf einer Layoutseite, dann werden nur die Ränder dieser Seite angepasst.
Liegt das ausgewählte Objekt auf einer Musterseite, dann werden die Ränder dieser Musterseite und alle Seiten, die auf dieser Musterseite basieren, angepasst.
Sind auf einer Seite mehrere Objekte ausgewählt, dann sind die Ränder am Ende an das 'letzte' Objekt (höchster Index) angepasst.
Um den Satzspiegel einer Doppelseite einzurichten, empfiehlt es sich, zunächst auf einer Seite ein Seitenobjekt (Textrahmen, Rechteck ...) einzurichten, dieses dann auf die gegenüberliegende Seite zu kopieren und anschließend beide Objekte auszuwählen, bevor das Skript ausgeführt wird.
Anschließend können die Seitenobjekte, die als Vorlage für den Satzspiegel dienten, gelöscht werden.
Im Skript habe ich versucht, verschiedene Bedingungen zu berücksichtigen und ggf. Fehler abzufangen. Es ist möglich, dass ich dabei noch verschiedene Umstände übersehen habe. Deswegen freue ich mich über jede Fehlermeldung.