Antworten auf deine Fragen:
Neues Thema erstellen

Illustrator - Script: Textrahmen auswählen

Moin,

ich habe ein Script, in dem mir ein bestimmter Text folgendermaßen in eine Variable gelegt wird:

var text = doc.textFrames.pointText([0, 0]);

Am Ende des Scripts würde ich gerne diesen Textrahmen auswählen lassen.
Ich habe Verschiedenes probiert, aber all dies funktioniert leider nicht:

1. text.selected = true;
2. doc.selection = text;
3. app.selection = text;
4. text.textFrames[0].selected = true;

text.textRange.select();
wählt den (inneren) Text aus, nicht aber den Textrahmen, also das Objekt an sich.

Hat jemand vielleicht eine Idee oder sogar eine Lösung?
Version ist Illu 28.5

Vielen Dank im Voraus!
 

Vektorprogramme

Moin Buerzel,

vielen Dank für deine Antwort, die ich erst morgen wieder testen kann.
Aber woher weiß Illu bei deiner Zeile, welcher Textrahmen ausgewählt werden soll? Es gibt ja möglicherweise noch weitere davon im Dokument.
 

buerzel

Versuch macht kluch!

Teammitglied
Du hast nur von einem geschrieben. Ansonsten sind die Objekte in Arrays angeordnet (Bsp.: TF(0) ... TF(x)).
Ansonsten könntest du auch die jeweiligen Layer selektieren, falls die sinnvolle Namen haben.
 
Moin Buerzel,

ich hatte gehofft, dass wenn ich das Objekt in der Variable "text" speichere, dass ich es dann auch explizit ansprechen könnte.

Auf die Namen der Layer habe ich leider keinen Einfluss, aber der Text(rahmen) wird immer das oberste Objekt der untersten Ebene sein, falls das weiterhilft.
 
Das Script soll in unterschiedlichsten Dateien eingesetzt werden, die von unterschiedlichsten Kunden kommen. Von "Ebene 1" über "Layer 1" oder "Background" ist da alles dabei. Da möchte ich nur ungern eingreifen.
 

mm100

Benutzer

Code:
activeDocument.selection.typename = "TextFrame";

Das ist, gelinde gesagt, absoluter Quatsch mit Soße!


Du hast nur von einem geschrieben. Ansonsten sind die Objekte in Arrays angeordnet (Bsp.: TF(0) ... TF(x)).
Ansonsten könntest du auch die jeweiligen Layer selektieren, falls die sinnvolle Namen haben.

Vollkommen unnötig. Und ein ziemlich wirres Durcheinander von Halbwahrheiten.
Denn der Textrahmen ist doch bereits über seinen Variablennamen ansprechbar und auswählbar.


ich habe ein Script, in dem mir ein bestimmter Text folgendermaßen in eine Variable gelegt wird:

var text = doc.textFrames.pointText([0, 0]);

Hallo @_schatzi_
So standalone funktioniert dein Einzeiler garantiert nicht.
Mit der vorangestellten Zeile:
var doc = app.activeDocument; var text = doc.textFrames.pointText([0, 0]);
erstellst du einen Punkttext Textframe ohne Inhalt und speicherst ihn ihn der Variable 'text'


ich hatte gehofft, dass wenn ich das Objekt in der Variable "text" speichere, dass ich es dann auch explizit ansprechen könnte.
Am Ende des Scripts würde ich gerne diesen Textrahmen auswählen lassen.

Das kannst du doch. Dir fehlt nur die richtige Syntax (obwohl du sie anscheinend schon ?getestet? hast):
text.selected = true;

Oder besser als komplett funktionierendes Script Schnipsel:
var doc = app.activeDocument; var text = doc.textFrames.pointText([0, 0]); alert ("Textrahmen erstellt"); // do something // do something // do something text.selected = true; alert ("leeren Textrahmen 'Text' ausgewählt"); // do whatever you want with the selected textFrame


Auf die Namen der Layer habe ich leider keinen Einfluss, aber der Text(rahmen) wird immer das oberste Objekt der untersten Ebene sein, falls das weiterhilft.

Der Name des Layers ist für dieses Beispiel unerheblich. (Allerdings wird mit der einen von dir gezeigten Zeile Code der neue leere Textrahmen IMMER an oberster Stelle im Dokument eingefügt werden. Damit er das 'oberste Objekt der untersten Ebene' wird, muss er erst dort hin verschoben werden. Ich gehe davon aus, dass du das an anderer Stelle in deinen Script machst.)
 
Zuletzt bearbeitet:
Moin mm100,

vielen Dank für deine Unterstützung.
Ja, in der Tat habe ich "text.selected = true" bereits ausprobiert; ohne Erfolg.

Vielleicht hilft ja das komplette bisherige Script:

