Hallo zusammen, ich suche ein Java-Script für InDesign CS auf PC. Es sollte einen Textrahmen erzeugen (kann auch ein Umrandung haben), z.B. auf dem Infobereich (rechts), außerhalb der Seite. Dort sollten folgende Infos stehen: -Dokumentenname (automatisch) -Datum (automatisch) -Uhrzeit (automatisch) -Benutzername der sich am PC angemeldeten Person (automatisch).
Wenn diese Script auchnoch dieses könnte (GENIAL!): -Druckstiele auswählen zur Erzeugung einer [Dokumentenname.ps]-Datei -PDF Export auswahl
Benutzername geht m.W. nicht, weil InDesign nichts von dem Benutzer weiß. JavaScript für InDesign bleibt in der application und hat keinen Zugriff auf das Betriebssystem (kann nur das, was InDesign kann).
Das genannte Skript kann keine Druckstile auswählen und auch nicht PDF exportieren. :-(
Das folgende Skript trägt ein paar Informationen zusammen, legt einen neuen Textrahmen neben der ersten Seite des Dokuments an und fügt die Infos dort ein.
Die Informationen sind: - Dateinamen, - Datum, - Uhrzeit, - Zeichenzahl, - Anzahl der Verknüpfungen, - verwendete Schriften.
Das Skript kann immer noch keine Druckstile auswählen und auch nicht PDF exportieren. :-( Dafür gibt's andere Skripte (nicht hier, aber anderswo -> recherchieren).
Vielen Dank für dieses Script. Hat suuuper geklappt.
Ich sollte unr noch eines machen können: einfach den ganzen Text in einer anderen Schriftart und Schriftgrösse ausgeben. (Wenn ein Textrahmen an der gleichen Stelle steht sollte dieser verwendet werden - geht das überhaupt????)
Ich hab zzwar was versucht, aber ich bekomme nur die erste Zeile (Dokumentenname) in der Schriftart hin, die restlichen Zeilen werden immernoch falsch wiedergegeben.
ich hatte - ungeprüft - gehofft, die Fußnoten würden auch berücksichtigt. Dem ist nicht so. Im Moment fällt mir dazu auch nichts ein. Die Fußnoteninhalte sind für Skripts etwas sperrig.
Mit "myDoc.footnotes.everyItem().texts[0].characters.length" (wie es etwa bei den Textrahmen ginge: "myDoc.textFrames.everyItem().texts[0].characters.length") kommst Du nicht weiter.
Die einzige Lösung, die mir einfällt: Fußnoten kurzfristig in normale Textrahmen verschieben, Zeichen zählen, Fußnoten wieder zurückschieben.
Das ist ziemlich umständlich. Wenn Du es dennoch probieren möchtest, könnte ich Dir die beiden Routinen zum kurzfristigen Verschieben der Fußnoten in Textrahmen und zum Zurückverschieben, die ich an anderer Stelle gebraucht habe, zukommen lassen.
vielen Dank für dein Angebot. Das wäre auf jeden Fall ein Fortschritt gegenüber jetzt, da dein Script ja alle Textrahmen in die Zählung einbezieht (im Gegensatz zur Info-Palette). Das ist genau, was ich brauche. Ich würde es also auf jeden Fall ausprobieren.
Hallo Martin, Danke nochmals für dein TOLLES Script.
Ich sollte nurnoch eines machen können: einfach den ganzen Text in einer anderen Schriftart und Schriftgrösse ausgeben. (Wenn ein Textrahmen an der gleichen Stelle steht sollte dieser verwendet werden - geht das überhaupt????)
Ich hab zwar was versucht, aber ich bekomme nur die erste Zeile (Dokumentenname) in der Schriftart hin, die restlichen Zeilen werden immernoch falsch wiedergegeben.
vielen Dank für die beiden Funktionen. Ich werde sehen, was ich hinkriege. Allerdings liegen meine JavaScriptfähigkeiten noch auf dem Level >Anfänger<, also rechne ich nicht gleich mit einem Erfolg. Aber versuchen kann ichs ja (morgen) und wenns klappt, machts auch Spass.
Bei der Gelegenheit: Dein >VertikalerKeil<-Script ist (fast) reine Magie, es spart mir gerade bei einem Buch mit vielen (kleineren) Zitaten eine Menge Arbeit und Zeit.
> Dein >VertikalerKeil<-Script ist (fast) reine Magie, es spart mir gerade bei einem Buch > mit vielen (kleineren) Zitaten eine Menge Arbeit und Zeit.
So eine Rückmeldung läuft natürlich runter wie Öl. Dann war dieses Skript also nicht für die Katz'. Danke.
Auch mir ist das VertikalerKeil-Skript eine große Hilfe. Zuletzt habe ich es heute eingesetzt. ;-) Und dabei hatte ich mir gewünscht, es ginge auch rückwärts. Also daß es statt dem Austreiben auch das Einbringen verstünde. Ich habe da so eine Idee im Hinterkopf ...
> Ich sollte nur noch eines machen können: > einfach den ganzen Text in einer anderen Schriftart und Schriftgrösse ausgeben. > Ich hab zwar was versucht, aber ich bekomme nur die erste Zeile (Dokumentenname) > in der Schriftart hin, die restlichen Zeilen werden immernoch falsch wiedergegeben.
Bei Dir steht "var myParagraph = myFrame.paragraphs.item(0); " myParagraph ist also der erste Absatz im Textrahmen. Und diesem weist Du die Schrift myFont zu. Die anderen Absätze bleiben unberücksichtigt.
Nun könntest Du eine Schleife machen und vom ersten (myFrame.paragraphs[0]) bis zum letzten (myFrame.paragraphs[-1]) die Schrift myFont und die anderen Attribute zuordnen.
Es geht aber auch einfacher: Du weist die Schrift dem gesamten Text vom Textrahmen myFrame zu. Der gesamte Text ist texts[0]. Die Zeile lautet also:
Und so weiter mit den anderen Eigenschaften.
Noch einfacher wäre es aber, wenn Du mit einem speziellen Absatzformat arbeiten würdest. z.B.
Und dann könntest Du dem Text dieses Absatzformat zuweisen:
> (Wenn ein Textrahmen an der gleichen Stelle steht sollte dieser verwendet werden - > geht das überhaupt????)
Ja, wenn der Textrahmen über ein eindeutiges Merkmal zu identifizieren ist. Ein Merkmal haben wir schon: er sitzt auf dem ersten Druckbogen (auch die Montagefläche zählt dazu). Ein weiteres Merkmal könnte der Inhalt (oder ein Teil davon sein).
Besser aber, wir verpassen ihm ein label (Skriptbezeichnung). Das ist so eine Art Etikett. Der Textrahmen könnte z.B. das label "Info" bekommen (myFrame.label = "Info"). Und beim Aufruf des Skripts wäre zu prüfen, ob auf dem ersten Druckbogen ein Textrahmen mit label "Info" vorhanden ist (dann nimm den, sonst mach' 'nen neuen).
Allerdings würde ich den Textrahmen mit dem label "Info" vor dem Zählen löschen, sonst wird dessen Inhalt beim Zählen der Zeichen auch berücksichtigt.
Viele Grüße Martin
(Dieser Beitrag wurde von Martin Fischer am 25. Jan 2006, 21:50 geändert)
an Deinem Skript habe ich noch etwas rumgebastellt: 1. diverse Infos ergänzt (Seite von bis; Zeichen gesamt, im Text, in Fußnoten, in Tabelle; Verknüpfungen) 2. Wenn das Absatzformat "Info" nicht vorhanden ist, wird es mit bestimmten Eigenschaften angelegt. 3. Wenn auf dem ersten Druckbogen ein Textrahmen mit dem label "Info" vorhanden ist, wird er gelöscht. Die "Geometrie" dieses Rahmens wird zur Verwendung bei einem neu anzulegenden Rahmen gesichert. 4. Die Info wird anngezeigt.
meine Behauptung, die Zeichen in den Fußnoten ließen sich auf dem direkten Weg nicht zählen, ist falsch. Weil ein falscher Befehl nicht funktionierte und weil die Fußnoten für Skripts tatsächlich etwas sperrig sind, habe ich fälschlicherweise gleich kurzgeschlossen und den Fehler beim eingeschränkten Skriptzugriff auf Fußnoten gesucht und nicht in einem falschen Befehl von mir.
Es ist richtig, daß "myDoc.footnotes.everyItem().texts[0].characters.length" nicht funktioniert, weil die Fußnoten nicht Kinder (children) des Dokuments sind, sondern der Textflüsse (stories). Der Befehl muß also richtig lauten:
Und schon werden die Zeichen in den Fußnoten gezählt.
Weil bei "myDoc.stories.everyItem().characters.length" die Zeichen der [b]Tabellen ebenfalls unberücksichtigt bleiben, habe ich diese extra hinzugenommen. Hier müssen die Zeichen in allen Zellen aller Tabellen aller Textflüsse gezählt werden:
Tabellen in Fußnoten sind in dem Skript oben (someInfo_2.jsx) nicht berücksichtigt.
Wenn Du die Fußnoten dennoch über den Umweg über die "Verschiebefunktionen" gezählt hast, bin ich neugierig auf Deinen Code.
Bitte entschuldige meine voreilige Behauptung bzgl. der Zählung der Zeichen in den Fußnoten.
Viele Grüße Martin
(Dieser Beitrag wurde von Martin Fischer am 26. Jan 2006, 08:50 geändert)
Guten MORGEN Martin, ich als kleines Anfängerwürmchen im Scripten, habe halt immernoch probleme. Zuerst mal vielen Dank für die schnelle Info von dir. Ich glaube, ich bin dir mal ne Tasse Kaffee schuldig.
Problem (Fehlermeldung)- Ich mach im InDesign CS2 ein NEUES-Doc auf, lasse dann dein "TOLLES" Script laufen, und es kommt nur:
Fehlernummer: 24 Zeile: 24 Quelle:
wenn jetzt noch was nicht geht, kann ich es nicht prüfen.
Ich muss schon sagen : Dieses Script gefällt mir immer mehr.
oh, da habe ich wohl wieder Bockmist gebaut. Diese Fehlermeldung taucht auf, wenn im Dokument keine Tabellen vorhanden sind (dann gibt es dort keine Zeichen zu zählen).
Ersetze die Zeile 24 durch folgende Zeile:
> Dieses Script gefällt mir immer mehr. Du meinst VIRTUELL? Denn praktisch konntest Du die Wirkung ja noch nicht überprüfen, oder?
Ich will jetzt aber nicht frech werden, aber würde noch was gehen?????!!!!! Farben fehlen noch. -Nur benutzte Farben (Anzahl) -Farbraum (RGB, CMYK, Vollton / mit Werten)
Farben gehen schon (myDoc.swatches.everyItem().name.join("\r")). Es gibt aber keine Eigenschaft, die besagt, ob die Farbe benutzt wird oder nicht. Da mußt Du alle Objekte, die Farbe haben können abklappern.
Den Farbraum bekommst Du über "model" (swatches[mySwatch].model). Die Werte über "colorValue" (swatches[mySwatch].colorValue).
Hat alles soweit funktioniert. Habe noch versucht etwas anders zu machen. Ich wollte diesen Textrahmen noch auf eine Neue Ebene stellen, das hat auch geklappt. Nur wenn es diese Ebene schon gibt, bricht das Script ab.
Ach ja, diesen erzeugten Textrahmen kann man auch verschieben, der Text wird dennoch aktualliesert. Das ist soweit ok.
Ich schick dir mal meinen Entwurf Nr.3.
Wenn ich nun eine Textverknüpfung , also 2 oder 3... Textrahmen mache, dann überträgt er nur in den ersten Rahmen den Inhalt, die anderen macht er nicht. Schade.....
> Ich wollte diesen Textrahmen noch auf eine Neue Ebene stellen, > das hat auch geklappt. Nur wenn es diese Ebene schon gibt, bricht das Script ab.
Dein Skript versucht bei jedem Aufruf eine neue Ebene mit einem fest vorgegebenen Namen anzulegen. Wenn bereits eine Ebene mit diesem Namen vorhanden ist, scheitert da Skript: es kann keine Ebene angelegt werden, die den Namen einer bereits vorhandenen Ebene trägt. Du mußt das Ganze in einen VERSUCH packen. Wenn die Ebene bereits vorhanden ist, soll sie nicht nocheinmal neu angelegt werden, sondern lediglich der Variable myNewLayer zugewiesen werden.
Den Textrahmen mußt Du nun auch auf die Ebene hieven (itemLayer:myNewLayer):
> Wenn ich nun eine Textverknüpfung , also 2 oder 3... Textrahmen mache, > dann überträgt er nur in den ersten Rahmen den Inhalt, die anderen macht er nicht.
Das verstehe ich nicht? Wie verknüpfst Du die Rahmen?
Die Verknüpfung der Rahmen ist keine Methode, sondern eine Eigenschaft eines Textrahmens: nextTextFrame bzw. previousTextFrame.
Ich vermute aber, daß ich Dich falsch verstanden haben. Welche Rahmen sollen zu welchem Zweck verknüpft werden?
Viele Grüße Martin
(Dieser Beitrag wurde von Martin Fischer am 26. Jan 2006, 12:43 geändert)
Was ich versucht hatte, war die Inhalte in verschiedene Rahmen eintragen zulassen. Z.B.
[1.-Rahmen:] DocName [2.-Rahmen:] Seitenzahl [3.-Rahmen:] Datum . . .
so was hatte ich gemeint.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ich hatte noch was vergessen : Wenn ich die Ebene "Info-Ebene" gesperrt habe, geht das Script nicht.
Kann man diese Ebene entsperren und nach getaner Arbeit wieder sperren? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Grüßle Volker
(Dieser Beitrag wurde von vhausw am 26. Jan 2006, 13:22 geändert)
> so was hatte ich gemeint. Dann brauchst Du a) mehrere verknüpfte Rahmen (s.o.) und b) ein Kommando für Umbruch in neuen Rahmen (als Absatzattribut oder Spezialzeichen Rahmenumbruch).
> Kann man diese Ebene entsperren und nach getaner Arbeit wieder sperren?
Viele Grüße Martin
(Dieser Beitrag wurde von Martin Fischer am 26. Jan 2006, 14:04 geändert)
Habe nun Mein/Dein/Unser-Script nochmals überarbeitet. Nun geht noch ein Fenster auf zur PDF Erzeugung.
Eines hätte ich noch, manchmal nimmt er einfach einen "Zeichenstile" der im Doc schon drinnen ist. Könnte man da auch noch so ein Zeichenformat "Info" anlegen, mit der gleichen Schrift wie der Absatz.
Du hast, wie die meisten Programmierer, das kleine "i" als Zähler verwendet. In der Kombination mit den eckigen Klammern "[]" wird dies hier im Forum als Anweisung für eine Kursivauszeichnung interpretiert.
Kannst Du Dein Skript nochmal editieren und den Zähler "i" global (ganzes Wort) durch "myCounter" o.ä. ersetzen?
Hallo Martin. Den unteren Teil zum PDF erstellen hab ich ja aus einem anderen Script entnommen.
Gibt es im InDesign CS2 eigentlich die Möglichkeit "einen Button" mit Script zu hinterlegen, sodaß ein Script ablaufen kann? Oder kann ich so ein Script auf eine Tastenbelegung bringen?
> Oder kann ich so ein Script auf eine Tastenbelegung bringen?
Ja, Schau mal bei den Tastenbelegungen. Da gibts einen Bereich Skripte.
Hier noch ein Beispielskript zum Drucken mit Dialog. Das Skript schickt jeweils "myRange" Seiten (Druckbögen) an den Drucker. Wenn mein Drucker zu viel Seiten auf einmal bekommt, steigt er (trotz seiner 98 MB) aus, macht einen Reset und fängt wieder von vorne an. Deswegen füttere ich ihn mit kleineren Häppchen.
Das Skript könnte Dir eine Orientierung für Deinen Wunsch "Druckstiele auswählen zur Erzeugung einer [Dokumentenname.ps]-Datei" bieten.
in Deiner letzten Nachricht verstehe ich fast gar nichts.
Das Skript oben hatte ich nicht extra für Deine Zwecke geschrieben, sondern Dir als ein Muster geschickt, an dem Du Dich bei der Entwicklung Deines eigenen PS-Druckskripts orientieren und bedienen können solltest.
Die Selbstverständlichkeit, mit der Volker annimmt, dass Du noch mal 2 bis 6 Stunden investierst, um exakt das Skript zu implementieren, das er sich vorstellt. Das erinnert mich so an meinen Neffen, wenn der was will, findet er das auch selbstverständlich, dass er das kriegt. Ich finde das faszinierend.