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
Inhalt einer ODT Datei Drucken - Python Print Open Document
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.
...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???
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.pixewakb hat geschrieben:...mit 7zip kann man eine odt-Datei entpacken und sich den Inhalt ansehen.
-
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.
@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:
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:
Umwandeln in PDF ist damit auch kein Thema:
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.
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:
Und wenn man das Logo nicht sehen will hilft "--invisible"--pt <printer> <documents...>
print the specified documents on the specified printer.
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)Code: Alles auswählen
subprocess.call("soffice --invisible --convert-to pdf filename