hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Verankerte Objekte im gesamten Dokument lösen

 

« « 1 2 3 » »  


ElliPirelli
Beiträge: 46

18. Jul 2006, 16:04

Beitrag #1 von 32
Bewertung:

(3322 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo liebes Forum,

ich arbeite mit Windwos xp und InDesign CS2.
Nach dem Update im letzten Jahr habe ich voller Freude die
verankerten Objekte Funktion eingesetzt. Endlich keine
verrutschten Marginalen mehr!
Jetzt muss ich aber den Text zur Übersetzung exportieren.
Das funktioniert recht gut. Aber rückwärts funktioniert das überall
im Zusammenhang mit den verankerten Objekten nicht mehr.
Ein für mich im Moment akzeptabler Weg wäre alle Objekte zu
lösen und nach dem Reimport wieder zu verknüpfen.
Schön wäre es, wenn es auf automatisiert funktionieren würde.
Ca. 150 - 200 verankerte Objekte, habe nicht gezählt.

Geht das? Wenn ja, wie. Ich habe gesucht, aber zu genau diesem Thema
nichts gefunden. Wieder verankern muss ich klar von Hand, keine Frage.

Ich freue mich über Antworten oder gar Lösungen.
Danke.

Grüße von Elli
Grüße von Elli
Top

Martin Fischer  M  p
Beiträge: 9698

18. Jul 2006, 17:07

Beitrag #2 von 32
Beitrag ID: #239896

Bewertung:

(3303 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Elli,

hier ein Quick- & Dirty-Skript, das die verankerten Textrahmen im ausgewählten Bereich (Absatz, Textrahmen, Textfluß) auflöst und den Inhalt der verankerten Rahmen zwischen Tags an der Position des Ankers einfügt.

Mit einem weiteren Skript (gibt es das schon?) wäre es möglich, an der Position der Tags einen verankerten Textrahmen einzufügen, den Text zwischen diesen Tags in den Textrahmen zu verschieben und die nunmehr überflüssigen Tags zu löschen.

Code
// resolveAnchoredTextFrames.jsx 
//DESCRIPTION: Löst verankterte Textrahmen im ausgewählten Bereich auf und fügt den Inhalt des Textrahmens zwischen zwei Tags an der Position des Ankers ein.

var myStartTag = "<Marg>";
var myEndTag = "</Marg>";

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.selection.length > 0) && (app.selection[0].isText))
{
var myItems = app.selection[0].allPageItems;
for (oneItem = myItems.length-1; oneItem >= 0; oneItem--)
{
if (myItems[oneItem].constructor.name == "TextFrame")
{
myItems[oneItem].parent.insertionPoints[0].contents = myStartTag; // Einfügen des Start-Tags
myItems[oneItem].parent.insertionPoints[-1].contents = myEndTag; // Einfügen des End-Tags
// Verschieben des Inhalts des verankerten Textrahmens
myItems[oneItem].texts[0].move(LocationOptions.before, myItems[oneItem].parent.insertionPoints[0]);
myItems[oneItem].remove(); // Löschen des verankerten Textrahmens
}
}
}


Probier das Skript mal mit einer Kopie Deines Dokuments aus.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#239879] Top

ElliPirelli
Beiträge: 46

18. Jul 2006, 21:29

Beitrag #3 von 32
Beitrag ID: #239922

Bewertung:

