Adressaufkleber mit TextEdit drucken (TE öffnet zwei Fenster)

D

djmaq

Aktives Mitglied
Thread Starter
Dabei seit
27.05.2008
Beiträge
276
Reaktionspunkte
0
Hallo.

Ich versuche gerade mit AppleScript und TextEdit einen Workaround zu bauen der mich nach einer Eingabe für die Empfängeradresse fragt und dann für einen TextEdit Dokument einen Adressaufkleber ausdruckt. Oben links ganz klein der Absender, unten rechts (auf der oberen Hälfte eines Din A4 Papieres) in die Empfängeradresse. TextEdit habe ich gewählt, da das ganze auch laufen soll wenn man keine Dritt-Software, beispielsweise MS Word, installiert hat.

Grundsätzlich funktioniert das auch bereits, allerdings wird die Formatierung nicht immer richtig umgesetzt. Teilweise passiert nichts, teilweise funktioniert das anpassen der Schriftgröße nicht, teilweise werden nur Teile der Empfängeradresse rechtsbünding ausgerichtet. Manchmal gibt es auch eine Fehlermeldung angeblich was im Code nicht stimmt.

Dadurch dass das Ergebnis immer ein Anderes ist, ist es natürlich schwer den Fehler zu finden. Ich glaube allerdings das es was damit zu tun hat das TextEdit immer zwei neue Dokumente öffnet, obwohl ich im Script nur einmal ein neues Dokument anlege (make new document)

Hat jemand eine Idee wie ich das Problem in den Griff bekomme?



Code:
tell application "Finder"
	display dialog "Empfängeradresse eingeben (neue Zeile mit shift + alt)" with title "Adressaufkleber drucken" default answer "" --linefeed
	set dialogresult to result
	set selectedButton to button returned of dialogresult
	get selectedButton
	set Empfaenger to text returned of dialogresult
end tell





tell application "TextEdit"
	--activate
	make new document --with properties {name:"Adressaufkleber"}
	--set the name of the front document to "Test"
	set the text of the front document to "Abs.:" & tab & "Vorname Nachname" & return & tab & "Straße Nr" & return & tab & "PLZ Stadt" & return & return & return & return & Empfaenger
	
	
	
	(*tell paragraph 7
		set properties to {alignment:left}
	end tell*)
	
	tell application "System Events"
		keystroke "Ä" using {command down}
	end tell
	
	set the size of paragraph 7 of the front document to 20
	--set justification of paragraph 7 to
	
	
end tell --
 
An dem AppleScript lässt sich zwar sicher nicht etwas verbessern, ich sehe aber ehrlich gesagt keinen Vorteil gegenüber einer ordentlich erstellten Vorlage. Wenn du dort z.B. eine Tabelle anlegst, dann musst du auch nur noch die Adresse eingeben und hast zumindest ein vernünftiges Textfeld.
 
Danke für die Rückmeldung.

Das Script hätte zumindest den Vorteil Das man weniger Mausklicks benötigt. Im Prinzip nur das Script starten und der Rest geht von allein.

Ich würde mir dennoch mal anschauen wie das mit der Vorlage in Textedit geht.
Kannst du mir zeigen wie das funktioniert?

Noch lieber nehm' ich natürlich Vorschläge wie ich es mit dem Script hin bekomme ;)
 
Ein Skript könnte so aussehen:

