Inhalt einer ODT Datei Drucken - Python Print Open Document

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 189
Registriert: Dienstag 14. Juni 2011, 20:03

Hallo,

ich möchte aus einem Programm die dort hinterlegten Anhänge (ODT) einlesen und diese ausdrucken. Was würdet Ihr mir dafür empfehlen? Ist dabei zu beachten, dass der Default-Drucker in der ODT Datei hinterlegt ist?

Das ganze muss vorerst nur unter Linux laufen. Ich habe ein wenig mit wxPython gespielt bin aber zu keinem Ergebnis gekommen.

MfG

martinjo
BlackJack

@martinjo: Das würde ich über OpenOffice/LibreOffice machen.
Benutzeravatar
martinjo
User
Beiträge: 189
Registriert: Dienstag 14. Juni 2011, 20:03

Ich würde dies gerne direkt aus einem Python Skript erledigen. Mann kann es zwar auch mit OpenOffice direkt drucken (soffice -p) jedoch wird dann für jede Datei kurz der OpenOffice Startbildschirm angezeigt. Es wird quasi für jedes Element 1x OpenOffice geöffnet und ein Druckauftrag gesendet. Dass brauch viele Ressourcen und kann mitunter auch sehr lange dauern bei +80 Seiten. Ein anderes Problem ist der Default-Drucker der nicht in allen Dokumenten gleich ist.
BlackJack

@martinjo: Ich glaube Dir ist nicht klar was in so einer Datei steckt. Das sind ja keine fertigen Seiten wie beispielsweise PDF, die sich relativ einfach in Grafiken zum Drucken umwandeln lassen. Selbst PDF hat eine gewisse Komplexität, auch wenn das Format letztlich eine „Seitenbeschreibungssprache” ist.
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

...mit 7zip kann man eine odt-Datei entpacken und sich den Inhalt ansehen. Ich hatte das Problem bisher noch nicht. Hast du mal nach Bibliotheken zu OpenDocument gesucht???
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

pixewakb hat geschrieben:...mit 7zip kann man eine odt-Datei entpacken und sich den Inhalt ansehen.
Das ist ja nun nichts Neues. Die Datei selber ist nichts anders als ein Datencontainer im ZIP-Format. Aber jetzt interpretiere den Inhalt mal korrekt für die Darstellung bzw. den Druck.
BlackJack

@pixewakb: Die kann man nicht nur mit 7zip entpacken sondern mit jeder Software die ZIP-Dateien entpacken kann. Also auch mit dem `zipfile`-Modul aus der Python-Standardbibliothek.
Benutzeravatar
martinjo
User
Beiträge: 189
Registriert: Dienstag 14. Juni 2011, 20:03

@BlackJack Ja, ich habe mir das echt zu einfach vorgestellt.

Für meine Zwecke ist es wohl doch besser, wenn ich direkt mit OpenOffice drucke. Die Probleme konnte ich auch schon lösen indem ich mir mal die Parameter für "soffice" genauer angeschaut habe:

Man kann auch mehrere Dateien direkt zum drucken übergeben und den Ausgabedrucker definieren:
--pt <printer> <documents...>
print the specified documents on the specified printer.
Und wenn man das Logo nicht sehen will hilft "--invisible"

Nur muss ich nun eben erst alle eingelesenen ODT-Daten als Datei speichern was aber nicht wirklich schlimm ist. Ich speichere die Inhalte in einem Dictionary, lege dann die Dateien an und übergebe dann alle an soffice:

Draft example:

Code: Alles auswählen

for key in invoices:
    filename = str(key)+'.odt'
    f = codecs.open(filename, 'wb')
    f.write(invoices[key])
    f.close()
subprocess.call("soffice -pt HP_Color_LaserJet *", shell=True)
Umwandeln in PDF ist damit auch kein Thema:

Code: Alles auswählen

subprocess.call("soffice --invisible --convert-to pdf filename
Nur sollte man nicht zu viele ODTs direkt an den Drucker senden, bei 100 Stück ist mein Rechner doch ganz schön in die Knie gegangen.
Antworten