Hallo Elli,
> Wenn ich den ID-Befehl "Objekt lösen" auf ein Tastenkürzel lege und die Rahmen ablöse,
> eben von Hand, dann habe ich hinterher weniger Nacharbeit.
Es gibt scripttechnisch keinen Befehl zum Lösen von verankerten Objekten so wie es etwa über die Benutzeroberfläche (/Objekte/Verankerte Objekte/Lösen) möglich ist.
Aber mit Unterstützung von Dave Saunders und Olav Kvern im Adobe Scripting Forum (Release anchored objects of a story kann ich Dir nun zwei Skript-Ansätze für das Lösen von verankerten Objekten bieten.
Achtung: Beide Skripte unten können nur auf einen Textfluß, nicht auf ein ganzes Dokument angewandt werden. Für beide Skripte muß entweder der Cursor im Text stehen oder ein Textrahmen ausgewählt sein.
1. Cut/Paste-Methode (Idee MF, Ausführung Dave Saunders)
Hier wird das zu lösende Objekt ausgewählt, dessen Koordinaten gesichert, das Objekt in die Zwischenablage ausgeschnitten, wieder eingesetzt und an den Ursprungsplatz verschoben.
// releaseAnchored_Dave.jsx
Object.prototype.releaseAnchored = function()
{
if (this.parent.constructor.name != "Character") throw "Object is neither anchored nor inline"
this.select(SelectionOptions.replaceWith);
this.parent.parentStory.recompose();
var myBounds = this.geometricBounds;
app.cut();
app.paste();
var newBounds = app.selection[0].geometricBounds;
app.selection[0].move(undefined,[myBounds[1] - newBounds[1], myBounds[0] - newBounds[0]]);
return app.selection[0]
}
var myObjects = app.selection[0].parentStory.pageItems;
//var myObjects = app.selection[0].parentStory.allPageItems;
for (var oneObject = myObjects.length-1; oneObject >= 0; oneObject--)
{
myObjects[oneObject].releaseAnchored();
}
Um verankerte Objekte in verankerten Objekten zu lösen, kannst Du die Auskommentierung ("//") am Anfang der folgenden beiden Zeilen vertauschen:
var myObjects = app.selection[0].parentStory.pageItems;
//var myObjects = app.selection[0].parentStory.allPageItems;
2. Zuweisung der Eigenschaften des verankerten Objekts an neues Objekt (Idee Olav Kvern, Ausführung MF)
Hier werden zunächst die Eigenschaften des verankerten Objekts in einer Variable gesichert.
Danach wird das Objekt gelöscht. Nun wird ein neues, nicht verankertes Objekt (Textrahmen) erstellt, dem die Eigenschaften des ursprünglichen Objekts zugewiesen werden.
// releaseAnchored_Ole.jsx
var myObjects = app.selection[0].parentStory.allPageItems;
for (var oneObject = myObjects.length-1; oneObject >= 0; oneObject--)
{
releaseAnchored(myObjects[oneObject]);
}
function releaseAnchored(theObject)
{
var theProps = theObject.properties;
var thePage = getPage(theObject).documentOffset-1;
theObject.remove();
var theFrame = app.documents[0].pages[thePage].textFrames.add();
theFrame.properties = theProps;
}
function getPage(anObject)
{
if ((anObject.constructor.name == "Page") || (anObject.constructor.name == "Spread"))
return anObject;
if ( anObject.constructor.name == "Character")
return getPage(anObject.parentTextFrames[0]);
return getPage(anObject.parent);
}
Hier ist es notwendig, auch verschachelte Objekte zu lösen, weil andernfalls die verankerten Objekte in verankerten Objekten im Nirgendwo verschwinden.
Ferner habe ich beobachtet, daß bei dieser Methode nicht alle Eigenschaften des Objektstils korrekt an das neue Objekt übertragen werden. So war bei mir hinterher die Ausrichtung im Textrahmen nicht mehr "unten", sondern "oben" (so etwas könnte man ggf. durch eine explizite Neuzuweisung der Eigenschaften des Objektstils an das Objekt lösen).
Probier einfach beide mal aus.