Andy
Andy

Reputation: 50570

QPrinter doesn't print more than once

In my application I have a method for users to convert a report to a PDF document. This works perfectly - once. If the user clicks the button again, the conversion hangs.

This is my code:

def print_report(self):
        web = QtWebKit.QWebView()
        filename = "reporttemplate.html"
        file = open(filename,'r')
        html = file.read()
        file.close()

        web.setHtml(html)
        #web.show()

        printer = QtGui.QPrinter()
        printer.setPageSize(QtGui.QPrinter.Letter)
        printer.setOutputFormat(QtGui.QPrinter.PdfFormat)

        # ---- BROKEN ----
        # This next line is where it hangs on the second call to this function.
        # The first time it works, and generates the PDF as expected.
        # ---- BROKEN ON THE NEXT LINE! ----
        printer.setOutputFileName(r'C:\path\to\report\directory\file.pdf')

        def convertIt():
            web.print_(printer)
            print "Pdf generated"
            web.close()

        QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), convertIt)

My thought is that the printer still has the file open. If that's the case, how can I close the file?

It works if I relaunch the application and the file already exists. For that reason, I don't believe it's hanging because the file already exists.

Upvotes: 0

Views: 267

Answers (1)

jheyse
jheyse

Reputation: 489

Testing your code I noticed that for me it only works when I put web.setHtml(html) at the end (last statement) in the print_report method. Doing that I was able to generate file.pdf as many times as I wanted to.

Upvotes: 1

Related Questions