Code:
[COLOR=#5E6161][FONT=Verdana]-- Empgängeradresse abfragen:
[/FONT][/COLOR][FONT=Verdana][B]set[/B] [COLOR=#4f8f00]theAddress[/COLOR] [B]to[/B] [COLOR=#5730be]text returned[/COLOR] [B]of[/B] ([COLOR=#012fbe][B]display dialog[/B][/COLOR] "Empfängeradresse eingeben:" [COLOR=#012fbe]with title[/COLOR] "Adressaufkleber drucken" [COLOR=#012fbe]default answer[/COLOR] [COLOR=#812fdc]return[/COLOR] & [COLOR=#812fdc]return[/COLOR] & [COLOR=#812fdc]return[/COLOR])[/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- Zeilenumbrüche durch "<br>" ersetzen:[/FONT][/COLOR]
[COLOR=#812FDC][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]AppleScript'stext item delimiters[COLOR=#000000] [B]to[/B] "[/COLOR][/FONT][/COLOR]
[FONT=Verdana]"[/FONT]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]theAddress[COLOR=#000000] [B]to[/B] [B]every[/B] [/COLOR][COLOR=#0433ff][I]text item[/I][/COLOR][COLOR=#000000] [B]of[/B] [/COLOR]theAddress[/FONT][/COLOR]
[COLOR=#812FDC][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]AppleScript'stext item delimiters[COLOR=#000000] [B]to[/B] "<br>"[/COLOR][/FONT][/COLOR]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]theAddress[COLOR=#000000] [B]to[/B] [/COLOR]theAddress[COLOR=#000000] [B]as[/B] [/COLOR][COLOR=#0433ff][I]text[/I][/COLOR][/FONT][/COLOR]
[COLOR=#812FDC][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]AppleScript'stext item delimiters[COLOR=#000000] [B]to[/B] ""[/COLOR][/FONT][/COLOR]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- Speicherpfad als temporäre Datei festlegen:[/FONT][/COLOR]
[FONT=Verdana][B]set[/B] [COLOR=#4f8f00]savePath[/COLOR] [B]to[/B] ([COLOR=#012fbe][B]path to[/B][/COLOR] [COLOR=#5730be][I]temporary items[/I][/COLOR] [COLOR=#012fbe]as[/COLOR] [COLOR=#0433ff][I]text[/I][/COLOR]) & "Adressaufkleber.rtf"[/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- RTF-Datei erstellen:[/FONT][/COLOR]
[FONT=Verdana][COLOR=#012fbe][B]do shell script[/B][/COLOR] "echo '<p style=\"font-size:12;\">Abs.: Vorname Nachname<br>&emsp;&emsp; Straße Nr<br>&emsp;&emsp; PLZ Ort</p><br><br><br><br><p style=\"font-size:20;text-align:right;\">" & [COLOR=#4f8f00]theAddress[/COLOR] & "</p>' | textutil -inputencoding UTF-8 -stdin -format html -convert rtf -output " & [COLOR=#812fdc]quoted form[/COLOR] [B]of[/B] [COLOR=#812fdc]POSIX path[/COLOR] [B]of[/B] [COLOR=#4f8f00]savePath[/COLOR][/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- Datei öffnen:[/FONT][/COLOR]
[B]tell [/B][COLOR=#0433FF][FONT=Verdana][I]application[/I][/FONT][/COLOR][FONT=Verdana] "TextEdit" [/FONT][B]to [/B][COLOR=#0433FF][FONT=Verdana][B]open [/B][/FONT][/COLOR][COLOR=#0433FF][FONT=Verdana][I]alias [/I][/FONT][/COLOR][COLOR=#4F8F00][FONT=Verdana]savePath[/FONT][/COLOR]

Mit Vorlage meinte ich einfach eine Textdatei zu erstellen, die an Stelle der Empfängeradresse ein leeres Feld enthält (z.B. mit einer Tabelle). Die nötigen Schritte wären hier:

1. Doppelklick auf Datei
2. Klick in Tabelle
3. Text eingeben

Im Gegensatz zur Lösung mit Skript:

1. Doppelklick auf Skript
2. Text eingeben
3. Klick auf OK
 
Vielen Dank für das Script Pill. Funktioniert viel besser als meins.

Das du bei deinen Arbeitsschritten auf die gleiche Anzahl kommst liegt daran das beim Script noch etwas fehlt. Ich stelle aber gerade fest das es in meinem Script auch nicht drin steht obwohl ich es eigentlich schon drin stehen hatte.

Das TextEdit Dokument soll anschließend noch automatisch gedruckt werden, TextEdit danach ohne Speicherdialog geschlossen und das temporäre Dokument wieder gelöscht werden.

Was mich jetzt davon abhält es selber weiter zu probieren sind folgende zwei Punkte. das letzte "tell application" hat kein "end tell" . Warum ist das so? und wie kann man weiter machen. Ich kann ja nicht vor jedem Befehl "tell application" davor schreiben. Außerdem bin ich nicht sicher wo das Dokument gespeichert wird, und ohne Pfad kann ich die Datei natürlich nicht löschen.



Drucken und schließen geht wohl so

Code:
--Drucken
tell application "TextEdit" to print front document without print dialog

--Ohne speichern schließen
tell application "TextEdit" to quit saving no

Wobei mir nicht klar ist warum es beim Drucken "print front document" heißen muss. Schließlich wird das Dokument garnicht im Vordergrund geöffnet.

Bei löschen der Temporären Datei stehe ich wie gesagt auf dem Schlauch.
 
Wenn man an ein Programm nur einen Befehl senden möchte, dann kann man einfach "tell app xy to do something" schreiben. Das ist identisch zu
tell app xy
do something
end tell

Der Speicherpfad wird in der Variable savePath gespeichert. Da die Datei aber in den temporären Dateien gespeichert wird, musst du die Datei nicht löschen, da sie automatisch gelöscht wird.

print front document würde ich nicht benutzen, sondern stattdessen das document direkt ansprechen. Das hat den Vorteil, dass das Skript auch funktioniert, wenn mehrere Dokumente geöffnet sind.

Code:
[COLOR=#5E6161][FONT=Verdana]-- Empgängeradresse abfragen:
[/FONT][/COLOR][FONT=Verdana][B]set[/B] [COLOR=#4f8f00]theAddress[/COLOR] [B]to[/B] [COLOR=#5730be]text returned[/COLOR] [B]of[/B] ([COLOR=#012fbe][B]display dialog[/B][/COLOR] "Empfängeradresse eingeben:" [COLOR=#012fbe]with title[/COLOR] "Adressaufkleber drucken" [COLOR=#012fbe]default answer[/COLOR] [COLOR=#812fdc]return[/COLOR] & [COLOR=#812fdc]return[/COLOR] & [COLOR=#812fdc]return[/COLOR])[/FONT]
[FONT=Verdana]
[/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- Zeilenumbrüche durch "<br>" ersetzen:[/FONT][/COLOR]
[COLOR=#812FDC][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]AppleScript's text item delimiters[COLOR=#000000] [B]to[/B] "[/COLOR][/FONT][/COLOR]
[FONT=Verdana]"[/FONT]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]theAddress[COLOR=#000000] [B]to[/B] [B]every[/B] [/COLOR][COLOR=#0433ff][I]text item[/I][/COLOR][COLOR=#000000] [B]of[/B] [/COLOR]theAddress[/FONT][/COLOR]
[COLOR=#812FDC][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]AppleScript's text item delimiters[COLOR=#000000] [B]to[/B] "<br>"[/COLOR][/FONT][/COLOR]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]theAddress[COLOR=#000000] [B]to[/B] [/COLOR]theAddress[COLOR=#000000] [B]as[/B] [/COLOR][COLOR=#0433ff][I]text[/I][/COLOR][/FONT][/COLOR]
[COLOR=#812FDC][FONT=Verdana][COLOR=#000000][B]set[/B] [/COLOR]AppleScript's text item delimiters[COLOR=#000000] [B]to[/B] ""[/COLOR][/FONT][/COLOR]
[FONT=Verdana]
[/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- Speicherpfad als temporäre Datei festlegen:[/FONT][/COLOR]
[FONT=Verdana][B]set[/B] [COLOR=#4f8f00]savePath[/COLOR] [B]to[/B] ([COLOR=#012fbe][B]path to[/B][/COLOR] [COLOR=#5730be][I]temporary items[/I][/COLOR] [COLOR=#012fbe]as[/COLOR] [COLOR=#0433ff][I]text[/I][/COLOR]) & "Adressaufkleber.rtf"[/FONT]
[FONT=Verdana]
[/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- RTF-Datei erstellen:[/FONT][/COLOR]
[FONT=Verdana][COLOR=#012fbe][B]do shell script[/B][/COLOR] "echo '<p style=\"font-size:12;\">Abs.: Vorname Nachname<br>&emsp;&emsp; Straße Nr<br>&emsp;&emsp; PLZ Ort</p><br><br><br><br><p style=\"font-size:20;text-align:right;\">" & [COLOR=#4f8f00]theAddress[/COLOR] & "</p>' | textutil -inputencoding UTF-8 -stdin -format html -convert rtf -output " & [COLOR=#812fdc]quoted form[/COLOR] [B]of[/B] [COLOR=#812fdc]POSIX path[/COLOR] [B]of[/B] [COLOR=#4f8f00]savePath[/COLOR][/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#5E6161][FONT=Verdana]-- Datei öffnen, drucken und schließen:[/FONT][/COLOR]
[FONT=Verdana][B]tell[/B] [COLOR=#0433ff][I]application[/I][/COLOR] "TextEdit"[/FONT]
[COLOR=#0433FF][FONT=Verdana][B]open [/B][I]alias [/I][COLOR=#4f8f00]savePath[/COLOR][/FONT][/COLOR]
[FONT=Verdana]    [COLOR=#0433ff][B]print[/B][/COLOR] [COLOR=#0433ff][I]document[/I][/COLOR] "Adressaufkleber.rtf"[/FONT]
[COLOR=#0433FF][FONT=Verdana][B]quit [/B]saving [COLOR=#812fdc][I]no[/I][/COLOR][/FONT][/COLOR]
[B]end [/B][B]tell[/B]
 
  • Gefällt mir
Reaktionen: djmaq
Cool. Tausend Dank.
Sowohl für das Script als auch für die Nachhilfe in Scripting an sich bzw "tell" Befehl.

Ich wer das jetzt nochmal zu Hause checken wenn der Drucker auch als Hardware ansprechbar ist. Das sollte aber eigentlich kein Problem mehr werden.


PS: Die Eingabe der Empfängeradresse mit Zeilensprung über shift+alt+enter war bewusst so gewählt, um den Dialog mit drücken der Entertaste bestätigen zu können. Bekomme ich aber hin. Danke
 
Hab das jetzt noch n bisschen getestet und funktioniert soweit. Besten dank nochmal. Ich würde aber gerne die Empfängeradresse noch fett drucken lassen. Google hat mir da leider nicht geholfen. Kannst du mir da auch noch sagen wie das geht?
 
Die Formatierung wird im Abschnitt "RTF-Datei erstellen" mittels HTML/CSS festgelegt. In deinem Fall musst du nur das entsprechende style-Attribut um font-weight: bold; ergänzen.
 
Die Formatierung wird im Abschnitt "RTF-Datei erstellen" mittels HTML/CSS festgelegt.

Das hatte ich verstanden. Und bold war auch klar.

Aber den Attribut-Parameter font-weight konnte ich nicht finden. Ich werd's ausprobieren. Danke.
 
Getestet. Funktioniert. Für gut befunden. Besten dank nochmal für die Hilfe.
 
Zurück
Oben Unten