首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘图中的空白postscript文件

绘图中的空白postscript文件
EN

Stack Overflow用户
提问于 2011-06-30 01:33:11
回答 1查看 462关注 0票数 1

我在wxmpl面板中有一个matplotlib图形,并试图将其打印到Postscript文件中。我所能得到的最好的结果是一个空白文件--我所说的“空白”不是指空白,而是一个带有标题和诸如此类的.ps文件,但只显示为一个空白页面。

要打印的代码为:

代码语言:javascript
复制
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)

并抛出一个错误:

代码语言:javascript
复制
wx._core.PyAssertionError
C++ assertion "wxAssertFailure" failed in ../src/generic/dcpsg.cpp(2238): invalid postscript dc

谷歌把我带到了this email string,因此我试着用以下代码替换上面的代码:

代码语言:javascript
复制
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 (是的,我知道它非常过时,但这就是我现在必须使用的版本)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 04:39:48

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

代码语言:javascript
复制
def HasPage(self, page):
    return page <= 1

是的..。两行。根据wxPython打印框架的文档,缺省值是return page == 1,但是wxmpl在其覆盖的GetPageInfo中返回0作为第一页。所以打印机并不认为它有一页要打印。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6524843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档