PS backend

Hello,

I am having some problems with the PS backend. I used the following
script to create a PostScript file

#!/usr/bin/env python
import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
import numpy

x1 = numpy.arange(0,5)
y1 = x1
plt.plot(x1, y1)
plt.savefig('ps_backend.ps')
plt.show()

When I tried to open the PostScript file in GSview, there is the
following warning, and the file does not render properly. I have
attached the PostScript file and a screenshot of the incorrect rendering.

DSC Error
At line 233:
    %%Page: 1 1
This %%Page: line occurred in the trailer, which is not legal.
EPS files should be encapsulated in %%BeginDocument / %%EndDocument.
If is possible that an EPS file was incorrectly encapsulated,
and that we have been confused by the %%Trailer in an EPS file.

The error can be eliminated by removing the line with %%EOF at line 230, but I don't know anything about PostScript or if that change would have any other effects. I only found this solution after comparing with the output from the Cairo backend. The same change to PostScript output can be achieved with the following diff (from svn diff), but again, I don't know if it is appropriate.

Index: ttconv/pprdrv_tt.cpp

ps_backend.ps (13.6 KB)

incorrect_rendering.png

···

===================================================================
--- ttconv/pprdrv_tt.cpp (revision 6810)
+++ ttconv/pprdrv_tt.cpp (working copy)
@@ -1070,7 +1070,6 @@
        } /* end of if Type 42 not understood. */

      stream.putline("FontName currentdict end definefont pop");
- stream.putline("%%EOF");
      } /* end of ttfont_trailer() */

  /*------------------------------------------------------------------

Paul Novak

Which version of matplotlib and ghostscript are you using? With matplotlib SVN trunk and gs 7.07, I can't reproduce this here, either with your provided ps file or generating it myself.

Paul Novak wrote:

Hello,

I am having some problems with the PS backend. I used the following
script to create a PostScript file

#!/usr/bin/env python
import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
import numpy

x1 = numpy.arange(0,5)
y1 = x1
plt.plot(x1, y1)
plt.savefig('ps_backend.ps')
plt.show()

When I tried to open the PostScript file in GSview, there is the
following warning, and the file does not render properly. I have
attached the PostScript file and a screenshot of the incorrect rendering.

DSC Error
At line 233:
   %%Page: 1 1
This %%Page: line occurred in the trailer, which is not legal.
EPS files should be encapsulated in %%BeginDocument / %%EndDocument.
If is possible that an EPS file was incorrectly encapsulated,
and that we have been confused by the %%Trailer in an EPS file.

Something is leading Ghostscript to believe this is an encapsulated postscript file when it isn't. That's odd. Did you change the extension of the file or something?

The error can be eliminated by removing the line with %%EOF at line 230, but I don't know anything about PostScript or if that change would have any other effects. I only found this solution after comparing with the output from the Cairo backend. The same change to PostScript output can be achieved with the following diff (from svn diff), but again, I don't know if it is appropriate.

Index: ttconv/pprdrv_tt.cpp

--- ttconv/pprdrv_tt.cpp (revision 6810)
+++ ttconv/pprdrv_tt.cpp (working copy)
@@ -1070,7 +1070,6 @@
         } /* end of if Type 42 not understood. */

     stream.putline("FontName currentdict end definefont pop");
- stream.putline("%%EOF");
     } /* end of ttfont_trailer() */

