Hallo,
ich bin mir nicht sicher, dass es hier im richtigen Forum ist, bitte ggf. verschieben. Danke!
Folgende Fragen:
Welche Übergabeparameter (außer "(OUTFILE)") stehen mir zur Verfügung bei der Verwendung eines (eigenen) Skriptes das als PDF-Drucker mittels spadmin als Drucker registriert ist?
Wie kann ich eine Liste der geöffneten Dokumente (vielleicht sogar des gerade aktiven) in OpenOffice mittels eines Shellskriptes bekommen?
Hintergrund:
Wenn ich einen Seriendruck ausführe (über Datei>Drucken und dann die Abfrage nach dem Seriendruck mit Ja bestätige), wird als Titel der erzeugten Postscript-Datei ein String erzeugt ohne Zusammenhang zum ursprünglichen Dateinamen des .odt-Dokumentes, (OUTFILE) ist gleichlautend mit ".pdf" angehängt...
Ich brauche aber irgendwie den Originaldateinamen im Druckskript, oder eine von mir im Dokument setzbare Variable, die auch an die per Seriendruck-Funktion erzeugte ps-Datei weitergegeben wird.
Irgendwelche Ideen?
Danke,
J-K
Geöffnete Dokumente auslesen/Übergabeparameter PDFDruck-Skri
Moderator: Moderatoren
-
- ****
- Beiträge: 115
- Registriert: Di, 10.01.2012 10:51
- Kontaktdaten:
Re: Geöffnete Dokumente auslesen/Übergabeparameter PDFDruck-
Hallo JK
du kannst aus deinem Skript ein Makro starten, dass diese Parameter ausließt und sie dann an dein Skript zurück gibt.
Der Aufruf sieht aus der windows-Schell dann so aus:
I:\Program Files (x86)\LibreOffice 3\program>soffice.exe macro:///standard.module3.fnComponent_Names
Und Das Makro(abgewandelte form des Makros aus Andrew Pitonyaks Buch "OpenOffice.org Macros Explained", Kapittel 12.3.2)
Da ich mich leider nicht so gut mit Shell-Skripten auskenne, weiß ich nicht, ob dir das wirklich hilft.
Ich habe aber gerade herausbekommen, wie man mit einem Python Skript aus der Kommandozeile z.B. den Name des aktuellen Dokuments Auslesen Kann:
Zuerst musst du OO oder LO mit den folgenden Parametern starten:(auch wenn es schon offen ist.)
Dann Startest du folgendes Skript (Name: bei mir:)
Und so startest du das Skript:
Es Liefert dir dann den Titel des aktuellen Dokuments auf die Standard-Ausgabe
Gruß Frieder
Ich denke schon, dass du hier richtig bist.JK hat geschrieben:Hallo,
ich bin mir nicht sicher, dass es hier im richtigen Forum ist, bitte ggf. verschieben. Danke!
Ich weiß zwar nicht, welche Übergabeparameter dir zur Verfügung stehen,aber ich kann dir vielleicht sagen, wie du eine Liste der geöffneten Dokumente, und des aktiven Dokuments bekommst:JK hat geschrieben:Folgende Fragen:
Welche Übergabeparameter (außer "(OUTFILE)") stehen mir zur Verfügung bei der Verwendung eines (eigenen) Skriptes das als PDF-Drucker mittels spadmin als Drucker registriert ist?
Wie kann ich eine Liste der geöffneten Dokumente (vielleicht sogar des gerade aktiven) in OpenOffice mittels eines Shellskriptes bekommen?
du kannst aus deinem Skript ein Makro starten, dass diese Parameter ausließt und sie dann an dein Skript zurück gibt.
Der Aufruf sieht aus der windows-Schell dann so aus:
I:\Program Files (x86)\LibreOffice 3\program>soffice.exe macro:///standard.module3.fnComponent_Names
Und Das Makro(abgewandelte form des Makros aus Andrew Pitonyaks Buch "OpenOffice.org Macros Explained", Kapittel 12.3.2)
Code: Alles auswählen
function fnComponent_Names () As String
Dim vComps 'Objekt des enumerierten Zugriffs
Dim vEnumerate 'Enumerationsobjekt
Dim vComp 'Einzelne Komponente
Dim sTitle AS String ' Ausgabe-String
REM Die Bibliothek Tools wird geladen, weil deren Modul Strings
REM die Funktion GetFileNameWithoutExtension enthält
GlobalScope.BasicLibraries.LoadLibrary("Tools")
vComps=StarDesktop.getComponents() 'com.sun.star.container.XEnumerationAccess
If NOT vComps.hasElements() Then 'Das muss ich nicht tun, aber
fnComponent_Names= "Es gibt keine Komponenten" 'es zeigt, dass ich es tun kann
Exit function
End If
sTitle =GetFileNameWithoutExtension( StarDesktop.getCurrentComponent.Title )'Aktives dokument
vEnumerate = vComps.createEnumeration() 'com.sun.star.container.XEnumeration
Do While vEnumerate.hasMoreElements() 'Gibt es noch weitere Elemente?
vComp = vEnumerate.nextElement() 'Das nächste Element
REM Der Titel wird nur von Dokument-Komponenten bezogen
REM Dadurch wird beispielsweise die IDE überschlagen
If HasUnoInterfaces(vComp, "com.sun.star.frame.XModel") Then
sTitle= sTitle & Chr(10) & GetFileNameWithoutExtension( vComp.Title )
'Statt Chr(10) kannst du natürlich auch andere Trenner benutzen z.B: ","
End If
Loop
fnComponent_Names = sTitle
Rem aufruf deines Skriptes, und übergabe der parameter:
'Shell("/Pfad zu deinem Spript/Skript.h " & sTitle())'aufruf deines Skriptes, und übergabe der parameter
Rem Eine andere Möglichkeit wäre, dass du die Namen in eine Tämporäre Datei schreibst,
Rem und diese Datei dann aus deinem Skript ausließt.
End function
Ich habe aber gerade herausbekommen, wie man mit einem Python Skript aus der Kommandozeile z.B. den Name des aktuellen Dokuments Auslesen Kann:
Zuerst musst du OO oder LO mit den folgenden Parametern starten:(auch wenn es schon offen ist.)
Code: Alles auswählen
c:\Programe\OpenOffice1.1\program> soffice "-accept=socket,host=localhost,port=2002;urp;"
Code: Alles auswählen
#import socket # only needed on win32-OOo3.0.0
import uno
# get the uno component context from the PyUNO runtime
localContext = uno.getComponentContext()
# create the UnoUrlResolver
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext )
# connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
# access the current writer document
model = desktop.getCurrentComponent()
Title = model.Title
print("%s" % (Title))
Code: Alles auswählen
I:\Program Files (x86)\LibreOffice 3\program> .\python C:\Users\Nansen\Desktop\T
est.py
Gruß Frieder
Re: Geöffnete Dokumente auslesen/Übergabeparameter PDFDruck-
Hallo Frieder D.,
vielen Dank für das python-Skript, funktioniert auch unter Ubuntu Linux 11.10 mit LibreOffice 3.4.4 hervorragend!
Falls noch jemand eine Idee hat, wie ich OOo bzw. LO dazu bewegen kann, beim Seriendruck den ursprünglichen Dokumentnamen weiterzugeben, bin ich für Vorschläge dankbar.
Sorry für das "halbe" Crossposting, dass ich in meiner Ungeduld erstellt habe...
Dank und Gruß,
JK
vielen Dank für das python-Skript, funktioniert auch unter Ubuntu Linux 11.10 mit LibreOffice 3.4.4 hervorragend!
Falls noch jemand eine Idee hat, wie ich OOo bzw. LO dazu bewegen kann, beim Seriendruck den ursprünglichen Dokumentnamen weiterzugeben, bin ich für Vorschläge dankbar.
Sorry für das "halbe" Crossposting, dass ich in meiner Ungeduld erstellt habe...
Dank und Gruß,
JK
Re: Geöffnete Dokumente auslesen/Übergabeparameter PDFDruck-
Hallo,
leider funktioniert es doch noch nicht so, wie es sollte. Als ich die Erfolgsmeldung gab, hatte ich einfach nur den Code ausgeführt. Das Skript von Hand gestartet funktioniert auch. Wenn das Skript aber als Drucker von LO aufgerufen wird, bekomme ich plötzlich eine Fehlermeldung:
Ich verwende LibreOffice 3.4.4 (unter Ubuntu Linux 11.10 (64bit)). Zum Testen folgendes Skript
mit der Druckerverwaltung (spadmin) als Drucker hinzufügen (PDF-Konverter) und dann ein Writer-Dokument mit diesem "Drucker" drucken. Es ist nicht notwendig einen Serienbrief zu drucken, um den Fehler zu bekommen…
Kann da jemand helfen?
Vielen Dank schon mal,
JK
leider funktioniert es doch noch nicht so, wie es sollte. Als ich die Erfolgsmeldung gab, hatte ich einfach nur den Code ausgeführt. Das Skript von Hand gestartet funktioniert auch. Wenn das Skript aber als Drucker von LO aufgerufen wird, bekomme ich plötzlich eine Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "/home/jk/bin/LO-aktivesDokument.py", line 15, in <module>
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
__main__.NoConnectException: Connector : couldn't connect to socket (Success)
Code: Alles auswählen
#~/bin/aktives-LO-Dokument-Drucker.sh
#!/bin/bash
skriptpfad=`readlink -f "$0"`
arbeitspfad=$(dirname "$skriptpfad")
soffice "--accept=socket,host=localhost,port=2002;urp;"
offenes_Writer_Dokument=$("$arbeitspfad"/LO-aktivesDokument.py)
soffice "--unaccept=socket,host=localhost,port=2002;urp;"
echo $offenes_Writer_Dokument
Kann da jemand helfen?
Vielen Dank schon mal,
JK