2011-06-29 221 views
1

我在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(是的,我知道這是可怕的過時,但是這就是我有工作現在)

+0

更新 - 我已經爲OnBeginDocument放錯了函數簽名,所以它沒有被調用。我解決了這個問題,所以OnPrintPage被調用,並且它打印正確(儘管輸出文件看起來太大 - 但這是一個不同的問題)。然而問題仍然是爲什麼OnPrintPage沒有被正常調用。任何信息都會有幫助! – whrrgarbl

回答

0

的問題在於wxmpl沒有電話給HasPage - 畢竟,上述全部變更並不重要。添加在此代碼FigurePrintout類解決了該問題與不打印:

def HasPage(self, page): 
    return page <= 1 

是的...兩行。根據wxPython打印框架的文檔,缺省值爲return page == 1,但wxmpl返回0作爲覆蓋GetPageInfo的第一頁。所以打印機不認爲它有一個打印頁面。