Drucken mehrere Seiten (wx.Printout)

Plattformunabhängige GUIs mit wxWidgets.
Antworten
MBR
User
Beiträge: 29
Registriert: Freitag 29. September 2006, 17:03

Hallo erstmal,

ich arbeite jetzt schon ein Weilchen mit wxPython, bisher ohne größere Probleme. Nun ist es so, dass ich etwas ausdrucken möchte, was nach ein wenig Suchen schon ganz gut funktioniert. Folgende Klasse ist bis dato entstanden:

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  

def make_lines(self):
        back_lines = []
        zeilen_list = string.split(self.text,"\n")
        #etc.
        #
        #Hier wird eine Liste von Zeilen zurückgegeben
        #die gedruckt werden sollen. Je nach Länge der Liste
        #auch über eine Seite hinaus...
        #

def OnPrintPage(self, page):
        lines = self.make_lines()
        dc = self.GetDC()        
        #Header schreiben
        dc.DrawText(self.header , 100, 100)
        x = 450
        y = 500
        for line in lines:            
            dc.DrawText(line, x, y)
            y += 130                
        return True
Mein Problem ist jetzt das im Falle eines Seitenwechsels dieser nicht vollzogen wird, sondern einfach weitergedruckt wird. Ein Beispiel zum
Drucken meherer Seiten habe ich bis jetzt leider noch nicht gefunden.

Wäre sehr dankbar, wenn mir jemand hier sagen kann wo ich da ansetzen muss, oder ein kleines Beispiel diesbezüglich zur Hand hat (Link o.ä.).

Danke im voraus!

Gruß,
Markus
Benutzeravatar
Spaten
User
Beiträge: 52
Registriert: Samstag 27. Mai 2006, 11:35
Wohnort: Bremen
Kontaktdaten:

Hallo MBR,
ich habe zwar keine konkrete Lösung für dein Problem, aber ich habe noch eine andere Möglichkeit gefunden unter WX zu drucken. Und zwar mit HtmlEasyPrinting. Ich habe gehört, es soll die einfachste Möglichkeit sien, etwas zu drucken...
Ich finde es auch ziemlich einfach und hatte bisher keine Probleme damit.
Hier mal ein Codebeispiel:

Code: Alles auswählen

from wx.html import HtmlEasyPrinting

class Printer(HtmlEasyPrinting):
    def __init__(self):
        HtmlEasyPrinting.__init__(self)

    def Print(self, text, doc_name):
        self.SetHeader(doc_name)
        self.PrintText(text,doc_name)

    def PreviewText(self, text, doc_name):
        self.SetHeader(doc_name)
        HtmlEasyPrinting.PreviewText(self, self.GetHtmlText(text))
Python-Version: 2.5
MBR
User
Beiträge: 29
Registriert: Freitag 29. September 2006, 17:03

Hallo Spaten,

danke für deinen Tip, kommt genau zum richtigen Zeitpunkt.

Werde jetzt mal den beschriebenen Weg versuchen. Resonanz
folgt dann auf dem Fuße...

Fürs Erste vielen Dank!

Gruß,
Markus
MBR
User
Beiträge: 29
Registriert: Freitag 29. September 2006, 17:03

So, habe fertig. Gibt bestimmt bessere Lösungen, aber es
funktioniert so. Wußte nicht, dass ich den Seitenumbruch
über den DC erzwingen musste.

@Spaten
HtmlEasyPrinting war für meine Zwecke nicht so gut geeignet, da
auch schon viel fertig war. Finde aber, dass der Code wie er jetzt
ist auch nicht unbedingt schwieriger ist...

Gruß,
Markus

Code: Alles auswählen

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
Antworten