我在wxmpl面板中有一個matplotlib圖,並且試圖將其打印到Postscript文件中。我能得到的最好的是一個空白文件 - '空白'我不是空的,而是一個帶有頭文件的.ps文件,而不是隻顯示爲空白頁面。劇情中的空白附記文件
的代碼打印爲:
printer = self.GetPrinter() # wxmpl.FigurePrinter
fig = self.get_figure() # matplotlib.figure.Figure
printData = wx.PrintData(printer.getPrintData())
printer.printFigure(fig, "Plot")
self.printer.setPrintData(printData) # reset print data (avoid segfaults)
我接過來一看進入wxmpl代碼,發現OnPrintPage
不會被調用,所以我想通過wxmpl.FigurePrintout.OnBeginDocument
添加到一個呼叫。然後OnPrintPage
到達這條線:
self.GetDC().DrawBitmap(image.ConvertToBitmap(), wM_Dx, hM_Dx, False)
,並拋出一個錯誤:
wx._core.PyAssertionError
C++ assertion "wxAssertFailure" failed in ../src/generic/dcpsg.cpp(2238): invalid postscript dc
谷歌使我this email string,因此我試着用替換上述行:
dc = self.GetDC()
dc.StartDoc("printing stuff")
dc.StartPage()
dc.BeginDrawing()
dc.DrawBitmap(image.ConvertToBitmap(), wM_Dx, hM_Dx, False)
dc.EndDrawing()
dc.EndPage()
dc.EndDoc()
擺脫了錯誤 - 但畢竟它仍然像以前一樣打印空白文件。
另一個需要注意的是,簡單地將Postscript保存爲Postscript工作正常 - 它使用不同的後端(FigureCanvasWxAgg,而不是RendererAgg - 所以也許問題出在matplotlib而不是wxmpl/wxPython上?)。但是,我還需要將其打印到實際的打印機中,因此.ps文件的特殊外殼並不是一個真正可行的解決方案。
運行Linux
wxmpl版本1.2.9
wxPython的版本2.6.4.0
matplotlib版本0.84(是的,我知道這是可怕的過時,但是這就是我有工作現在)
更新 - 我已經爲OnBeginDocument放錯了函數簽名,所以它沒有被調用。我解決了這個問題,所以OnPrintPage被調用,並且它打印正確(儘管輸出文件看起來太大 - 但這是一個不同的問題)。然而問題仍然是爲什麼OnPrintPage沒有被正常調用。任何信息都會有幫助! – whrrgarbl