(3278 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Martin,

vielen Dank für die Mühe.
Entweder ich stell mich an, oder es funktioniert bei mir noch nicht.
Unten kopier ich die Fehlermeldung.
Ich hab zum Testen eine kleine Datei verwendet, die aber ähnliche Formate beinhaltet, wie die große Datei.
Ich habe einen ganz einfachen Textrahmen hinzugefügt und es hat einmal funktioniert, dass der Rahmen gelöst war. Jedesmal hat es die Tags in die Datei geschrieben. Das nächste Mal funktionierte es nicht mehr, warum auch immer, nur die Tags erschienen.

Nun könnte eine Fehlerquelle sein, dass ich nicht nur Textrahmen mit Text verankere, sondern auch Dateien (Grafiken und Fotos) und Textrahmen die wiederum auch die verankerte Dateien enthalten können. Alle verankerten Objekte haben einen zugewiesenen Objektstil. Da das Makro nur die mit dem markierten Bereich verankerten Objekte löst, sollten die Nebenrahmen egal sein, oder?

Nun verstehe ich (indesignmakronullcheckerin) nicht, was der Sinn der Tags an der Position des Ankers ist. In meinem Fall wäre es schon genug, wenn die Objekte einfach gelöst werden und diese auf der Position stehen blieben.

Das heißt, ich kann nachdem der Text wieder eingelesen ist, die noch als gelöste Marginalen da stehenden Objekte von Hand wieder einfügen und durch den zugewiesenen Textstil stehen danach alle Objekte genau auf der richtigen Position. Jedenfalls fast alle.

Eine Komplettlösung mit wieder zurücklesen der Rahmen über Tags scheint mir doch ziemlich schwierig zu sein, da habe ich gar keine Hoffnung, das allzuschnell gelöst zu bekommen. Die Übersetzungsprogramm-Programmierer benötigen dazu immer 1/2 Jahr und mehr (Firma Star mit Filter für transit bei meinem Übersetzer).

Also die Fehlermeldung ist:
JavaScript Fehler!

Fehlernummer: 2
Fehlerzeichenfolge: my is undefined
Zeile 35
Quelle: myItems[oneItem].texts[0].move(LocationOptions.before, my-Items[oneItem].parent.insertionPoints[0]);

Vielleicht ganz einfach zu beheben?

Jedenfalls nochmals herzlichen Dank für das sofortige "um das Problem kümmern", das ist großartig.

Ciao
Elli
Grüße von Elli

als Antwort auf: [#239896] Top

Martin Fischer  M  p
Beiträge: 9698

18. Jul 2006, 22:09

Beitrag #4 von 32
Beitrag ID: #239931

Bewertung:

(3271 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Elli,

> Fehlerzeichenfolge: my is undefined
> Zeile 35
> Quelle: myItems[oneItem].texts[0].move(LocationOptions.before,
> my-Items[oneItem].parent.insertionPoints[0]);

Woher kommt das Minus zwischen "my" und "Items"?
In meinem Code steht das so nicht drin und der Begriff muß "myItems" heißen.
Bitte kopier' Dir meinen Code nochmal so wie er ist raus.

> Textrahmen die wiederum auch die verankerte Dateien enthalten können.

Oh jemmineeh, oh jerumneh.
So etwas hatte ich fast befürchtet.
Mein Skript war auf einfache Marginalien ausgelegt.
Ich hatte damit gerechnet, daß auch noch andere Rahmen (Bildrahmen) verankert sein könnten, habe dem Skript aber gesagt, es soll diesen keine Beachtung schenken.
Text- oder Bildrahmen in einem verankerten Textrahmen hatte ich allerdings nicht berücksichtigt (kam bei mir selber noch nie vor). Sollten an und für sich keine größeren Probleme machen. Das muß ich morgen aber nochmal gezielt nachstellen und mir einen Kopf zu machen. Eine Musterdatei von Dir wäre mir eine Hife.

> Da das Makro nur die mit dem markierten Bereich verankerten Objekte löst,
> sollten die Nebenrahmen egal sein, oder?

Es handelt sich nicht um ein Makro!
Ja, es ist immerhin ein Skript!

Aber was bezeichnest Du als Nebenrahmen?
Textrahmen in verankerten Textrahmen oder verankerte Textrahmen, deren Anker außerhalb der Auswahl liegen?

> Nun verstehe ich (indesignmakronullcheckerin) nicht, was der Sinn der Tags
> an der Position des Ankers ist.

Die Tags sollen anzeigen, wo der Inhalt des verankerten Rahmens beginnt und wo er wieder endet und zwischen den Tags ist der Inhalt des verankerten Textrahmens untergebracht. In einem weiteren Skript könnte der Text zwischen den Tags wieder in einen verankerten Textrahmen umgewandelt werden (also Textrahmen erstellen an der Position des Start-Tags und den Text (+ eingebettete Bilder) zwischen den Tags in den Textrahmen verschieben).

> In meinem Fall wäre es schon genug, wenn die Objekte einfach gelöst
> werden und diese auf der Position stehen blieben.

Grins. ;-)
Wenn Du wüßtest, was das programmiertechnisch für ein Aufwand wäre ...
Nein, die Anker herauslesen und die Textrahmen auf ihrer Position stehen lassen, das muß ein anderer erledigen. So etwas würde ich selber nie brauchen und ich halte es für wenig sinnvoll.
Das wäre hinterher ein Heidengeschäft, die Rahmen alle wieder an der richtigen Position zu verankern.

Mir gefällt die Tag-Lösung besser.
Deswegen würde ich eher auf dieser Baustelle weitermachen.
Ja, das sind die Freiheiten eines Freeware-Programmierers - nix als Lust und Laune!

> Eine Komplettlösung mit wieder zurücklesen der Rahmen über Tags
> scheint mir doch ziemlich schwierig zu sein

Nein!
Über die Tag-Methode (s.o.) ist sie zum Greifen nahe.

> Die Übersetzungsprogramm-Programmierer benötigen dazu immer 1/2 Jahr und mehr

;-)


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#239922]

(Dieser Beitrag wurde von Martin Fischer am 18. Jul 2006, 23:00 geändert)
Top

Martin Fischer  M  p
Beiträge: 9698

18. Jul 2006, 22:41

Beitrag #5 von 32
Beitrag ID: #239933

Bewertung:

(3266 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Nun habe ich die Sache mit den verschachtelten Textrahmen bzw. Bildrahmen in verankerten Textrahmen mit obigem Skript getestet:

Bzgl. der Auflösung der verankerten Textrahmen nach der TAG-Methode sehe ich keine Probleme. Das Skript sollte laufen und seinen Job erledigen.

Allerdings gäbe es für die Rückumwandlung (TAGs -> verankerte Textrahmen) drei Dinge zu beachten:

1. verschachtelte Textrahmen werden über das Skript resolveAnchoredTextFrames.jsx aufgelöst und sollten in Ihrer Verschachtelung wieder hergestellt werden. Im aufgelösten Text könnte also z.B. folgende Sequenz für einen Textrahmen in einem verankerten Textrahmen stehen:
"Mein Blindtext <Marg>Hier ein Beispiel für Blindtext:<Marg>Ich bin nur Blindtext.</Marg>. Zugegeben, ziemlich kurz bemessen.</Marg> liest sich relativ schnell, obwohl ohne Sinn."

Jede weitere mögliche Verschachtelung wäre eine Herausforderung (die über eine rekursive Funktion zu lösen wäre).

2. In verankerten Textrahmen platzierte Bilder würden z.B. beim RTF-Export als eingebettete Bilder exportiert werden und ggf. ihren Objektstil beim Reimport verlieren.

3. So wie das Skript oben ist, geht die Information bzgl. dem den verankerten Textrahmen zugewiesenen Objektstil verloren. Diese Information könnte bei Bedarf aber auch in den TAG eingebunden werden.

Das alles überschreitet aber den Aufwand für ein Freeware-Script. ;-)


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#239931] Top

Martin Fischer  M  p
Beiträge: 9698

19. Jul 2006, 08:16

Beitrag #6 von 32
Beitrag ID: #239952

Bewertung:

(3228 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Elli,

> Nun verstehe ich (indesignmakronullcheckerin) nicht, was der Sinn der Tags
> an der Position des Ankers ist.

Wenn Dich die TAGs stören, dann könnte für Dich der Umweg über Fußnoten eine Alternative sein (vorausgesetzt, im Dokument sind - wg. der Identifizierung der Inhalte für die Rückwandlung - ansonsten keine Fußnoten enthalten).

Im folgenden Skript werden die verankerten Textrahmen "in Fußnoten umgewandelt" (d.h. an der Position des Ankers des Textrahmens wird eine Fußnote eingefügt, in die der Inhalt des Textrahmens verschoben wird).

Bitte beachte: In diesem Skript funktioniert das Verschieben von verschachtelten Textrahmen (Textrahmen in verankertem Textrahmen) nicht. Textrahmen in verankerten Textrahmen gehen statt dessen verloren - es gibt keine Fußnoten in den Fußnoten).


Code
// resolveAnchoredTextFrames2Footnotes.jsx 
//DESCRIPTION: Löst verankerte Textrahmen im ausgewählten Bereich auf und verschiebt den Inhalt des Textrahmens in eine neue Fußnote an der Position des Ankers.

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.selection.length > 0) && (app.selection[0].isText))
{
var myItems = app.selection[0].allPageItems;
for (oneItem = myItems.length-1; oneItem >= 0; oneItem--)
{
if (myItems[oneItem].constructor.name == "TextFrame")
{
// Einfügen der Fußnote
var myNote = myItems[oneItem].parent.insertionPoints[0].footnotes.add();

// alternativ: bei Bedarf Fußnote *ohne* Fußnoten- und Trennzeichen einfügen:
//var myNote = myItems[oneItem].parent.insertionPoints[0].footnotes.add({contents:""});

// Verschieben des Inhalts des verankerten Textrahmens
myItems[oneItem].texts[0].move(LocationOptions.after, myNote.insertionPoints[-1]);

// Löschen des verankerten Textrahmens
myItems[oneItem].remove();
}
}
}


