来自剧情的空白postscript文件

时间:2011-06-29 17:33:11

标签: python wxpython matplotlib wxmpl

我在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

Google引导我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工作正常 - 它使用不同的后端(FigureCanvasWxAgg而不是RendererAgg - 所以问题可能在于matplotlib而不是wxmpl / wxPython?)。但是,我需要将它打印到实际的打印机上,因此.ps文件的特殊外壳不是真正可行的解决方案。

运行Linux
wxmpl版本1.2.9
wxPython版本2.6.4.0
matplotlib版本0.84(是的,我知道它已经过时了,但这就是我现在必须要处理的事情)

1 个答案:

答案 0 :(得分:0)

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

def HasPage(self, page):
    return page <= 1
是的......两行。根据wxPython打印框架的文档,默认值为return page == 1,但是wxmpl返回0作为其覆盖GetPageInfo的第一页。因此打印机认为它没有要打印的页面。