Hallo, Martin!
Aus gegebenem Anlass muss ich diesen alten Thread doch noch mal ausgraben.
es geht hier um Dein Script "
removeEmptyTextFrames.jsx".
Das ist leider nicht ganz "wasserdicht". Ich habe ein Hauptproblem damit:
es löscht auch Textrahmen, die Teile von Tabellen enthalten, die über mehrere Textrahmen verteilt sind (threaded text frames).
Ausserdem ist sein Scope (Wirkungsbereich) eingeschränkt, sodass verankerte Textrahmen nicht untersucht werden.
Dies möchte ich hiermit ändern:
1. Textrahmen werden nun dupliziert, wenn ihre ParentStory Tabellen enthalten. Das Duplikat wird der Untersuchung unterzogen.
Erklärung: wird eine Tabelle über mehrere Textrahmen fortgeführt, enthält bei einem Duplikat eines Teilstücks dieses Duplikat eine eigene Tabelle, wird also nicht fälschlicherweise als "leer" angesehen.
2. Ich verwende nun "allPageItems", um den Wirkungsbereich des Scripts auch auf verankerte Textrahmen auszudehnen.
Es werden zwei Schleifen durchlaufen:
Schleife 1 kümmert sich ausschließlich um verankerte Textrahmen, Schleife 2 arbeitet sich durch alle verbliebenen Textrahmen durch.
Ein weitere Einschränkung:
Der Wirkungsbereich von "allPageItems" des Dokuments beschränkt sich bei MultiStateObjects (MSO) auf den aktiven Status der MSOs. Leere Textrahmen außerhalb des "ActiveState" können so nicht gefunden werden. Dazu müßte jedes MSO einzeln untersucht werden und alle Stati nacheinander zum aktiven gemacht werden.
Erklärung: die Eigenschaft "allPageItems" fehlt dem Status-Objekt (state) eines MSOs; da hat das DOM eine Lücke, es gibt nur "pageItems". Über "myState.pageItems" können wir aber keine verankerten leeren Textrahmen finden.
Drei weitere, für mich sinnvolle Einschränkungen:
1. Gesperrte Textrahmen werden nicht geprüft.
2. Textrahmen mit Übersatz werden nicht geprüft, also auch nicht als "leer" definiert.
3. Es wird nicht geprüft, ob Tabellen "leer" sind.
Hier das Script zum Testen (bitte nur an Duplikaten von Produktionsdateien ausprobieren).
Lauffähig in CS3, CS4, CS5 und CS5.5 (CS2 kann ich nicht testen):