var doc = app.activeDocument; doc.rulerOrigin = [0, doc.height]; var newColor = new CMYKColor(); newColor.cyan = 0; newColor.magenta = 0; newColor.yellow = 0; newColor.black = 100; var textAttributes = { contents: 'RA', fontFamily: 'LucidaGrande', fontStyle: 'Regular', fontSize: 6, fillColor: newColor, justification: Justification.CENTER }; var text = doc.textFrames.pointText([0, 0]); var bottomlayer = doc.layers[doc.layers.length - 1]; text.move(bottomlayer, ElementPlacement.PLACEATBEGINNING); text.textRange.characterAttributes.size = textAttributes.fontSize; text.contents = textAttributes.contents; text.textRange.characterAttributes.textFont = textFonts.getByName(textAttributes.fontFamily); text.textRange.characterAttributes.textFont.style = textAttributes.fontStyle; text.textRange.characterAttributes.fillColor = textAttributes.fillColor; text.paragraphs[0].justification = textAttributes.justification;
 

mm100

Benutzer

Danke. Das macht es einfacher.

Beschreibe mir bitte noch ganz genau, was du machen möchtest, was funktioniert und was nicht so funktioniert, wie du es gerne hättest.

Also was muss am Schluss wie und wo in welchem Zustand in deiner Datei vorhanden sein?
 
Moin mm100,

Ausgangspunkt ist eine Datei mit unterschiedlich vielen Ebenen und unterschiedlichen Inhalten.

ich möchte, dass
- der Text "RA" mit den entsprechenden Attributen eingefügt wird (funktioniert)
- der Text in der linken oberen Ecke positioniert wird (funktioniert)
- der Text auf die unterste Ebene verschoben wird (funktioniert) (sollte diese "locked" sein, so muss sie entsperrt werden, aber das bekomme ich noch hin)
- der Textrahmen soll ausgewählt werden / aktiv sein (hier liegt der Hase noch im Pfeffer)

Also bis auf den letzten Punkt funktioniert eigentlich alles.
 

mm100

Benutzer

Du bist scheinbar auf einen interessanten Bug gestoßen.
Das Verschieben des Textrahmens in deinem Script bricht irgendwie die Möglichkeit, diesen anschließend per Script auszuwählen.

Sobald die Zeile zum Verschieben auskommentiert wird, lässt sich der Textrahmen ganz normal auswählen. Ist die Zeile aktiv, dann geht es nicht mehr. Dabei ist egal, wie man den Textrahmen ansteuert.

Also ohne das Verschieben lässt sich der Textrahmen im Script auswählen, nach dem Verschieben nicht mehr. (Ich kann dir den Grund dafür nicht sagen. So viel Zeit möchte ich zum Testen nicht investieren.)

Dann noch einmal zurück auf Anfang:
Das Entsperren der untersten Ebene kannst du zum Beispiel so erledigen
if (bottomlayer.locked == true) { bottomlayer.locked = false; }

Vielleicht gibt es Alternativen, deshalb:
Was willst du anschließend mit dem ausgewählten Textrahmen wirklich tun?
Muss hier unbedingt eine Auswahl vorgenommen werden?
Oder kann man das, was du mit dem Textrahmen machen möchtest, auch ins Script einbinden?
 
Moin mm100,

hmmm, auf den ersten Blick sieht es tatsächlich so aus, als würde der Textrahmen ausgewählt sein, wenn man die Zeile auskommentiert.
Wenn man sich aber die Ebenenpalette anschaut, sieht man jedoch, dass das Objekt NICHT ausgewählt wurde, obwohl es auf der Zeichenfläche einen Markierungsrahmen erhalten hat.

Der Hintergrund für das automatisierte Auswählen ist, dass ich das Objekt danach noch an die korrekte Position schieben möchte/muss, die jedesmal eine andere ist, so dass man das nicht per Script erschlagen kann. Dieses Schieben möchte ich gerne per Tastatur machen ohne vorher zur Maus greifen zu müssen, um das Objekt mit dieser zu markieren.

Meinetwegen kann der Textrahmen auch auf einer komplett neuen Ebene erstellt werden, aber auch so bekomme ich das Auswählen nicht hin...
 

mm100

Benutzer

Meinetwegen kann der Textrahmen auch auf einer komplett neuen Ebene erstellt werden,

Dann funktioniert es problemlos (ich habe nur die Variablennamen geändert, damit es mir beim Testen keine "Fehler aus dem Speicher" zieht:
var myDoc = app.activeDocument; var topLay = myDoc.layers.add(); var topLayName = 'LABEL'; var txt = topLay.textFrames.add(); txt.name = 'LABEL Text'; txt.contents = "inhalt"; topLay.hasSelectedArtwork = true;
 
Yesssss!

Das scheint genauso zu funktionieren, wie Papas Sohn sich das vorgestellt hat.
Vielen Dank für deine Hilfe!
Ich frickel noch ein bisschen weiter und wenn noch ein Problemchen auftauchen sollte, dann melde ich mich wieder.

Ick freu mir! :happy:
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.448
Mitglieder
67.557
Neuestes Mitglied
scheflo
Oben