LibreOffice - Speichern und gleichzeitig PDF-Export (Makro?)

Mickey Cohen

Commander
Registriert
Mai 2015
Beiträge
2.825
Hallo,

ich suche eine Möglichkeit, mit einem Tastatur-Shortcut in LibreOffice 7.6 ein Dokument zu speichern und gleichzeitig als pdf zu exportieren.

Dabei möchte ich nur einmal den Dateinamen eingeben müssen, falls die Datei noch nicht exisitiert.

Wenn die Datei hingegen schon existiert (also in den fällen, in denen ich eine bestehende .odt-datei bearbeitet habe) möchte ich keine rückfragen bekommen, ob die existierende datei überschrieben werden darf, egal ob bereits eine .odt-datei oder eine entsprechende .pdf-datei existiert.

die .pdf-datei muss im gleichen verzeichnis mit dem gleichen namen wie die .odt-datei gespeichert werden (nur die dateiendungen sollen natürlich verschieden sein, versteht sich).

Beispiel:

ich habe eine datei neu erstellt und möchte diese gleichzeitig speichern und als pdf exportieren.
also werde ich durch das "speichern"-portal gefragt, wie die datei heißen soll und in welchem verzeichnis sie gespeichert werden soll.
ich wähle also bspw. den ordner C:\foo aus und gebe ein, dass die datei bar.odt heißen soll => die datei wird so gespeichert. gleichzeitig wird das dokument als eine pdf-datei im ordner C:\foo mit dem dateinamen bar.pdf exportiert.


nun bearbeite ich mich libreoffice die datei C:\foo\bar.odt und speichere diese.
ich werde absolut nichts gefragt, sowohl die datei C:\foo\bar.odt als auch C:\foo\bar.pdf werden überschrieben.


mein lösungsansatz: ein makro verwenden (wenn es anders besser geht, dann sagt mir das bitte)

also habe ich einmal den speichern-befehl und einmal den pdf-exportieren-befehl aufgezeichnet. funktioniert auch fast, nur dass ich nicht weiß, wie ich bei der .pdf-datei den pfad und den dateinamen (die ich ja im speichern-portal auswähle/eingebe) übergebe.

Code:
REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Users/ich/Desktop/Unbenannt%201.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())


end sub

in zeile 20 müsste also mMn. kein absoluter pfad, sondern dieser als variable, abhängig von meiner eingabe im speichern-portal erscheinen.

danke!

edit:

habe es nach etwas googeln und basteln herausgefunden. mit diesem code funktioniert es:


Code:
REM  *****  BASIC  *****

Sub Main

rem define variables
dim document   as object
dim dispatcher as object

rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem save
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

rem get variable for filename and path
GlobalScope.BasicLibraries.LoadLibrary("Tools")
sFile = GetFileNameWithoutExtension(ThisComponent.getLocation())

rem export directly to pdf
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = sFile & ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())


End Sub

Sub Dummy

End Sub

Anmerkung: die Subroutine Sub Dummy ist nötig, damit man das makro in "Extras -> Anpassen -> Tastatur" einem Shortcut zuweisen kann. Man muss offenbar erst einen anderen eintrag im Feld "funktion" anklicken, nachdem man in der linken liste sein makro ausgewählt hat, sonst bleibt der "Ändern"-butten ausgegraut (bug!). wenn keine andere subroutine (=funktion) im makro vorhanden ist, geht das aber nicht. also kurz eine Dummy subroutine erstellt, die man anklicken kann. nachdem man diese angewählt hat, kann man die Main-Funktion anwählen und der "Ändern"-button wird klickbar.
 
Zuletzt bearbeitet:
Zurück
Oben