Auch nach diesem Verfahren könnten die Textrahmen später aus dem Inhalt und der Position der Fußnoten wiederhergestellt werden.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#239922] Top

ElliPirelli
Beiträge: 46

21. Jul 2006, 18:16

Beitrag #7 von 32
Beitrag ID: #240525

Bewertung:

(3184 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Martin,
Das mit den Tags habe ich nach der ausführlichen Erklärung schon verstanden. Und das Skript hat nach der Korrektur des Fehlers "-" den mein Editor hineingeschummelt hat, auch entsprechend Deiner ebenfalls ausführlichen Beschreibung funktioniert.
Nur habe ich in meinem Dokument, vor lauter Begeisterung, zuviel mit den Objektstilen gearbeitet, als dass ich auf diese verzichten kann, indem ich sie mit dem Skript eliminiere.
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.
Die Rahmen mit all ihren verschachtelten Nebenverankerungen bleiben an Ort und Stelle stehen und ich verankere jeweils nur einen Rahmen neu, statt die ganzen enthaltenen Einzelobjekte neu zu definieren.
Ich hab das an ein paar Seiten getestet und der Aufwand scheint mir einigermaßen erträglich zu sein.
Ich muss mir wohl noch über einen für die "automatische Bearbeitung" zugänglicheren Dateiaufbau Gedanken machen. Gibt es dazu Tipps und Tricks in Ratgebern? Ich nehme mal an eher nicht?
Das Skript mit den Fußnoten ist auch ziemlich brauchbar für alles was Textrahmen betrifft, zumal sich Text super leicht wieder in einen neuen Textrahmen rausnehmen lässt.
Ich danke Dir sehr für Deine ganze Mühe, ich für mich, muss das Thema etwas vertagen. Aber mir stinkt es sicher schon, wenn ich das nächste Mal wieder von Hand Anker löse ;-)
Es wäre schön, wenn ich später dann mal wieder fragen darf.

