0

私のアプリケーションには、ユーザーがレポートを PDF ドキュメントに変換する方法があります。これは完全に機能します-一度。ユーザーがボタンをもう一度クリックすると、変換がハングします。

これは私のコードです:

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)

私の考えでは、プリンターはまだファイルを開いています。その場合、どうすればファイルを閉じることができますか?

アプリケーションを再起動し、ファイルが既に存在する場合は機能します。そのため、ファイルが既に存在するためにハングしているとは思いません。

4

1 に答える 1

1

コードをテストするとweb.setHtml(html)、メソッドの最後 (最後のステートメント) に配置した場合にのみ機能することがわかりましたprint_report。そうすることで、何度でも file.pdf を生成することができました。

于 2012-07-21T02:03:43.250 に答える