Seite 2 von 3
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 18:18
von komma4
Das DIM gehört an den Anfang - und dann die .print() Zeilen austauschen
Wenn Du Meldungen loggen willst, dann starte soffice von der Kommandozeile und leite um
soffice > log.txt
Es sei noch angemerkt: hier funktioniert das Makro (mit einem PDF-Drucker), eingerichtet über Vorlage, mit Symbolleiste ohne Probleme.
Versuche es doch mal mit einem neuen Benutzer (oder: gesichertem und dann gelöschtem OOo-Benutzerverzeichnis)
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 18:27
von peter007
ok, ich bin nun endlich etwas weiter.
Ein Fehler war, dass im Skript folgende Zeile auskommentiert war:
Code: Alles auswählen
'frame.setPropertyValue("FrameStyleName","_ABSCHRIFT")
Ich habe also das ` am Anfang entfernt, nun wird der Rahmen mit Abschrift gedruckt.
Allerdings zerschießt die Zeile
am Ende den Writer, d.h. wenn ich auskommentiere, bleibt OO zwar offen, der Aufdruck "Abschrift" wird aber (natürlich) auch nicht entfernt. Eine Fehler wird hier aber nicht geloggt.
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 18:34
von peter007
Habe gerade über Tante Google gelernt

, dass die Python-Anweisung dok.dispose das Dokument schließt, d.h. der Writer schmiert nicht ab, sondern wird gewollt geschlossen.
So wie ich als Skript-Unkundiger das verstehe, müsste doch also zum Schluss "nur noch" die Anweisung stehen, dass durch das Skript erfolgte Änderungen rückgängig gemacht bzw. nicht gespeichert werden, das Dokument aber geöffnet bleibt.
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 18:49
von komma4
dok.dispose() ist eine StarBasic Anweisung
SDK /com/sun/star/lang/XComponent.html#dispose hat geschrieben:The owner of an object calls this method to explicitly free all resources kept by this object and thus break cyclic references.
Die Funktion entspricht einem
Datei>Schliessen>[Nein zum Speichern] - also genau das, was Du Dir vorstellst.
Zu einer
Exception kann es dann (eigentlich) nur kommen, wenn der Druckauftrag noch nicht fertig ist.
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 19:03
von Karolus
komma4 hat geschrieben:dok.dispose() ist eine StarBasic Anweisung
SDK /com/sun/star/lang/XComponent.html#dispose hat geschrieben:The owner of an object calls this method to explicitly free all resources kept by this object and thus break cyclic references.
Die Funktion entspricht einem
Datei>Schliessen>[Nein zum Speichern] - also genau das, was Du Dir vorstellst.
.dispose ist eine Api-methode und sowohl aus Basic als auch aus Python aufrufbar.
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 19:12
von komma4
Ja
Siehst Du, was hier noch schief laufen könnte?
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 22:20
von peter007
komma4 hat geschrieben:
Die Funktion entspricht einem Datei>Schliessen>[Nein zum Speichern] - also genau das, was Du Dir vorstellst.
Da haben wir uns vielleicht falsch verstanden: das Dokument soll geöffnet bleiben und der Abschriftenvermerk nur für den Druck eingesetzt und dann wieder aus dem (noch geöffneten) Dokument gelöscht werden.
Re: WRITER: "Abschrift drucken"
Verfasst: Mi, 15.07.2015 23:42
von komma4
peter007 hat geschrieben:das Dokument soll geöffnet bleiben und der Abschriftenvermerk nur für den Druck eingesetzt und dann wieder aus dem (noch geöffneten) Dokument gelöscht werden.
Ok, habe ich falsch verstanden
neue Version:
Code: Alles auswählen
SUB de66021
' 20150713
' Erzeugen eines Textrahmens mit Inhalt "ABSCHRIFT"
' Ankern des Rahmens an jeder Seite des Dokuments
' Drucken des Dokuments, dann verwerfen der Änderungen
' 20150716
' Rücknahme der Änderung, Dokument nicht schliessen
' 20150715
' PrintOpts
DIM PrintOpts(0) AS NEW com.sun.star.beans.PropertyValue
PrintOpts(0).Name = "Wait"
PrintOpts(0).Value = True
dok = ThisComponent
' der Rahmen
frame = dok.createInstance("com.sun.star.text.TextFrame")
' interner Name
frame.setName("Abschrift")
' Verankern an der Seite
frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
frame.attach(dok.CurrentController.ViewCursor)
' Übernahme eines Stils aus den Rahmen-Vorlagen des Dokuments/der Vorlage
frame.setPropertyValue("FrameStyleName","_ABSCHRIFT")
' schreiben des Inhalts
cursor = frame.createTextCursor()
frame.insertString(cursor, "Abschrift!", True)
cursor.gotoStart(FALSE)
cursor.gotoEndOfParagraph(TRUE)
' Drucken des Dokuments
dok.print(PrintOpts)
' Rücknahme der Textbox
frame.dispose()
' "Keine Änderungen am Dokument"
dok.Modified = False
END SUB
Klappt es damit?
Re: WRITER: "Abschrift drucken"
Verfasst: Do, 16.07.2015 23:21
von peter007
Nein, leider wieder nicht. Es erscheint folgender Fehler:

- 1.jpg (34.34 KiB) 6417 mal betrachtet
Mit dem folgenden Skript wird zwar der Abschriftenrahmen eingefügt, aber nicht mehr gelöscht:
Code: Alles auswählen
SUB Abschriftendruck
' 20150713
' Erzeugen eines Textrahmens mit Inhalt "ABSCHRIFT"
' Drucken des Dokuments, dann verwerfen der Änderungen
dok = ThisComponent
' Drucken des Originals
dok.print(Array())
' 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
So langsam verzweifle ich

Re: WRITER: "Abschrift drucken"
Verfasst: Sa, 18.07.2015 20:31
von peter007
Keiner mehr eine Idee?
Re: WRITER: "Abschrift drucken"
Verfasst: Sa, 18.07.2015 22:06
von komma4
Zum Verwerfen des Rahmens frame.dispose() verwenden?!
Re: WRITER: "Abschrift drucken"
Verfasst: So, 19.07.2015 22:56
von peter007
Hat leider auch nichts geändert.
Da wir hier momentan nicht weiterkommen: es ist von Anfang an so, dass der Rahmen in einer Breite von 0,57 cm und mit automatischer Höhe eingefügt wird. Das Ganze sieht dann so aus, obwohl ich in der Rahmenvorlage als feste Breite 4 cm und feste Höhe 0,8 cm vergeben habe:
Re: WRITER: "Abschrift drucken"
Verfasst: Mo, 20.07.2015 07:24
von peter007
Eine Lösung ist da !
Ich habe auf OO 3.4.0 "downgegraded und, siehe da, der Abschriftendruck (und das anschließende automatische Löschen des Rahmens im Dokument) lüppt plötzlich.
Es muss also vom Versionssprung von OO 3 auf 4 irgend etwas an der Interpretation der Basic-Befehle geändert worden sein. Sei's drum, wir werden erst mal die 3er Version nehmen, da die für uns wichtigen Funktionen dort auch enthalten zu sein scheinen.
Danke an alle, die geholfen haben !
Re: WRITER: "Abschrift drucken"
Verfasst: Mo, 20.07.2015 11:49
von komma4
Ich habe den geposteten Code hier mit AOO 4.1.1 erfolgreich getestet.
Re: WRITER: "Abschrift drucken"
Verfasst: Mo, 20.07.2015 23:26
von peter007
Hm, komisch, kannst Du Dir einen Grund vorstellen, warum das bei mir erst nach dem Downgrade lief?