Search code examples
pythonprintingtkinterwxpython

wxPython print string with formatting


so I have the following class which prints the text and header you call with it. I also provided the code I am using to call the Print function. I have a string 'outputstring' which contains the text I want to print. My expected output is below and my actual output is below. It seems to be removing spaces which are needed for proper legibility. How can I print while keeping the spaces?

Class:

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

    def GetHtmlText(self,text):
        "Simple conversion of text.  Use a more powerful version"
        html_text = text.replace('\n\n','<P>')
        html_text = text.replace('\n', '<BR>')
        return html_text

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

    def PreviewText(self, text, doc_name):
        self.SetHeader(doc_name)
        HtmlEasyPrinting.PreviewText(self, self.GetHtmlText(text))

Expected Print:

+-------------------+---------------------------------+------+-----------------+-----------+
|      Domain:      |           Mail Server:          | TLS: | # of Employees: | Verified: |
+-------------------+---------------------------------+------+-----------------+-----------+
| bankofamerica.com |    ltwemail.bankofamerica.com   |  Y   |      239000     |     Y     |
|                   |    rdnemail.bankofamerica.com   |  Y   |                 |     Y     |
|                   |    kcmemail.bankofamerica.com   |  Y   |                 |     Y     |
|                   |    rchemail.bankofamerica.com   |  Y   |                 |     Y     |
|   citigroup.com   |        mx-b.mail.citi.com       |  Y   |      248000     |     N     |
|                   |        mx-a.mail.citi.com       |  Y   |                 |     N     |
|   bnymellon.com   |  cluster9bny.us.messagelabs.com |  ?   |      51400      |     N     |
|                   | cluster9bnya.us.messagelabs.com |  Y   |                 |     N     |
|     usbank.com    |         mail1.usbank.com        |  Y   |      65565      |     Y     |
|                   |         mail2.usbank.com        |  Y   |                 |     Y     |
|                   |         mail3.usbank.com        |  Y   |                 |     Y     |
|                   |         mail4.usbank.com        |  Y   |                 |     Y     |
|    us.hsbc.com    |       vhiron1.us.hsbc.com       |  Y   |      255200     |     Y     |
|                   |       vhiron2.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       njiron1.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       njiron2.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       nyiron1.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       nyiron2.us.hsbc.com       |  Y   |                 |     Y     |
|      pnc.com      |   cluster5a.us.messagelabs.com  |  Y   |      49921      |     N     |
|                   |   cluster5.us.messagelabs.com   |  ?   |                 |     N     |
|     tdbank.com    |   cluster5.us.messagelabs.com   |  ?   |        0        |     N     |
|                   |   cluster5a.us.messagelabs.com  |  Y   |                 |     N     |
+-------------------+---------------------------------+------+-----------------+-----------+

Actual Print:

The same thing as expected but the spaces are removed making it very hard to read.

Function call:

def printFile():
    outputstring = txt_tableout.get(1.0, 'end')
    print(outputstring)
    app = wx.PySimpleApp()
    p = Printer()
    p.Print(outputstring, "Data Results")

Solution

  • For anyone else struggling, this is the modified class function I used to generate a nice table with all rows and columns.

    def GetHtmlText(self,text):
        html_text = '<h3>Data Results:</h3><p><table border="2">'
        html_text += "<tr><td>Domain:</td><td>Mail Server:</td><td>TLS:</td><td># of Employees:</td><td>Verified</td></tr>"
        for row in root.ptglobal.to_csv():
            html_text += "<tr>"
            for x in range(len(row)):
                html_text += "<td>"+str(row[x])+"</td>"
            html_text += "</tr>"
        return html_text + "</table></p>"