/*------------------------------------------------------------------

I'm surprised that this works, as the %%EOF comments are generally just considered informational. But it doesn't hurt to remove this line (and save 6 bytes per file!) so I'm fine with removing this line if we can confirm this is the source of the error.

Mike

···

Paul Novak

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options

--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

I am using matplotlib SVN revision 6810, and GSview 4.9 for Windows.

Paul

Michael Droettboom wrote:

···

Which version of matplotlib and ghostscript are you using? With matplotlib SVN trunk and gs 7.07, I can't reproduce this here, either with your provided ps file or generating it myself.

Paul Novak wrote:

Hello,

I am having some problems with the PS backend. I used the following
script to create a PostScript file

#!/usr/bin/env python
import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
import numpy

x1 = numpy.arange(0,5)
y1 = x1
plt.plot(x1, y1)
plt.savefig('ps_backend.ps')
plt.show()

When I tried to open the PostScript file in GSview, there is the
following warning, and the file does not render properly. I have
attached the PostScript file and a screenshot of the incorrect rendering.

DSC Error
At line 233:
   %%Page: 1 1
This %%Page: line occurred in the trailer, which is not legal.
EPS files should be encapsulated in %%BeginDocument / %%EndDocument.
If is possible that an EPS file was incorrectly encapsulated,
and that we have been confused by the %%Trailer in an EPS file.

Something is leading Ghostscript to believe this is an encapsulated postscript file when it isn't. That's odd. Did you change the extension of the file or something?

The error can be eliminated by removing the line with %%EOF at line 230, but I don't know anything about PostScript or if that change would have any other effects. I only found this solution after comparing with the output from the Cairo backend. The same change to PostScript output can be achieved with the following diff (from svn diff), but again, I don't know if it is appropriate.

Index: ttconv/pprdrv_tt.cpp

--- ttconv/pprdrv_tt.cpp (revision 6810)
+++ ttconv/pprdrv_tt.cpp (working copy)
@@ -1070,7 +1070,6 @@
         } /* end of if Type 42 not understood. */

     stream.putline("FontName currentdict end definefont pop");
- stream.putline("%%EOF");
     } /* end of ttfont_trailer() */

/*------------------------------------------------------------------

I'm surprised that this works, as the %%EOF comments are generally just considered informational. But it doesn't hurt to remove this line (and save 6 bytes per file!) so I'm fine with removing this line if we can confirm this is the source of the error.

Mike

Paul Novak

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------------

This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options

I've removed the "%%EOF" comment from the embedded font in SVN (your suggested change). I'm still stumped as to why this matters, but it should be benign.

Mike

Paul Novak wrote:

···

I am using matplotlib SVN revision 6810, and GSview 4.9 for Windows.

Paul

Michael Droettboom wrote:

Which version of matplotlib and ghostscript are you using? With matplotlib SVN trunk and gs 7.07, I can't reproduce this here, either with your provided ps file or generating it myself.

Paul Novak wrote:

Hello,

I am having some problems with the PS backend. I used the following
script to create a PostScript file

#!/usr/bin/env python
import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
import numpy

x1 = numpy.arange(0,5)
y1 = x1
plt.plot(x1, y1)
plt.savefig('ps_backend.ps')
plt.show()

When I tried to open the PostScript file in GSview, there is the
following warning, and the file does not render properly. I have
attached the PostScript file and a screenshot of the incorrect rendering.

DSC Error
At line 233:
   %%Page: 1 1
This %%Page: line occurred in the trailer, which is not legal.
EPS files should be encapsulated in %%BeginDocument / %%EndDocument.
If is possible that an EPS file was incorrectly encapsulated,
and that we have been confused by the %%Trailer in an EPS file.

Something is leading Ghostscript to believe this is an encapsulated postscript file when it isn't. That's odd. Did you change the extension of the file or something?

The error can be eliminated by removing the line with %%EOF at line 230, but I don't know anything about PostScript or if that change would have any other effects. I only found this solution after comparing with the output from the Cairo backend. The same change to PostScript output can be achieved with the following diff (from svn diff), but again, I don't know if it is appropriate.

Index: ttconv/pprdrv_tt.cpp

--- ttconv/pprdrv_tt.cpp (revision 6810)
+++ ttconv/pprdrv_tt.cpp (working copy)
@@ -1070,7 +1070,6 @@
         } /* end of if Type 42 not understood. */

     stream.putline("FontName currentdict end definefont pop");
- stream.putline("%%EOF");
     } /* end of ttfont_trailer() */

/*------------------------------------------------------------------

I'm surprised that this works, as the %%EOF comments are generally just considered informational. But it doesn't hurt to remove this line (and save 6 bytes per file!) so I'm fine with removing this line if we can confirm this is the source of the error.

Mike

Paul Novak

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------------

This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options

--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

Since this was a windows platform, I am curious if this has something
to do with the differences in newline '\r\n' handling and python
binary file handling between windows and unix platforms (there is no
difference between file(somefile, 'wb') and file(somefile, 'w') on
linux but they are different on windows)

JDH

···

On Wed, Jan 21, 2009 at 8:25 AM, Michael Droettboom <mdroe@...86...> wrote:

I've removed the "%%EOF" comment from the embedded font in SVN (your
suggested change). I'm still stumped as to why this matters, but it
should be benign.