hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
Andreas78m
Beiträge: 27
4. Aug 2013, 13:07
Beitrag #1 von 11
Bewertung:
(3969 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo zusammen,

hab ein "kleines" Problem beim automatischen Platzieren (über place) von Tagged Text in InDesign CS 6 unter MacOS 10.6.8.

Das automatische Platzieren über festgelegte Item IDs der Musterseite funktioniert einwandfrei, allerdings nur solange bis ein Textrahmen mit einem anderen (manuell angelegten) verkettet wird für ein Textüberlauf.

Dann wird der Ursprungs-Rahmen eigenartiger weise vom Script nicht mehr gefunden, außer man löscht vorher händisch dessen Inhalt komplett oder man löst die Verkettung wieder.

Weis jemand von Euch Rat?

Beste Grüße,
Andreas
(Dieser Beitrag wurde von Andreas78m am 4. Aug 2013, 13:08 geändert)
Top
 
X
Hans Haesler  M  p
Beiträge: 5581
4. Aug 2013, 13:50
Beitrag #2 von 11
Beitrag ID: #515841
Bewertung:
(3942 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Andreas,

ich bin gerade auf der Rückreise und kann erst später versuchen, das Problem nachzuvollziehen.

Allerdings verstehe ich nicht ganz, weshalb das Script den Rahmen nochmals adressieren muss.

Würdest Du mir bitte Dein InDesign-Dokument sowie die Scripts zustellen, damit ich die gleichen Voraussetzungen haben werde?

Besten Dank im voraus.

Gruss, Hans
als Antwort auf: [#515837] Top
 
Andreas78m
Beiträge: 27
4. Aug 2013, 14:11
Beitrag #3 von 11
Beitrag ID: #515842
Bewertung:
(3934 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Hans,

konnte das Problem bei InDesign auch nicht ganz nachvollziehen, vor allem weil die ID (der Name) des Objekts erhalten bleibt.

Danke auf jeden Fall jetzt schon für die Hilfe und sende Dir am Montag mal ein Beispiel zu.

Beste Grüße und einen schönen Sonntag,
Andreas
als Antwort auf: [#515841] Top
 
Andreas78m
Beiträge: 27
5. Aug 2013, 15:17
Beitrag #4 von 11
Beitrag ID: #515886
Bewertung:
(3844 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo noch mal,

konnte mein Problem jetzt selber lösen. :-)

Lag jetzt weniger daran die ID (Name) von einen Rahmen zu finden, sondern das InDesign keine verketteten und befüllten Textrahmen über "place" austauschen möchte.

Hab das Problem nun umschifft, indem der Inhalt vorher erst gelöscht wurde. Anbei der Code, gibt aber bestimmt noch bessere Möglichkeiten das auf zu bauen.

Code
-- Rahmen ID definieren 
set ID_Textbox to "02"

-- die Textkette in eine Datei schreiben
set curFile to ((path to desktop as string) & "Versenden:Druckausgabe:" & "ID_Import.txt") as Unicode text

-- den Text in den ausgewählten Textrahmen importieren
tell application "Adobe InDesign CS6"
activate
tell document 1
set allFrames to all page items

repeat with i from 1 to count of allFrames

if name of item i of allFrames is "Produktbox_" & ID_Textbox then

-- leert zuerst die Textbox
set contents of (parent story of item i of allFrames) to ""

-- fügt die Inhalte in die Textbox
try
place alias curFile on item i of allFrames
end try

end if

end repeat

end tell
end tell


Für Vorschlage und Verbesserungsvorschläge bin ich natürlich jederzeit offen! ;-)

Beste Grüße,
Andreas
als Antwort auf: [#515842] Top
 
Hans Haesler  M  p
Beiträge: 5581
5. Aug 2013, 15:40
Beitrag #5 von 11
Beitrag ID: #515889
Bewertung:
(3834 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Andreas,

ich bedanke mich für die Dateien.

Gut, dass Du inzwischen selbst eine Lösung gefunden hast, denn vor heute Abend könnte ich nicht versuchen, das Problem nachzuvollziehen.

Dieses kenne ich nicht, weil noch nie versucht. Mit meinen Produktionsscripts werden nur leere Rahmen befüllt. Wenn der Anwender eine neue Version des Textes laden will, muss er den alten Text zuerst manuell entfernen.

Das Laden des neuen Textes ist per Script viel einfacher. Weil dieses den Pfad aufgrund der Wochennummer und des Textrahmen-Namens zusammensetzt.

Gruss, Hans
als Antwort auf: [#515886]
(Dieser Beitrag wurde von Hans Haesler am 5. Aug 2013, 22:06 geändert)
Top
 
Hans Haesler  M  p
Beiträge: 5581
5. Aug 2013, 18:28
Beitrag #6 von 11
Beitrag ID: #515897
Bewertung:
(3796 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Andreas,

ja, es ist tatsächlich so: Es ist nicht möglich, Text per Script in einen Rahmen zu laden, wenn dieser verkettet ist.

Deshalb ist Deine Lösung, den Inhalt zu enfernen, das richtige Vorgehen.

Ein Verbesserungsvorschlag: Den Textrahmen direkt ansprechen, anstatt eine Schleife durch alle Objekte zu machen.

Code
-- Rahmen ID definieren 
set ID_Textbox to "02"

-- Rahmen-Namen definieren
set txtFrameName to "Produktbox_" & ID_Textbox

-- die Textkette in eine Datei schreiben
set curFile to ((path to desktop as string) & "Versenden:Druckausgabe:" & "ID_Import.txt") as Unicode text

-- den Text in den ausgewählten Textrahmen importieren
tell application "Adobe InDesign CS6"
activate
tell document 1
-- leert zuerst den Textrahmen
try
set contents of parent story of text frame txtFrameName to ""
end
-- fügt die Inhalte in den Textrahmen
try
place alias curFile on text frame txtFrameName
end try
end tell
end tell

Dieses direkte Adressieren würde allerdings nicht funktionieren, wenn die Rahmen gruppiert sind.

(Anmerkung: Textbox (= QuarkXPress) habe ich fast überall durch Textrahmen (= InDesign) ersetzt. ;-)

Gruss, Hans
als Antwort auf: [#515889] Top
 
Andreas78m
Beiträge: 27
6. Aug 2013, 09:39
Beitrag #7 von 11
Beitrag ID: #515910
Bewertung:
(3758 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Hans,

vielen Dank erst mal für den Tipp!

Habe auch schon mehrfach drüber gegrübelt und finde den Schleifendurchlauf auch nicht optimal. Schon gar nicht, weil das Objekt durch den festen Namen (ID) ja eigentlich direkt angesprochen werden kann.

Leider kann ich allerdings eine Gruppierung nicht ausschließen.

Beste Grüße,
Andreas
als Antwort auf: [#515897] Top
 
Hans Haesler  M  p
Beiträge: 5581
6. Aug 2013, 10:02
Beitrag #8 von 11
Beitrag ID: #515914
Bewertung:
(3753 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Andreas,

folgender Code löst eventuell bestehende Gruppierungen auf:

Code
tell application "Adobe InDesign CS6" 
tell document 1
repeat
set nGroups to count of groups
if nGroups is greater than 0 then
repeat with g from nGroups to 1 by -1
ungroup group g
end repeat
else
exit repeat
end if
end repeat
end tell
end tell

Sind keine Gruppierungen vorhanden, dann geschieht ... nichts.

Gruss, Hans
als Antwort auf: [#515910]
(Dieser Beitrag wurde von Hans Haesler am 6. Aug 2013, 13:15 geändert)
Top
 
Hans Haesler  M  p
Beiträge: 5581
6. Aug 2013, 13:19
Beitrag #9 von 11
Beitrag ID: #515928
Bewertung:
(3716 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Andreas,

soeben habe ich im Script des Beitrags #8 den 'try'-Wickel entfernt, weil er überflüssig ist: Kaum vorstellbar, dass eine Gruppe nicht aufgelöst werden kann.

Aber ganz sicher kann man nicht sein. Und falls InDesign ein entsprechendes Problem stillschweigend schluckt, dann würde die Schleife endlos drehen.

Vorbeugenderweise könnte das Script also so ausgestattet werden:
– Die Repeat-Schleife mit einem Ausstiegswert versehen;
– Im 'on error'-Teil eine Meldung einrichten.

Code
tell application "Adobe InDesign CS6" 
tell document 1
repeat with ctr from 1 to 999
set nGroups to count of groups
if nGroups is greater than 0 then
repeat with g from nGroups to 1 by -1
try
ungroup group g
on error
display dialog "Mindestens eine Gruppe ist nicht aufgelöst." buttons "OK" default button 1 with icon 2
error number -128
end try
end repeat
else
exit repeat
end if
end repeat
end tell
end tell

Falls bei einem Problem der Dialog gezeigt wird (nur, wenn InDesign einen Fehler generiert), dann wird die Ausführung abgebrochen.

Doch die Endlosschleife wird vermieden, weil spätestens nach 999 Umdrehungen die Schleife verlassen wird.

Übrigens: Verankerte Gruppen werden nicht aufgelöst (zuerst müsste deren Verankerung gelöst werden). Aber sie werden vom Script auch nicht gezählt.

Gruss, Hans
als Antwort auf: [#515914] Top
 
Andreas78m
Beiträge: 27
6. Aug 2013, 13:53
Beitrag #10 von 11
Beitrag ID: #515930
Bewertung:
(3706 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Hans,

vielen Dank nochmal für die Hilfe und die tollen Ratschläge.

Leider kann ich einmal gruppierte Objekte nicht danach aufgelöst lassen und der Umstand sich jedes mal zu merken welches Objekt es war... um es dann zu entgruppieren, damit man sich einen Schleifendurchlauf sparen kann... ist glaube ich ein wenig zuviel des Guten! :-)

Aber mich wird das Thema bestimmt an einer anderen Stelle eh mal treffen und da ist das natürlich sehr Hilfreich zu wissen wie das funktioniert.

Beste Grüße,
Andreas
als Antwort auf: [#515928] Top
 
Hans Haesler  M  p
Beiträge: 5581
6. Aug 2013, 19:42
Beitrag #11 von 11
Beitrag ID: #515938
Bewertung:
(3651 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

ID CS6: Verkettete Textrahmen (ID Problem)


Hallo Andreas,

gut, ich verstehe, dass die Gruppierungen erhalten bleiben müssen.

Doch nicht verzagen: Es gibt eine andere Möglichkeit, einen Rahmen direkt anzusprechen, auch wenn dieser Bestandteil einer Gruppe ist.
Dabei darf man nicht 'text frame' verwenden, sondern dieses Konstrukt:

Code
set curFrame to item 1 of all page items whose name is txtFrameName 

Mit anderen Worten: Der Variablen 'curFrame' wird der aktuelle Rahmen zugewiesen. Jenes Element der Liste 'all page items', dessen Name dem vorher zusammengesetzten entspricht.

Diese Befehlszeile wird ausgeführt. Aber: Wenn kein Rahmen so benannt ist, wird kein Fehler generiert. Dies geschieht erst, wenn versucht wird, den Inhalt des Rahmens zu entfernen.

Deshalb wird der Abschnitt in einer Schleife ausgeführt, welche nur einmal durchlaufen wird. Sobald ein Fehler auftaucht, kann die Schleife mit 'exit repeat' verlassen werden.

Natürlich sollte vor dem Verlassen der Einmal-Schleife ein nicht gefundener Name in eine Rapportdatei geschrieben werden, damit man nachforschen kann, wo etwas fehlt.

Code
-- Rahmen ID definieren 
set ID_Textbox to "02"

-- Rahmen-Namen definieren
set txtFrameName to "Produktbox_" & ID_Textbox

-- der Pfad zur Textdatei
set curFile to ((path to desktop as string) & "Versenden:Druckausgabe:" & "ID_Import.txt") as Unicode text

set curFrame to ""

-- den Text in den ausgewählten Textrahmen importieren
tell application "Adobe InDesign CS6"
activate
tell document 1
repeat 1 times -- eine Einmal-Schleife
-- der aktuelle Textrahmen
set curFrame to item 1 of all page items whose name is txtFrameName
-- leert zuerst den Textrahmen
try
set contents of parent story of curFrame to ""
on error
exit repeat -- die Schleife verlassen
end try
-- fügt die Inhalte in den Textrahmen
try
place alias curFile on curFrame
end try
end repeat
end tell
end tell

Sehr wahrscheinlich wird dieses direkte Adressieren keine spektakuläre Beschleunigung der Ausführung bringen. Deshalb kannst Du ruhig bei der bisherigen Methode bleiben.

Gruss, Hans
als Antwort auf: [#515930] Top
 
X