Bist Du "nur" Freeware-Programmierer?

Nochmals vielen Dank! Es ist unglaublich, solch eine Unterstützung zu bekommen. :-)

Grüße von Elli

als Antwort auf: [#239952] Top

Martin Fischer  M  p
Beiträge: 9698

21. Jul 2006, 18:47

Beitrag #8 von 32
Beitrag ID: #240530

Bewertung:

(3179 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


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.

Jetzt habe ich auch etwas kapiert.
Mal sehen, ob das nicht doch auch über ein Script zu erledigen ist.
Wenn, dann wäre das eine sehr simple Sache.

Ich mußte noch nie verankerte Rahmen lösen.
Deswegen war mir das nicht geläufig.

> Bist Du "nur" Freeware-Programmierer?
Nein, ab und an arbeite ich auch gegen Entgelt. ;-)


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#240525] Top

Martin Fischer  M  p
Beiträge: 9698

22. Jul 2006, 10:18

Beitrag #9 von 32
Beitrag ID: #240540

Bewertung:

(3137 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


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.

Code
// 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:
Code
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.

Code
// 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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#240525]

(Dieser Beitrag wurde von Martin Fischer am 3. Jun 2007, 19:44 geändert)
Top

Martin Fischer  M  p
Beiträge: 9698

22. Jul 2006, 10:22

Beitrag #10 von 32
Beitrag ID: #240541

Bewertung:

(3136 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Elli,

> Mit einem weiteren Skript wäre es möglich, an der Position der Tags
> einen verankerten Textrahmen einzufügen, den Text zwischen diesen Tags
> in den Textrahmen zu verschieben und die nunmehr überflüssigen Tags zu löschen.

Hier der versprochene Gegenpart zu resolveAnchoredTextFrames.jsx.
(funktioniert [noch] nicht bei verschachtelten Objekten)

restoreAnchoredTextFrames.jsx
Code
// restoreAnchoredTextFrames.jsx 
//DESCRIPTION: Erstellt aus Inhalten zwischen Tags im ausgewählten Bereich verankerte Textrahmen an der Position der Tags.

//var myOStyle = app.documents[0].objectStyles.item("Marg");
var myStartTag = "<Marg>";
var myEndTag = "</Marg>";

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.selection.length > 0) && (app.selection[0].isText))
{
var myResults = getOStyle();
var myOStyle = app.documents[0].objectStyles.item(myResults[0]);
var myWidth = myResults[1]*1;
var myHeight = myResults[2]*1;

restoreAnchoredTextFrames();
}

function restoreAnchoredTextFrames()
{
app.findPreferences = null; app.changePreferences = null;

// Finden von Start- und Stop-Tags
var start=app.selection[0].search(myStartTag,false,false, undefined);
var stop=app.selection[0].search(myEndTag,false,false, undefined);

// mindestens ein Start-Tag notwendig
// Zahl der Start-Tags muß gleich Zahl der End-Tags sein
if(start.length>0 && start.length == stop.length)
{
st=start[0].parentStory;
for (myCounter = start.length-1; myCounter >= 0; myCounter--)
{
createFrame(start, stop, st);
}
}
else
{
myText="Maybe there is no start code - or count of start code and count of stop code are not equal!" + "\n" + "Start: " + start.length + "\n" + "Stop: " + stop.length;
alert (myText);
}
app.selection[0].search(myStartTag,false, false,"");
app.selection[0].search(myEndTag,false, false,"");

}

function createFrame(theStart, theStop, theStory)
{
var theText = theStory.characters.itemByRange(theStart[myCounter].index+myStartTag.length, theStop[myCounter].index-1);
if (theText.characters.length != 0) // zwischen den TAGs steckt Text
{
var thePoint = theStop[myCounter].index + myEndTag.length;
var myNewFrame = theStory.insertionPoints[thePoint].textFrames.add();
myNewFrame.applyObjectStyle(myOStyle, true);
myBounds = myNewFrame.geometricBounds;
myNewFrame.geometricBounds = [myBounds[0], myBounds[1], myBounds[0] + myHeight, myBounds[1] + myWidth ]

// Prüfroutine bzgl. verschachtelter TAGs
var theCheck = theText.search(myStartTag,false,false, undefined);
if (theCheck[0].length > 0)
{
alert("Fehler!\rMöglicherweise verschachtelte TAGs");
exit();
}
else
{
theText.move(LocationOptions.before, myNewFrame.insertionPoints[0]);
if (myOStyle.appliedParagraphStyle != null)
// weist das im Objektstil enthaltene Absatzformat nur dem ersten Absatz zu ???
myNewFrame.paragraphs.everyItem().appliedParagraphStyle = myOStyle.appliedParagraphStyle;
//myNewFrame.texts[0].appliedParagraphStyle = myOStyle.appliedParagraphStyle;
}
}
}

function getOStyle()
{
var theFieldWidth = 150;
var theOStyles = app.activeDocument.objectStyles.everyItem().name;
var myDialog = app.dialogs.add({name:"Objektstil für verankerten Rahmen"});
with(myDialog.dialogColumns.add())
{
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Objktstil:", minWidth:theFieldWidth});
}
with(dialogColumns.add())
{
var myOStyleDropDown = dropdowns.add({stringList:theOStyles, selectedIndex:theOStyles.length-1});
}
}
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Rahmenbreite:", minWidth:theFieldWidth});
}
with(dialogColumns.add())
{
var myWidthField = integerEditboxes.add({editContents:"25"});
}
}
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Rahmenhöhe:", minWidth:theFieldWidth});
}
with(dialogColumns.add())
{
var myHeightField = integerEditboxes.add({editContents:"5"});
}
}
}
var myResult = myDialog.show();
if(myResult == true)
{
var aOStyle = theOStyles[myOStyleDropDown.selectedIndex];
var aWidth = myWidthField.editContents;
var aHeigth = myHeightField.editContents;
myDialog.destroy();
}
else
{
myDialog.destroy();
exit();
}
return [aOStyle, aWidth , aHeigth] ;



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#239896] Top

