From: Michael J G. <mic...@fa...> - 2008-06-09 12:28:35
|
Hi there I'm trying out the new mesh_as_bitmap writer option (current svn), because gv and printer disagree with evince about the pdfs I generate. I use g.writeEPSfile() and such on a graph instance g which inherits from canvas. Friendly python says g.writeEPSfile(__file__[:-3],mesh_as_bitmap=1) File "/home/mjg/lib/python/PyX-git/pyx/canvas.py", line 285, in wrappedindocument d = document.document([document.page(self, **kwargs)]) TypeError: __init__() got an unexpected keyword argument 'mesh_as_bitmap' I suspect the culprit in the following snippet from canvas.py. While I can't possibly wrap my brain around ingenious code like that I reckon that the "kwargs" it passes to the document.page constructor are rather meant to be passed to "method", because they ultimately stem from a call to the wrapped writer method. Making that change results in success for my case, but I'm not sure about the full implications. Michael N.B.: In fact I think evince got it wrong for the (shaded, not bitmapped) pdf. The surface looks semi-transparent with a stroked mesh. So, I guess printer and gs are both correct here, which is not a coincidence... def _wrappedindocument(method): def wrappedindocument(self, file=None, **kwargs): d = document.document([document.page(self, **kwargs)]) self.__name__ = method.__name__ self.__doc__ = method.__doc__ return method(d, file) return wrappedindocument class canvas(_canvas): """a canvas holds a collection of canvasitems""" writeEPSfile = _wrappedindocument(document.document.writeEPSfile) writePSfile = _wrappedindocument(document.document.writePSfile) writePDFfile = _wrappedindocument(document.document.writePDFfile) writetofile = _wrappedindocument(document.document.writetofile) |
From: André W. <wo...@us...> - 2008-06-10 06:22:41
|
Hi, we do have different set of keyword arguments involved in pages and documents. There are page-wide parameters (like the paperformat, centered, fittosize, etc.) and document-wide parameters, like the mesh_as_bitmap or text_as_path. In the canvas-methods we pass keyword arguments to the page, not to the document. To influence the document parameters, you thus cannot (currently) use the canvas-write shortcut methods. Regarding your N.B. comment --- could you please explain it again? I don't understand what you mean. Best, André Am 09.06.2008 um 14:28 schrieb Michael J Gruber: > Hi there > > I'm trying out the new mesh_as_bitmap writer option (current svn), > because gv and printer disagree with evince about the pdfs I generate. > > I use g.writeEPSfile() and such on a graph instance g which inherits > from canvas. > > Friendly python says > > g.writeEPSfile(__file__[:-3],mesh_as_bitmap=1) > File "/home/mjg/lib/python/PyX-git/pyx/canvas.py", line 285, in > wrappedindocument > d = document.document([document.page(self, **kwargs)]) > TypeError: __init__() got an unexpected keyword argument > 'mesh_as_bitmap' > > I suspect the culprit in the following snippet from canvas.py. While I > can't possibly wrap my brain around ingenious code like that I reckon > that the "kwargs" it passes to the document.page constructor are > rather > meant to be passed to "method", because they ultimately stem from a > call > to the wrapped writer method. Making that change results in success > for > my case, but I'm not sure about the full implications. > > Michael > > N.B.: In fact I think evince got it wrong for the (shaded, not > bitmapped) pdf. The surface looks semi-transparent with a stroked > mesh. > So, I guess printer and gs are both correct here, which is not a > coincidence... > > def _wrappedindocument(method): > def wrappedindocument(self, file=None, **kwargs): > d = document.document([document.page(self, **kwargs)]) > self.__name__ = method.__name__ > self.__doc__ = method.__doc__ > return method(d, file) > return wrappedindocument > > > class canvas(_canvas): > > """a canvas holds a collection of canvasitems""" > > writeEPSfile = _wrappedindocument(document.document.writeEPSfile) > writePSfile = _wrappedindocument(document.document.writePSfile) > writePDFfile = _wrappedindocument(document.document.writePDFfile) > writetofile = _wrappedindocument(document.document.writetofile) > > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > PyX-devel mailing list > PyX...@li... > https://lists.sourceforge.net/lists/listinfo/pyx-devel > -- by _ _ _ Dr. André Wobst, Amselweg 22, 85716 Unterschleißheim / \ \ / ) wo...@us..., http://www.wobsta.de/ / _ \ \/\/ / PyX - High quality PostScript and PDF figures (_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/ |
From: Michael J G. <mic...@fa...> - 2008-06-10 14:26:53
|
Hi again, André Wobst venit, vidit, dixit 10.06.2008 08:22: > Hi, > > we do have different set of keyword arguments involved in pages and > documents. There are page-wide parameters (like the paperformat, > centered, fittosize, etc.) and document-wide parameters, like the > mesh_as_bitmap or text_as_path. I see. So one would need a way to pass both kinds of parameters. On the other hand: If I use the wrapped writer on a canvas (such as a graph) I typically don't generate a page but a "figure document", i.e. I typically want to set document options, not page options. I guess I would suggest to change that ;) > Regarding your N.B. comment --- could you please explain it again? I > don't understand what you mean. Sorry for the confusion. My interest in "mesh_as_bitmap" came from the fact that I "did not get what I had seen": the printout of my pdf and evince's rendering differed. I wanted to see whether bitmaps would help. Later, I noticed that probably the printout was "correct". But evince's rendering was so interesting (semitransparent mesh) that I thought that to be right, and I thought that the printer driver would fail on the transparency. I'll try and attach a few screenshots. I don't know whether they will make it through gmane and sf's mailman. eps and pdf were created directly by PyX (without mesh_as_bitmap) with the standard graph.style.surface(). evince_pdf.png is what I always saw (pdf rendered by evince): a nice semitransparent mesh evince_eps.png and gv_eps.png look just like the printout, which is no surprise because that printer is driven by gs. gv_pdf.png is gv's rendering of the pdf, which is broken, but I really don't care I hate to say it, but acroread's display of the pdf agrees with evince's and gv's of the eps. I try to avoid acrobat, though. Versions: PyX svn r2998, but v0.10 should make no difference evince 2.20.1 using poppler 0.6.4 (cairo) gv 3.6.3 gs 8.6.1 acroread 8 Cheers, Michael |