Package: cairo

Function cairo:ps-surface-dsc-comment

Lambda List

cairo:ps-surface-dsc-comment (surface comment)

Arguments

surface -- a PostScript cairo:surface-t instance
comment -- a comment string to be emitted into the PostScript output

Details

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 the cairo:ps-surface-dsc-begin-setup function.

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

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

Note that it is only necessary to call the cairo:ps-surface-dsc-begin-page-setup function for the first page of any surface. After a call to the cairo:show-page or cairo:copy-page functions comments are unambiguously directed to the PageSetup section of the current page. But it does not 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

Examples

Here is an example sequence showing how this function might be used:
(test cairo-ps-surface-dsc-comment
  (let* ((path (sys-path "out/comment.ps"))
         (width 100) (height 200)
         (surface (cairo:ps-surface-create path width height)))
    ;; Create a context for the surface
    (cairo:with-context (context surface)
      ;; Header page 1
      (cairo:ps-surface-dsc-comment surface "%%Title: My document")
      (cairo:ps-surface-dsc-comment surface
                                    "%%Copyright: Copyright (C) 2014 Crategus")
      ;; Setup page 1
      (cairo:ps-surface-dsc-begin-setup surface)
      (cairo:ps-surface-dsc-comment surface
                                    "%%IncludeFeature: *MediaColor White")
      ;; Page setup page 1
      (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 Capacity")
      (cairo:ps-surface-dsc-comment surface
                                    "%%IncludeFeature: *MediaType Glossy")
      (cairo:ps-surface-dsc-comment surface
                                    "%%IncludeFeature: *MediaColor Blue")
      ;; Draw to first page here
      ...
      ;; Show first page
      (cairo:show-page context)
      ;; Header page 2
      (cairo:ps-surface-dsc-comment surface
                                    "%%IncludeFeature: *PageSize A5")
      ;; Draw to second page here
      ...
      ;; Show second page
      (cairo:show-page context))
    (cairo:surface-destroy surface)))    
 

See also

2025-1-29