ElliPirelli
Beiträge: 46

24. Jul 2006, 19:17

Beitrag #11 von 32
Beitrag ID: #240763

Bewertung:

(3047 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Martin,
vielen, vielen Dank. Bei der Hitze reicht es bei mir gerade noch, oder beinahe schon nicht mehr, zu Routinearbeiten und Ihr lasst noch die Köpfe rauchen.
Grüße an Dave Saunders und Olav Kvern.
Ich war nun beschäftigt mit testen und habe Folgendes zu berichten:

releaseAnchored_Dave.jsx
Ich dachte sofort: >Das ist es!<. Ich habe es in einer Kopie gestartet und das Skript ist ohne Fehler alle ca. 50 Seiten, die mein Textfluss hat, durchgegangen.
Ergebnis: Durch alle Seiten ohne Fehlermeldung und am Ende waren beinahe alle Objekte gelöst. Nur die Objekte werden alle auf der Seite, auf der ich das Skript ausgelöst habe eingefügt. Koordinaten werden gehalten.
Das Skript ist somit im aktuellen Zustand nur bedingt für mehrseitige Dokumente geeignet.
Aber zum Testen was übrig bleibt umso besser :-). Mein ich ernst!

releaseAnchored_Ole.jsx
Funktioniert mit Textrahmen.
Absatzformate gehen verloren.
Die Objektstile des Rahmens zeigen ein >+< an, heißt die wurden verändert. Kann mit >Abweichungen löschen< wieder in Ordnung gebracht werden.
Ich hatte schon Dokumente, die ich in Zukunft (vielleicht) verankern würde, falls diese Anker nicht ein-fach doch eine Sackgasse sind in Bezug auf Bearbeitbarkeit per Skripts, die dafür möglicherweise Verwendung hätten.
Die Objekte, die nicht Text sind, verschwinden bei dieser Lösung ebenfalls. Für das Lösen von gemisch-ten Ankern keine Lösung, bzw. keine Arbeitsersparnis.

