Ich habe für unten beschriebenes Problem trotz langer Recherche noch keine passende Antwort gefunden. Daher wende ich mich, mit der Bitte um einen ersten Lösungsansatz, vertrauensvoll an Euch.
Voraussetzung: Mehrseitiges InDesign CS3 Dokument mit jeweils einer verknüpften Grafik (AI) pro Seite. Problem: Die Eigenschaften einer fertig platzierten AI-Verknüpfung (X-Wert, Y-Wert, Breite, Höhe, Referenzpunkt) sollen auf eine Grafik auf einer anderen (selbst gewählten) Seite übertragen werden. Theoretische Ablauf: erstes Objekt markieren --> Eigenschaften von erstem Objekt mit Skript zwischenspeichern --> zweites Objekt markieren --> zwischengespeicherte Eigenschaften aus erstem Objekt mittels Script zweitem Objekt zuweisen
Für eine Idee, wie die ausgelesenen Werte in einer zweiten Prozedur auf ein markiertes Objekt wieder angewendet werden können, wäre ich sehr dankbar.
Vielen Dank schon einmal allen, die sich meinem Problem annehmen.
Hans Gruner
Höhe/Breite/Position per Script auslesen und neu zuweisen
Ich denke mal es wäre einfacher, wenn Diebeiden Objekte markiert wären und man per Script dann die Werte vom Objekt der ersten Seite (gemetricbounds) auf das Objekt der zweiten Seite zuweist.
Höhe/Breite/Position per Script auslesen und neu zuweisen
Der Ansatz wäre sehr praktisch, nur leider sind die Objekte jeweils auf einer anderen Seite positioniert und damit nicht gleichzeitig zu markieren (oder ich habe die Option noch nicht entdeckt).
Vielen Dank für dieAntwort
Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
es gibt zwei Probleme: 1. Wie "weiss" das Script, ob es nun speichern oder zuweisen soll? 2. Wo speichert man die Werte?
Zum ersten Punkt: Man könnte zwei Scripts entwickeln. Aber das wäre in der Anwendung weniger komfortabel.
Man könnte auch das Intervall zwischen den beiden Auswahlen prüfen: Ist es grösser, als der im Script eingestellte Wert (z.B. 5 Sekunden), dann werden die Attribute gespeichert. Ist der Unterschied kleiner, dann wird der Auswahl die gespeicherten Werte zugewiesen.
Dieser Trick wird im Script InAuswahlEinfuegen angewendet. http://www.fachhefte.ch / Link "JavaScripts", Ordner "mac_os_x_d" (oder "windows_d"), "indesign_cs3" (oder "indesign_cs4):
Zum zweiten Punkt: Weil die Werte nicht im JavaScript gespeichert werden können (im Gegensatz zu einem AppleScript), könnte man sie entweder in eine Textdatei schreiben oder mit "insertLabel" im Dokument unterbringen.
Gruss, Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
Vielen Dank schon einmal für die schnelle Antwort:
zu 1. Das ich mit zwei Scripts leben muss, ist grundsätzlich ok. Denn besser zwei Scripts als Handarbeit. zu 2. Leider bin ich in diesem Punkt noch zu unerfahren. Ich bin davon ausgegangen dass es globale Variablen gibt, die während der Laufzeit des Programms/der Datei Gültigkeit haben, was aber offenbar nicht der Fall ist. Daher finde ich Deinen Ansatz die Daten in eine Textdatei auszulagern sehr interessant. Jedoch versagen bei dieser Umsetzung meinen Fähigkeiten, da ich mich als Einsteiger (was das scripting betrifft) bezeichne.
Ein kleines Beispiel für zwei Werte sollte aber ausreichen um den Rest selbst heraus zu finden.
Vielen Dank aber dennoch für die grundsätzliche Idee!
Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
zwei separate Scripts sind natürlich auch besser, wenn die Werte eines Musterrahmens auf viele weitere übertragen werden sollen.
Ein Beispiel zum Schreiben in eine Textdatei? Ich mache es so:
A. Speichern: Einen Array (= Liste) der Werte erstellen, diese Liste mit 'join("\r")' in eine Textkette verwandeln und das Ergebnis in eine Textdatei schreiben. B. Einlesen: Die gespeicherte Datei in eine Variable lesen. Mit 'split("\r") in eine Liste verwandeln und dann dem Zielrahmen die Werte zuweisen.
Ein Beispielscript? Vielleicht TextSchatten.js, erhältlich hier: http://www.fachhefte.ch / Link "JavaScripts", Ordner "mac_os_x_d" (oder "windows_d"), "indesign_cs3".
Das erwähnte "insertLabel" ist aber auch interessant. Ein Beispiel findet sich im oben erwähnten InAuswahlEinfuegen. Nur sollte anstelle von 'app.insertLabel' eher 'curDoc.insertLabel' benutzt werden, weil das Übertragen im selben Dokument geschieht.
Gruss, Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
Hi, in dem Skript (smoothPathUI.jsx und scatterSelected202.jsx) könntest Du vielleicht was finden, das Du als Ansatz nehmen und Dir daraus was passendes basteln könntest. Ich speichere dort Objekteigenschaften in das CustomLabel des Objects und lese Sie später wieder aus und wende die Werte an - ein selbstgebasteltes Objekt-bezogenes UNDO.
Hallo, Stephan! Das mit dem selbstgebastelten Undo ist mir schon positiv aufgefallen. Toll! Und nachahmenswert. Werd's mir mal genauer ansehen. ***** Mit herzlichem Gruß, Uwe Laubender
Höhe/Breite/Position per Script auslesen und neu zuweisen
Dank Deines Hinweises habe ich es schon einmal geschafft, die Eigenschaften in ein Textdatei zu schreiben. Vielleicht hast Du noch eine Idee für mich, wie ich (exemplarisch) einen Wert aus der Textdatei wieder einer Variale übergeben kann. In der Praxis würde ich nur die Werte (ohne vorangestellten Text) in die Datei schreiben. Ich bräuchte also einen Tipp wie ich eine ganze Zeile auslesen kann bzw. wie ich auf eine bestimmte zeile zugreifen kann.
Schon einmal vielen Dank
Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
die Ideen habe ich ja oben schon angegeben: A. und B.. Und der entsprechende, funktionierende Code befindet sich im TextSchatten-Script.
Die Werte zeilenweise in die Datei zu schreiben ist möglich. Ich würde dies aber nur so machen, wenn die Werte in einer Schleife ermittelt und einzeln, als aktuelles Ergebnis des Umgangs, in die Datei geschrieben wird.
Wenn Deine Werte in der Datei gespeichert sind (aber, wie Du sagst, ohne Etiketten), kann man so vorgehen: 1. Die Datei in eine Variable lesen. 2. Mit 'split("\r") in eine Liste (= Array) verwandeln. 3. Den Variablen der Reihe nach die Elemente des Arrays zuweisen.
Angenommen, in der Datei ist Folgendes gespeichert ...
... dann wird die Variable (nennen wir sie "valString"), in welche die Datei gelesen wurde, dasselbe enthalten.
Jetzt diesen String in einen Array verwandeln ...
... und das Ergebnis sieht so aus:
Und so wird den Variablen der entsprechende Wert zugewiesen:
Ich habe absichtlich andere Namen für die Variablen genommen, denn all dieses "my"-Zeugs sieht schlimm aus.
Gruss, Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
Vielen Dank einmal wieder für Deine Tipps. Ich bin auf einem guten Weg, da ich jetzt auch die Textdatei auslesen kann. Allerdings klappt es mit dem Zerlegen in ein Array nach Deiner Vorlage noch nicht (siehe Script 2). Was mache ich hier falsch?
Danke für die unermüdliche Hilfe sagt Hans!
Script 1 (Eigenschaften in Textdatei schreiben)
Script 2 (Eigenschaften aus Textdatei auslesen)
Höhe/Breite/Position per Script auslesen und neu zuweisen
statt die Daten in eine externe Datei zu schreiben könntest Du sie, wie Hans Haesler oben bereits hingewiesen hat, in einem Label (des Dokuments oder – dokumentübergreifend – der Anwendung) hinterlegen.
Halte Ausschau nach den Befehlen insertLabel() und extractLabel().
Etwa so:
Viele Grüße Martin
(Dieser Beitrag wurde von Martin Fischer am 3. Nov 2009, 08:05 geändert)
Höhe/Breite/Position per Script auslesen und neu zuweisen
zum Konvertieren des eingelesenen Strings mit 'split()' musst Du nur anstelle von "\r" ein "\n" verwenden.
Anstelle des zeilenweisen Schreibens in die Datei wäre es besser, alle Werte zuerst in einen String zu packen. Vorteil: Man kann den Trenner bestimmen. Das muss nicht unbedingt Return oder New Line sein. Ich verwende auch Zeichen wie "¶" (= Alt + 0182). Nach dem Einlesen verwendet man dasselbe Trenn-Zeichen.
Bitte versuche es auch mit den von Martin ebenfalls empfohlenen Labeln. Den entsprechenden Code findest Du im zuerst erwähnten Script InAuswahlEinfuegen.js. Aber wie gesagt, die Label ins Dokument schreiben ('curDoc' verwenden, statt 'app').
Gruss, Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
Vielen Dank für Deine Tipps. Ich habe es (wenn auch aus Expertensicht nicht unbedingt ganz elegant) aber für mich ausreichend gelöst. Die Scripte machen genau das, was ich brauche. Hier der Vollständigkeit halber noch einmal der gesamte Code:
Skript 1: Objektdaten in Datei schreiben
Skript 2: Daten aus Datei auslesen und markiertem Objekt zuweisen
Nochmal vielen Dank!
Hans
Höhe/Breite/Position per Script auslesen und neu zuweisen
für meine Aufgabenstellung (die Positionen von mehreren platzierten Rahmen auslesen) würde das erste Skript evtl. funktionieren. Leider liest es aber nur die Eigenschaften des aktuell aktivierten Rahmens aus. Wäre es ohne großen Aufwand möglich, dass die Positionen aller aktivierter leerer Rahmen in eine Textdatei geschrieben werden?
Vielen Dank für Eure Hilfe. Annett
Höhe/Breite/Position per Script auslesen und neu zuweisen
Was ist für dich "ohne großen Aufwand"? Das Skript müsste extra an deine Anforderungen angepasst werden; wäre aber machbar. Der entsprechende Aufwand sollte dann auch vergütet werden!