Hallo Jack,
Irrtum, Drucken ist mit wx sogar sehr angenehm zu machen, hab aber auch ein Weilchen gebraucht bis ich das verstanden habe.
Schaue folgenden Code:
Code: Alles auswählen
class CTSPrintout( wx.Printout ):
def __init__(self, text, header, flag):
wx.Printout.__init__(self)
self.text = text
self.header = header
#Erg-Log (0)/ CTS-Log (1)
self.flag = flag
self.anz_pages = 1
def make_lines(self):
back_lines = []
zeilen_list = string.split(self.text,"\n")
counter = 0
if (self.flag == 0): #Erg Log
erg_lines = []
for zeile in zeilen_list:
data_list = []
if not "Gesamtergebnis" in zeile:
temp_list = string.split(zeile, " ")
for temp in temp_list:
if (temp != ""):
data_list.append(temp)
else:
data_list.append(string.lstrip(zeile))
if (data_list != []):
erg_lines.append(data_list)
counter += 1
if (counter == 46):
self.anz_pages += 1
counter = 0
if (counter != 0): self.anz_pages += 1
for erg_line in erg_lines:
temp = ""
for eintrag in erg_line:
if ((eintrag == "Testergebnis:") or (eintrag == "Dauer:")):
back_lines.append(temp)
temp = ""
temp = string.ljust(temp,50)
if "Gesamtergebnis:" in eintrag:
back_lines.append("")
temp += eintrag + " "
back_lines.append(temp)
else: #CTS log
for zeile in zeilen_list:
zaehler = 0
temp = ""
for c in zeile:
if (zaehler < 80): temp += c
else:
back_lines.append(temp)
temp = str(c)
zaehler = -1
counter += 1
if (counter == 46):
self.anz_pages += 1
counter = 0
zaehler += 1
back_lines.append(temp)
counter += 1
if (counter == 46):
self.anz_pages += 1
counter = 0
return back_lines
def OnBeginDocument(self, startPage, endPage):
pass
def OnPrintPage(self, page):
lines = self.make_lines()
dc = self.GetDC()
if (self.flag == 0):
#Erg Log
dc.StartDoc("CTS_ErgebnisLog")
else:
#CTS Log
dc.StartDoc("CTS_Log")
dc.StartPage()
#Header schreiben
dc.DrawText(self.header , 100, 100)
msg = "Seite 1 von " + str(self.anz_pages)
dc.DrawText(msg, 100, 230)
x = 450
y = 600
counter = 0
page_count = 2
for line in lines:
dc.DrawText(line, x, y)
y += 130
counter += 1
if (counter == 46):
dc.EndPage()
dc.StartPage()
counter = 0
dc.DrawText(self.header , 100, 100)
msg = "Seite " + str(page_count) + " von " + str(self.anz_pages)
dc.DrawText(msg, 100, 230)
page_count += 1
y = 600
dc.EndDoc()
return True
Im vorliegenden Fall wird der Inhalt eines TextCtrl gedruckt, geht zwar besser, aber läuft. Wichtig zum Drucken in wx sind die Klassen Printer und Printout. Schau mal in die wx Demos (PrintFramework) und in die Dokumentation, hat mir auch sehr geholfen.
Über den DC kannst du ausgeben was du möchtest und den hast du ja. Also müsstest du nur noch diesen DC auf den Printer umleiten, sollte doch gehen...
Gruß,
Markus