restoreAnchoredTextFrames.jsx
Läuft bei mir vielleicht nicht?
Ich führe erst Skript >resolveAnchoredTextFrames.jsx< aus. Da werden die Tags gesetzt.
Jetzt könnte der Text exportiert, nach der Übersetzung reimportiert werden. Danach könnten die durch die Tags markierten Texte wieder in Textrahmen verschoben werden. Richtig?
Bewirkt an dem Dokument nichts.

Für mein >Anker lösen< wäre der Ansatz >releaseAnchored_Dave.jsx< der Richtige.
releaseAnchored_Ole.jsx ist für reine Textrahmen tauglich. Ich habe kein gutes Dokument zum testen.
Meine Alten sind nicht verankert. Das hole ich bei Gelegenheit nach.

Für mich ist es eine große Frage, ob es Sinn macht, die verankerten Objekte mit Objektstil zu verwenden.
Bei Korrekturen in einem Dokument ist es einfach großartig, wenn man auf die Marginalen nicht achten muss und sich darauf verlassen kann, dass alles an der richtigen Stelle mitläuft.
Wenn die verankerten Objekte sich aber so schwer automatisiert Exportieren und wieder importieren lassen, so werden sie als echte Hilfe zweifelhaft. Richtig schade.

Martin, herzlichen Dank für all die Tüftelei und Arbeit. Vielleicht ist für den Ansatz mit >releaseAnchored_Dave.jsx< die Ablage auf den Quellseiten der Objekte möglich, ohne den gigantischen Aufwand zu verursachen? Dann wäre eine Zwischenlösung realisiert. Oder auch für alle die genug haben von den verankerten Objekten.

