Python 打印中的空白postscript文件

Python 打印中的空白postscript文件,python,wxpython,matplotlib,wxmpl,Python,Wxpython,Matplotlib,Wxmpl,我在wxmpl面板中有一个matplotlib图,我正试图将其打印到Postscript文件中。我能得到的最好的是一个空白文件——我所说的“空白”并不是指空文件,而是一个带有标题等的.ps文件,但显示为一个空白页面 要打印的代码是: printer = self.GetPrinter() # wxmpl.FigurePrinter fig = self.get_figure() # matplotlib.figure.Figure printData = wx.PrintData(printer

我在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\u-Dx,hM\u-Dx,False)

并抛出一个错误:

wx._core.PyAssertionError
C++ assertion "wxAssertFailure" failed in ../src/generic/dcpsg.cpp(2238): invalid postscript dc
谷歌让我想到了这一点,因此我尝试用以下内容替换上述内容:

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就可以了——它使用不同的后端(FigureCanvasWxAgg而不是RenderAgg——因此问题可能出在matplotlib而不是wxmpl/wxPython?)。但是,我也需要将其打印到实际的打印机上,因此.ps文件的特殊外壳并不是一个切实可行的解决方案

运行Linux
wxmpl版本1.2.9
wxPython版本2.6.4.0

matplotlib版本0.84(是的,我知道它已经过时了,但这正是我目前必须解决的问题)

问题是wxmpl没有调用
HasPage
——毕竟上面的所有更改都无关紧要。在类中添加此代码
FigurePrintout
修复了不打印的问题:

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

返回页更新-我为OnBeginDocument输入了错误的函数签名,因此没有调用它。我修复了这个问题,因此调用了OnPrintPage,它确实正确地打印了(虽然输出文件看起来太大了,但这是另一个问题)。然而,问题仍然是为什么OnPrintPage不能正常调用。任何信息都会有帮助!