[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

mgrams
Beiträge gesamt: 28

3. Jun 2011, 16:02
Beitrag # 1 von 10
Bewertung:
(10092 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich arbeite auf Mac OS X, Version 10.5.8 mit Adobe InDesign CS5, Version 7.0.4.

Mehrfach wurden schon Probleme geschildert, dass Scripte die Skriptetiketten betreffend im Gegensatz zu CS3 oder CS4 bei CS5 nicht mehr laufen. Das Script Name statt Etikett soll hierbei Abhilfe schaffen, dieses habe ich auch eingesetzt.

Es geht darum, eine große Menge von Textrahmen im Dokument um einen bestimmten Wert zu verändern respektive zu verschieben. Nach dem Einsatz von Name statt Etikett bekomme ich zwar keine Fehlermeldung mehr, allerdings wird nur ein einziger Textrahmen im Dokument verschoben, es sollten aber alle sein, die einen bestimmten Namen tragen.

Der Code lautet:
Zitat tell application "Adobe InDesign CS5"

-- Initialisierung
set myDocument to active document
set myTextFrame to text frame "Tabellenkopf_VA" of myDocument
set aSel to text frame "Tabellenkopf_VA" of active document
if aSel = {} then
return

end if


set myDialog to make dialog with properties {name:"Tabellenkopf VA"}
tell myDialog
make dialog column
tell the result
set moveThisGroup to make enabling group with properties {static label:"Anpassen", checked state:true}
tell moveThisGroup
make dialog column
tell the result
make static text with properties {static label:"B:"}
make static text with properties {static label:"H:"}
end tell
make dialog column
tell the result
set moveXField to make real editbox with properties {edit value:168}
set moveYField to make real editbox with properties {edit value:0}
end tell
end tell
end tell
end tell

set nu to show myDialog
if nu is true then
set moveThis to checked state of moveThisGroup
set moveX to edit value of moveXField
set moveY to edit value of moveYField
else
destroy myDialog
return
end if



repeat with aThing in aSel
tell aThing
if moveThis then
set t to (item 1 of geometric bounds)
set l to (item 2 of geometric bounds)
set b to t + moveY
set r to l + moveX
set geometric bounds to {t, l, b, r}
end if
end tell
end repeat
end tell



Ist es möglich (mit every an richtiger Stelle?) wieder alle im Dokument vorkommenden Textrahmen eines Namens zu verschieben, alle bisherigen Versuche sind bis jetzt gescheitert. Es wäre sehr wichtig, weil ich in mehreren Dokumenten hunderte von Rahmen neu dimensionieren bzw. verschieben muss.

Viele Grüße,

Michael Grams
X

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Martin Fischer
  
Beiträge gesamt: 12783

3. Jun 2011, 17:14
Beitrag # 2 von 10
Beitrag ID: #473027
Bewertung:
(10064 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ich bin mir nicht sicher, ob das funktioniert, aber ein Versuch ist es wert.

Hans gibt in CS4-Script funktioniert nicht in CS5. Hilfe. den Tipp, die Werte der name-Eigenschaft der pageItems mit den Werten der labels gleichzusetzen und liefert auch gleich den Link zum passenden Skript dazu.

Zitat von Hans Haesler 1. bestehende Dokumente können mit dem Script NameStattEtikett_501d.js "behandelt" werden.

Erhältlich hier http://www.fachhefte.ch / Link "JavaScripts" und je nach Plattform den "CS5"-Ordner öffnen.

Dieses Script kopiert die Etiketten ins Attribut "Name". Die kopierten Namen sind im Bedienfeld "Ebenen" sichtbar. Und Scripts, welche die Objekte per Etikett ansprechen, funktionieren wieder, ohne dass sie angepasst werden müssen.



als Antwort auf: [#473022]
(Dieser Beitrag wurde von Martin Fischer am 4. Jun 2011, 07:26 geändert)

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Martin Fischer
  
Beiträge gesamt: 12783

3. Jun 2011, 17:23
Beitrag # 3 von 10
Beitrag ID: #473028
Bewertung:
(10060 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hm, nun gleich eine Frage an Hans. ;-)

Hans, ich habe mehrere Textrahmen mit dem Namen 'x'.

Nun hatte ich angenommen, ich bekomme diese Textrahmen folgendermaßen zu fassen:
Code
var f = app.documents.firstItem().textFrames.itemByName('x'); 


Erwartet hatte ich, dass mir f eine Sammlung mit allen Textrahmen, die den Namen 'x' tragen, liefert.
Allerdings wird nur ein einziger Textrahmen mit dem Namen 'x' zurückgegeben.
Und zwar der oberste (dasselbe, wenn ich pageItems statt textFrames nehme).

Hast Du eine Idee, wie an alle Textrahmen mit dem Namen 'x' heranzukommen ist?


als Antwort auf: [#473027]
(Dieser Beitrag wurde von Martin Fischer am 4. Jun 2011, 07:28 geändert)

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Hans Haesler
  
Beiträge gesamt: 5826

3. Jun 2011, 17:34
Beitrag # 4 von 10
Beitrag ID: #473030
Bewertung:
(10052 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael, hallo Martin,

ja, das stimmt. Wenn mit CS5 gleichnamige Rahmen über den Ebenen-Objekt-Namen adressiert werden, dann wird nur der vorderste erkannt.

Die Lösung für JavaScript werde ich später posten.

Mit AppleScript aber, funktioniert die whose clause und die Liste aller Textrahmen, deren Skriptetikett "Tabellenkopf_VA" ist, kann so erstellt werden:

Code
tell application "Adobe InDesign CS5" 

-- Initialisierung
set myDocument to active document
tell myDocument
set aSel to every text frame whose label is "Tabellenkopf_VA"
end tell
if aSel = {} then
return
end if

So sollte es klappen. Der Rest des Scripts bleibt unverändert.

Gruss, Hans


als Antwort auf: [#473028]

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Martin Fischer
  
Beiträge gesamt: 12783

3. Jun 2011, 17:39
Beitrag # 5 von 10
Beitrag ID: #473031
Bewertung:
(10046 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

man könnte alle pageItems auf den Namen prüfen und diejenigen, auf die der Name 'x' zutrifft, in einem Array speichern.

Etwa so:
Code
var f = get_item_by_name( app.documents.firstItem().pageItems, 'x'); 

function get_item_by_name( all_items, a_name)
{
var a = new Array;
for (var i = 0; i < all_items.length; i++)
{
if (all_items.item(i).name == a_name)
{
a.push(all_items.item(i));
}
}
return a;
}


In diesem Fall könnte man die Benennung der Objekte nach den Skriptetiketten aber auch gleich sein lassen und in der obigen Funktion statt auf die Namen auf die Etiketten zurückgreifen.


Code
var f = get_item_by_name( app.documents.firstItem().pageItems, 'x'); 

function get_item_by_name( all_items, a_name)
{
var a = new Array;
for (var i = 0; i < all_items.length; i++)
{
if (all_items.item(i).label == a_name)
{
a.push(all_items.item(i));
}
}
return a;
}



als Antwort auf: [#473030]
(Dieser Beitrag wurde von Martin Fischer am 3. Jun 2011, 17:40 geändert)

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

mgrams
Beiträge gesamt: 28

3. Jun 2011, 18:05
Beitrag # 6 von 10
Beitrag ID: #473032
Bewertung:
(10017 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, Hallo Martin,

vielen Dank für die umgehenden Antworten.

Die Modifikation der ersten Zeilen des AppleScript-Codes, wie in #473030 beschrieben, führt bereits zum gewünschten Ergebnis.

Alle Textrahmen im Dokument mit dem definierten Namen reagieren. Da ich im Dokument noch mehr Objekte anfassen muss, brauche ich nur die entsprechenden Etikett-Namen anzupassen, dann sollte es dafür auch funktionieren.

Nochmals Vielen Dank für die schnelle Hilfe und ein schönes Wochenende.

Viele Grüße,

Michael Grams


als Antwort auf: [#473030]

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Hans Haesler
  
Beiträge gesamt: 5826

3. Jun 2011, 18:23
Beitrag # 7 von 10
Beitrag ID: #473034
Bewertung:
(10003 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

bitteschön. Ja, es sollte funktionieren. Bedingung: Die Rahmen dürfen nicht gruppiert sein.

@ Martin: Ja, klar. Wenn man sowieso eine Schleife durchlaufen muss, macht es keinen Sinn, vorgängig die Etiketten in das Namens-Attribut zu kopieren.

Vielleicht macht es keinen grossen Unterschied, aber in der Lösung, welche ich für meine professionellen Scripts benutze, wird zuerst ein Array der Labels erzeugt und die Schleife durchläuft dann diese Liste. Bei Übereinstimmung wird der entsprechende Rahmen in die Liste aufgenommen. Siehe meinen separaten Beitrag: http://www.hilfdirselbst.ch/..._P473033.html#473033

Gruss, Hans


als Antwort auf: [#473032]

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Martin Fischer
  
Beiträge gesamt: 12783

3. Jun 2011, 18:27
Beitrag # 8 von 10
Beitrag ID: #473035
Bewertung:
(9998 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

guter Hinweis!
Danke.


als Antwort auf: [#473034]

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

Hans Haesler
  
Beiträge gesamt: 5826

3. Jun 2011, 23:01
Beitrag # 9 von 10
Beitrag ID: #473043
Bewertung:
(9930 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

bitteschön.

@ Michael: Und hier noch die Variante, mit welcher auch gruppierte Textrahmen adressiert werden können.

Zuerst wird der Variablen allPageItems alle Objekte zugewiesen. Einzelne Rahmen, Gruppen, die Rahmen der Gruppen, Bilder.
Dann wird der Variablen allLabels die Skriptetiketten dieser Objekte zugewiesen.
In einer Schleife wird das Label jedes Objekts geprüft. Bei einer Übereinstimmung wird das betreffende Objekt an die Liste aSel angefügt.

Code
tell application "Adobe InDesign CS5" 

-- Initialisierung
set myDocument to active document
tell myDocument
set aSel to {}
set allPageItems to all page items
set allLabels to label of all page items
repeat with i from 1 to count of allLabels
set curItem to item i of allLabels
if curItem is "Tabellenkopf_VA" then
set end of aSel to item i of allPageItems
end if
end repeat
end tell
if aSel = {} then
return
end if

Wie gehabt, nur der Anfang des Scripts. Der Rest bleibt unverändert.

Gruss, Hans


als Antwort auf: [#473035]

Textrahmen mit Skriptetiketten in InDesign CS5 verschieben

mgrams
Beiträge gesamt: 28

6. Jun 2011, 09:17
Beitrag # 10 von 10
Beitrag ID: #473109
Bewertung:
(9855 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Einen schönen Guten Morgen,

die Variante funktioniert einwandfrei. Ich kann das Script jetzt wieder wie in CS3 anwenden, der Zwischenschritt Name statt Etikett ist nicht mehr notwendig, spart Zeit und Nerven. Besten Dank dafür.

Viele Grüsse,

Michael


als Antwort auf: [#473043]
X