Vielen Dank und
Grüße von Elli

als Antwort auf: [#240541] Top

Martin Fischer  M  p
Beiträge: 9698

24. Jul 2006, 19:32

Beitrag #12 von 32
Beitrag ID: #240765

Bewertung:

(3042 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


> Martin, herzlichen Dank für all die Tüftelei und Arbeit.
> Vielleicht ist für den Ansatz mit >releaseAnchored_Dave.jsx< die Ablage
> auf den Quellseiten der Objekte möglich, ohne den gigantischen Aufwand zu verursachen?

Sowohl Dave als auch ich haben den Test - unabgesprochen - auf einer Doppelseite und nicht mit einem Textfluß, der über mehrere Seiten geht, gemacht.

Das mit der Seitenplatzierung läßt sich relativ leicht umsetzen.
Vielleicht finde ich heute Abend noch 5 Minuten dafür.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#240763] Top

Martin Fischer  M  p
Beiträge: 9698

24. Jul 2006, 21:30

Beitrag #13 von 32
Beitrag ID: #240780

Bewertung:

(3030 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Elli,

bei der cut/paste-Methode muß man sich jeweils auf die Seite des zu bearbeitenden Objekts beamen. Das geht etwa über Zoom.

Hier die neue Variante:
Code
// 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.activeWindow.zoomPercentage = 100;
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();
}



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#240765] Top

ElliPirelli
Beiträge: 46

26. Jul 2006, 13:32

Beitrag #14 von 32
Beitrag ID: #241115

Bewertung:

(2993 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Hallo Martin,

ich habe das Skript gestern getestet. Nach Start des Skripts, erschien die
Sanduhr und es tat sich nichts mehr. Nach einer viertel Stunde habe ich
abgebrochen. Ich ließ das erste Skript nochmals laufen um die Zeit zu
stoppen. Da war alles nach unter 3 min. fertig.
Heute habe ichs nochmal versucht, man weiß ja nie, und InDesign ist mehr oder weniger sofort ausgestiegen. Sofort, wenn nicht der ganze Text markiert war. Und beinahe sofort, wenn alles markiert war.

Hast Du eine Vermutung, an was es liegen könnte?

Vielen Dank und
Grüße von Elli

als Antwort auf: [#240780] Top

Martin Fischer  M  p
Beiträge: 9698

26. Jul 2006, 13:45

Beitrag #15 von 32
Beitrag ID: #241124

Bewertung:

(2989 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Verankerte Objekte im gesamten Dokument lösen


Keine Ahnung, an was es bei Dir hakt.
Hier läuft es.
Es kam ja eigentlich nur der Zoom zum Aktualisieren der Seite hinzu.

Dave hat mit einer Objektdefinition gearbeitet.
Ich habe Dir nun eine "normale" Funktion draus gemacht.
Versuch mal, ob's damit klappt:
Code
// releaseAnchored_Dave_function.jsx   

var myObjects = app.selection[0].parentStory.pageItems;
//var myObjects = app.selection[0].parentStory.allPageItems;

for (var oneObject = myObjects.length-1; oneObject >= 0; oneObject--)
{
releaseAnchored(myObjects[oneObject]);
}

function releaseAnchored(theObject)
{
if (theObject.parent.constructor.name != "Character")
{
alert ("Object is neither anchored nor inline")
}
else
{
theObject.select(SelectionOptions.replaceWith);
theObject.parent.parentStory.recompose();
var myBounds = theObject.geometricBounds;
app.activeWindow.zoomPercentage = 100;
app.cut();
app.paste();
var newBounds = app.selection[0].geometricBounds;
app.selection[0].move(undefined,[myBounds[1] - newBounds[1], myBounds[0] - newBounds[0]]);
}
}



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#241115] Top
« « 1 2 3 » »  


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Verankerte Objekte im gesamten Dokument lösen


^