Next: , Previous: PNG Support, Up: Top


19 PostScript Surfaces

Rendering PostScript documents

19.1 Overview

The PostScript surface is used to render cairo graphics to Adobe PostScript files and is a multi-page vector surface backend.

19.2 Usage

— Function: cairo-ps-surface-create (filename <char>) (width-in-points <double>) (height-in-points <double>) ⇒  (ret <cairo-surface-t >)

Creates a PostScript surface of the specified size in points to be written to filename. See cairo-ps-surface-create-for-stream for a more flexible mechanism for handling the PostScript output than simply writing it to a named file.

Note that the size of individual pages of the PostScript output can vary. See cairo-ps-surface-set-size.

filename
a filename for the PS output (must be writable), ‘#f’ may be used to specify no output. This will generate a PS surface that may be queried and used as a source, without generating a temporary file.
width-in-points
width of the surface, in points (1 point == 1/72.0 inch)
height-in-points
height of the surface, in points (1 point == 1/72.0 inch)
ret
a pointer to the newly created surface. The caller owns the surface and should call cairo-surface-destroy when done with it. This function always returns a valid pointer, but it will return a pointer to a "nil" surface if an error such as out of memory occurs. You can use cairo-surface-status to check for this.

Since 1.2

— Function: cairo-ps-surface-restrict-to-level (surface <cairo-surface-t>) (level <cairo-ps-level-t>)

Restricts the generated PostSript file to level. See cairo-ps-get-levels for a list of available level values that can be used here.

This function should only be called before any drawing operations have been performed on the given surface. The simplest way to do this is to call this function immediately after creating the surface.

surface
a PostScript <cairo-surface-t>
level
PostScript level

Since 1.6

— Function: cairo-ps-get-levels ⇒  (levels <cairo-ps-level-t const*>) (num-levels <int>)

Used to retrieve the list of supported levels. See cairo-ps-surface-restrict-to-level.

levels
supported level list
num-levels
list length

Since 1.6

— Function: cairo-ps-surface-set-eps (surface <cairo-surface-t>) (eps <cairo-bool-t>)

If eps is ‘#t’, the PostScript surface will output Encapsulated PostScript.

This function should only be called before any drawing operations have been performed on the current page. The simplest way to do this is to call this function immediately after creating the surface. An Encapsulated PostScript file should never contain more than one page.

surface
a PostScript <cairo-surface-t>
eps
#t’ to output EPS format PostScript

Since 1.6

— Function: cairo-ps-surface-get-eps (surface <cairo-surface-t>) ⇒  (ret <cairo-bool-t>)

Check whether the PostScript surface will output Encapsulated PostScript.

surface
a PostScript <cairo-surface-t>
ret
#t’ if the surface will output Encapsulated PostScript.

Since 1.6

— Function: cairo-ps-surface-set-size (surface <cairo-surface-t>) (width-in-points <double>) (height-in-points <double>)

Changes the size of a PostScript surface for the current (and subsequent) pages.

This function should only be called before any drawing operations have been performed on the current page. The simplest way to do this is to call this function immediately after creating the surface or immediately after completing a page with either cairo-show-page or cairo-copy-page.

surface
a PostScript <cairo-surface-t>
width-in-points
new surface width, in points (1 point == 1/72.0 inch)
height-in-points
new surface height, in points (1 point == 1/72.0 inch)

Since 1.2

— Function: cairo-ps-surface-dsc-comment (surface <cairo-surface-t>) (comment <char>)

Emit a comment into the PostScript output for the given surface.

The comment is expected to conform to the PostScript Language Document Structuring Conventions (DSC). Please see that manual for details on the available comments and their meanings. In particular, the %‘IncludeFeature’ comment allows a device-independent means of controlling printer device features. So the PostScript Printer Description Files Specification will also be a useful reference.

The comment string must begin with a percent character (%) and the total length of the string (including any initial percent characters) must not exceed 255 characters. Violating either of these conditions will place surface into an error state. But beyond these two conditions, this function will not enforce conformance of the comment with any particular specification.

The comment string should not have a trailing newline.

The DSC specifies different sections in which particular comments can appear. This function provides for comments to be emitted within three sections: the header, the Setup section, and the PageSetup section. Comments appearing in the first two sections apply to the entire document while comments in the BeginPageSetup section apply only to a single page.

For comments to appear in the header section, this function should be called after the surface is created, but before a call to cairo-ps-surface-begin-setup.

For comments to appear in the Setup section, this function should be called after a call to cairo-ps-surface-begin-setup but before a call to cairo-ps-surface-begin-page-setup.

For comments to appear in the PageSetup section, this function should be called after a call to cairo-ps-surface-begin-page-setup.

Note that it is only necessary to call cairo-ps-surface-begin-page-setup for the first page of any surface. After a call to cairo-show-page or cairo-copy-page comments are unambiguously directed to the PageSetup section of the current page. But it doesn't hurt to call this function at the beginning of every page as that consistency may make the calling code simpler.

As a final note, cairo automatically generates several comments on its own. As such, applications must not manually generate any of the following comments:

Header section: %!PS-Adobe-3.0, %‘Creator’, %‘CreationDate’, %‘Pages’, %‘BoundingBox’, %‘DocumentData’, %‘LanguageLevel’, %‘EndComments’.

Setup section: %‘BeginSetup’, %‘EndSetup

PageSetup section: %‘BeginPageSetup’, %‘PageBoundingBox’, %‘EndPageSetup’.

Other sections: %‘BeginProlog’, %‘EndProlog’, %‘Page’, %‘Trailer’, %‘EOF

Here is an example sequence showing how this function might be used:

          cairo_surface_t *surface = cairo_ps_surface_create (filename, width, height);
          ...
          cairo_ps_surface_dsc_comment (surface, "%%Title: My excellent document");
          cairo_ps_surface_dsc_comment (surface, "%%Copyright: Copyright (C) 2006 Cairo Lover")
          ...
          cairo_ps_surface_dsc_begin_setup (surface);
          cairo_ps_surface_dsc_comment (surface, "%%IncludeFeature: *MediaColor White");
          ...
          cairo_ps_surface_dsc_begin_page_setup (surface);
          cairo_ps_surface_dsc_comment (surface, "%%IncludeFeature: *PageSize A3");
          cairo_ps_surface_dsc_comment (surface, "%%IncludeFeature: *InputSlot LargeCapacity");
          cairo_ps_surface_dsc_comment (surface, "%%IncludeFeature: *MediaType Glossy");
          cairo_ps_surface_dsc_comment (surface, "%%IncludeFeature: *MediaColor Blue");
          ... draw to first page here ..
          cairo_show_page (cr);
          ...
          cairo_ps_surface_dsc_comment (surface, "%%IncludeFeature: *PageSize A5");
          ...
surface
a PostScript <cairo-surface-t>
comment
a comment string to be emitted into the PostScript output

Since 1.2