Seite 1 von 3
WRITER: "Abschrift drucken"
Verfasst: Mo, 13.07.2015 22:23
von peter007
Hallo Forum,
folgendes Ziel: es soll ein button in OO 4 erstellt werden, über den auf einem Schriftstück im Briefkopf oben rechts ein Rahmen mit dem Inhalt "Abschrift" gedruckt wird. Der Rahmen nebst Inhalt soll also nicht zum Dokument gespeichert werden, sondern nur beim Ausdruck nach Drücken des "Abschriften-buttons".
Am besten wäre es, wenn über einen button "Abschriftendruck" zB ein Original und anschließend auch ein Ausdruck mit "Abschrift" ausgedruckt würde (Hintergrund: das Original des Ausdrucks soll anschließend per Brief verschickt werden, die Abschrift ist für die Akte).
Meine Kenntnisse bzgl Makros, verstecktem Text ua sind leider sehr rudimentär und haben mich auch nach längeren Versuchen nicht zum Erfolg geführt.
Könnte mir vielleicht jemand helfen? Danke schon mal.
Moderation,4: verschoben in MAKROS (und allgem. Programmierung)-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 10:05
von Stephan
Könnte mir vielleicht jemand helfen?
Vielleicht dann wenn Du ein Beispieldokument zur Verfügung stellst, woraus ersichtlich ist wie das Ganze genau aussehen soll.
Gruß
Stephan
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 11:19
von peter007
Ich habe mal kurz einen Briefkopf nachgestellt und angehängt.
Der Rahmen mit "Abschrift" (oben rechts) soll - wie gesagt - nur bei klick auf einen vorher selbst erstellten button in der Menüleiste gedruckt und nicht zum Originaldokument gespeichert werden.
Optimal wäre es, wenn man einen Druckdialog erstellen könnte, der auch zB die Auswahl von Original, beglaubigter Abschrift und Abschrift für den Druck zulässt.
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 12:57
von komma4
Ist (eigentlich) ganz einfach
Code: Alles auswählen
SUB de66021
' 20150713
' Erzeugen eines Textrahmens mit Inhalt "ABSCHRIFT"
' Drucken des Dokuments, dann verwerfen der Änderungen
dok = ThisComponent
' Drucken des Originals
dok.print(Array())
' speichern (für "letztes Druckdatum")
dok.store()
' Rahmen
frame = dok.createInstance("com.sun.star.text.TextFrame")
' interner Name
frame.setName("Abschrift")
' Übernahme eines Stils aus den Rahmen-Vorlagen des Dokuments/der Vorlage
'frame.setPropertyValue("FrameStyleName","_ABSCHRIFT")
' Verankern an der Seite
frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
frame.attach(dok.CurrentController.ViewCursor)
' schreiben des Inhalts
cursor = frame.createTextCursor()
frame.insertString(cursor, "Abschrift!", True)
' Drucken des Dokuments
dok.print(Array())
' Verwerfen der Änderungen
dok.dispose()
END SUB
Du legst eine RAHMENVORLAGE in der Vorlage des Dokuments an, namens:
_ABSCHRIFT
Die gestaltest Du so, wie sie aussehen soll (Grösse, Position, ggfs. Rahmendicke, Farben, etc.)
Dann erzeugst Du eine Symbolleiste (in der Vorlage!), mit einer Schaltfläche, die auf das Makro (in der Vorlage!, STANDARD - Bibliothek!) verweist.
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 13:42
von peter007
Vorweg: SUPER, dass Du mir so schnell hilfst !
Ich bin allerdings offensichtlich ein Textverarbeitungs-DAU, wir haben erst vor kurzem von Word auf OO umgestellt und es lüppt deswegen nicht bzw. ich stelle mich zu blöd an
Der button ist jedenfalls da, gedruckt wird aber nichts.
Du legst eine RAHMENVORLAGE in der Vorlage des Dokuments an, namens: _ABSCHRIFT
Die gestaltest Du so, wie sie aussehen soll (Grösse, Position, ggfs. Rahmendicke, Farben, etc.)
Habe ich.
Dann erzeugst Du eine Symbolleiste (in der Vorlage!), mit einer Schaltfläche, die auf das Makro (in der Vorlage!, STANDARD - Bibliothek!) verweist.
Das begreife ich offensichtlich nicht richtig.
Was ich gemacht habe:
Extras > Makros > Makros verwalten > OO Basic. Unter "Makros aus": meine Vorlage ausgewählt > Neu > im Editor Dein Skript eingefügt.
Dann klick auf Symbolleisten anpassen > neue Symbolleiste erstellt (Name: Abschriftendruck, gespeichert in: der geöffneten Vorlage).
Symbolleisteninhalt hinzufügen > Bereich: OO Makros > meine geöffnete Vorlage ausgewählt > dort: Abschriftendruck > hinzufügen > alles bestätigt.
Klicke ich nun auf "Abschriftendruck", passiert nichts.
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 15:11
von komma4
Füge als vorletzte Zeile mal ein WAIT(2000) ein - das erzeugt eine Wartezeit von 2 Sekunden, damit der Druckauftrag erfolgreich gesendet werden kann.
Dann prüfe, ob in Deiner Vorlage ein Standarddrucker konfiguriert ist.
Ansonsten hast Du alles rictig gemacht, hier funktioniert das Makro so wie es soll.
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 16:02
von peter007
Hm, irgendwas scheint hier bei mir nicht zu stimmen.
Nun stürzt Openoffice (unter Mint 17.2) beim Ausführen des Makros mit einem Ausnahmefehler ab: "OpenOffice Fehler. com.sun.star.uno.RuntimeExecption".
Bin gerade etwas ratlos...
P.S.: auch unter Windows 7 stürzt OO mit einem "fatal error" nach Ausführen des Makros ab.
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 16:34
von peter007
Nun wurde zumindest kurzzeitig unter Windows die genaue Fehlermeldung angezeigt:
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 16:56
von komma4
Wie oben schon geschrieben:
einbauen. Das Zusammenstellen und Absenden des Druckauftrages braucht einige Zeit - zu dem Fehler kommt es dann, wenn zu schnell gespeichert / geschlossen wird.
Ggfs. mehr Sekunden Zeit geben!
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 19:55
von peter007
Habe nun die wait-time auf 10000 gesetzt: trotzdem schießt das Makro OO nach dem Ausführen sofort ab (auf einem Windows- und 2 Mint-PCs getestet).

Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 20:25
von peter007
Zeigt die Fehlermeldung in meinem Post
viewtopic.php?f=18&t=66021&p=257165#p257156 nicht, dass im Makro unter "doc.store()" irgendwas falsch ist?
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 21:53
von komma4
Nein, es zeigt (i.d.R.), dass beim Speichern was schief gelaufen ist.
Das Dokument wurde bereits einmal gespeichert (d.h.: es hat einen Dateinamen - nicht "Unbenannt 1")?
Irgendwelche Netzwerk-Laufwerke beteiligt?
Re: WRITER: "Abschrift drucken"
Verfasst: Di, 14.07.2015 23:02
von peter007
komma4 hat geschrieben:
Das Dokument wurde bereits einmal gespeichert (d.h.: es hat einen Dateinamen - nicht "Unbenannt 1")?
ja
komma4 hat geschrieben:
Irgendwelche Netzwerk-Laufwerke beteiligt?
nein
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 14:01
von komma4
dann versuchen wir mal:
Code: Alles auswählen
DIM PrintOpts(0) AS NEW com.sun.star.beans.PropertyValue
PrintOpts(0).Name = "Wait"
PrintOpts(0).Value = True
und PRO DRUCKAUFTRAG dann die Zeile
Das sollte auf die Rückmeldung warten, dass der Druckauftrag angenommen wurde. Nun sollte einem Speichern keine Exception mehr im Weg stehen.
Hilft das?
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 17:39
von peter007
Leider nein.
Deine Vorschläge sollte ich - nehme ich an - am Ende des Skriptes einfügen, richtig?
Gibt es eigentlich auch ein debug-logging für OO? Im syslog taucht ja nichts zu den Abstürzen auf.
Code: Alles auswählen
SUB de66021
' 20150713
' Erzeugen eines Textrahmens mit Inhalt "ABSCHRIFT"
' Drucken des Dokuments, dann verwerfen der Änderungen
dok = ThisComponent
' Drucken des Originals
dok.print(Array())
' speichern (für "letztes Druckdatum")
dok.store()
' Rahmen
frame = dok.createInstance("com.sun.star.text.TextFrame")
' interner Name
frame.setName("Abschrift")
' Übernahme eines Stils aus den Rahmen-Vorlagen des Dokuments/der Vorlage
'frame.setPropertyValue("FrameStyleName","_ABSCHRIFT")
' Verankern an der Seite
frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
frame.attach(dok.CurrentController.ViewCursor)
' schreiben des Inhalts
cursor = frame.createTextCursor()
frame.insertString(cursor, "Abschrift!", True)
' Drucken des Dokuments
dok.print(Array())
' Verwerfen der Änderungen
dok.dispose()
DIM PrintOpts(0) AS NEW com.sun.star.beans.PropertyValue
PrintOpts(0).Name = "Wait"
PrintOpts(0).Value = True
END SUB