class Cairo::PsSurface
- Cairo::PsSurface
- Cairo::Surface
- Reference
- Object
Overview
The PostScript surface is used to render cairo graphics to Adobe PostScript files and is a multi-page vector surface backend.
The following mime types are supported:
Cairo::C::LibCairo::MIME_TYPE_JPEG
,Cairo::C::LibCairo::MIME_TYPE_UNIQUE_ID
,Cairo::C::LibCairo::MIME_TYPE_CCITT_FAX
,Cairo::C::LibCairo::MIME_TYPE_CCITT_FAX_PARAMS
,Cairo::C::LibCairo::MIME_TYPE_CCITT_FAX
,Cairo::C::LibCairo::MIME_TYPE_CCITT_FAX_PARAMS
,Cairo::C::LibCairo::MIME_TYPE_EPS
,Cairo::C::LibCairo::MIME_TYPE_EPS_PARAMS
.
Source surfaces used by the PostScript surface that have a
Cairo::C::LibCairo::MIME_TYPE_UNIQUE_ID
mime type will be stored in
PostScript printer memory for the duration of the print job.
Cairo::C::LibCairo::MIME_TYPE_UNIQUE_ID
should only be used for small
frequently used sources.
The Cairo::C::LibCairo::MIME_TYPE_CCITT_FAX
and
Cairo::C::LibCairo::MIME_TYPE_CCITT_FAX_PARAMS
mime types are documented in
CCITT Fax Images.
##Embedding EPS files
Encapsulated PostScript files can be embedded in the PS output by setting the
Cairo::C::LibCairo::MIME_TYPE_EPS
mime data on a surface to the EPS data
and painting the surface. The EPS will be scaled and translated to the
extents of the surface the EPS data is attached to.
The Cairo::C::LibCairo::MIME_TYPE_EPS
mime type requires the
Cairo::C::LibCairo::MIME_TYPE_EPS_PARAMS
mime data to also be provided
in order to specify the embeddding parameters.
Cairo::C::LibCairo::MIME_TYPE_EPS_PARAMS
mime data must contain a string
of the form "bbox=[llx lly urx ury]"
that specifies the bounding box
(in PS coordinates) of the EPS graphics. The parameters are: lower left x,
lower left y, upper right x, upper right y. Normally the bbox data is
identical to the %%BoundingBox
data in the EPS file.
Defined in:
cairo/ps_surface.crConstructors
-
.new(write_func : LibCairo::WriteFuncT, closure : Pointer(Void), width_in_points : Float64, height_in_points : Float64)
Creates a PostScript surface of the specified size in points to be written incrementally to the stream represented by write_func and closure.
-
.new(filename : String, width_in_points : Float64, height_in_points : Float64)
Creates a PostScript surface of the specified size in points to be written to filename.
Class Method Summary
-
.levels : Array(PsLevel)
Used to retrieve the list of supported levels.
Instance Method Summary
-
#dsc_begin_page_setup
This function indicates that subsequent calls to
PsSurface#dsc_comment
should direct comments to the PageSetup section of the PostScript output. -
#dsc_begin_setup
This function indicates that subsequent calls to
PsSurface#dsc_comment
should direct comments to the Setup section of the PostScript output. -
#dsc_comment(comment : String)
Emit a comment into the PostScript output for the given surface.
-
#eps : Bool
Check whether the PostScript surface will output Encapsulated PostScript.
-
#eps=(eps : Bool)
If eps is
true
, the PostScript surface will output Encapsulated PostScript. -
#restrict_to_level(level : PsLevel)
Restricts the generated PostSript file to level.
-
#set_size(width_in_points : Float64, height_in_points : Float64)
Changes the size of a PostScript surface for the current (and subsequent) pages.
Instance methods inherited from class Cairo::Surface
content : Content
content,
copy_page
copy_page,
create_for_rectangle(x : Float64, y : Float64, width : Float64, height : Float64) : Surface
create_for_rectangle,
create_observer(mode : SurfaceObserverMode) : Surface
create_observer,
create_similar(content : Content, width : Int32, height : Int32) : Surface
create_similar,
create_similar_image(format : Format, width : Int32, height : Int32) : Surface
create_similar_image,
data : Pointer(UInt8)
data,
device : Device
device,
device_offset : Point
device_offset,
device_offset=(offset : Point)
device_offset=,
device_scale : Point
device_scale,
device_scale=(scale : Point)
device_scale=,
extents : NamedTuple(extents: Rectangle, bounded: Bool)
extents,
fallback_resolution : Point
fallback_resolution,
fallback_resolution=(res : Point)
fallback_resolution=,
finalize
finalize,
finish
finish,
flush
flush,
font_options : FontOptions
font_options,
format : Format
format,
has_show_text_glyphs? : Bool
has_show_text_glyphs?,
height : Int32
height,
ink_extents : Rectangle
ink_extents,
map_to_image(extents : RectangleInt | Nil) : Surface
map_to_image,
mark_dirty
mark_dirty,
mark_dirty_rectangle(x : Int32, y : Int32, width : Int32, height : Int32)
mark_dirty_rectangle,
mime_data(mime_type : String) : Bytes
mime_data,
observer_add_fill_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_fill_callback,
observer_add_finish_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_finish_callback,
observer_add_flush_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_flush_callback,
observer_add_glyphs_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_glyphs_callback,
observer_add_mask_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_mask_callback,
observer_add_paint_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_paint_callback,
observer_add_stroke_callback(func : LibCairo::SurfaceObserverCallbackT, data : Pointer(Void)) : Status
observer_add_stroke_callback,
observer_elapsed : Float64
observer_elapsed,
observer_print(write_func : LibCairo::WriteFuncT, closure : Pointer(Void)) : Status
observer_print,
reference : Surface
reference,
reference_count : UInt32
reference_count,
set_device_offset(x_offset : Float64, y_offset : Float64)
set_device_offset,
set_device_scale(x_scale : Float64, y_scale : Float64)
set_device_scale,
set_fallback_resolution(x_pixels_per_inch : Float64, y_pixels_per_inch : Float64)
set_fallback_resolution,
set_mime_data(mime_type : String, data : Bytes, destroy : LibCairo::DestroyFuncT, closure : Pointer(Void)) : Status
set_mime_data,
set_user_data(key : UserDataKey, user_data : Pointer(Void), destroy : LibCairo::DestroyFuncT) : Status
set_user_data,
status : Status
status,
stride : Int32
stride,
supports_mime_type?(mime_type : String) : Bool
supports_mime_type?,
surface_show_page
surface_show_page,
to_unsafe : LibCairo::PSurfaceT
to_unsafe,
type : SurfaceType
type,
unmap_image(image : Surface)
unmap_image,
user_data(key : UserDataKey) : Pointer(Void)
user_data,
width : Int32
width,
write_to_png(filename : String) : Status
write_to_png,
write_to_png_stream(write_func : LibCairo::WriteFuncT, closure : Pointer(Void)) : Status
write_to_png_stream
Constructor methods inherited from class Cairo::Surface
new(data : Bytes, format : Format, width : Int32, height : Int32, stride : Int32)new(format : Format, width : Int32, height : Int32)
new(read_func : LibCairo::ReadFuncT, closure : Pointer(Void))
new(content : Content, extents : Rectangle | Nil)
new(surface : LibCairo::PSurfaceT)
new(filename : String) new
Constructor Detail
Creates a PostScript surface of the specified size in points to be
written incrementally to the stream represented by write_func and
closure. See PsSurface#initialize
for a more convenient way to
simply direct the PostScript output to a named file.
NOTE that the size of individual pages of the PostScript output can vary.
See PsSurface#set_size
.
###Parameters
- write_func a
Cairo::C::LibCairo::WriteFuncT
to accept the output data, may benil
to indicate a no-op write_func. With a no-op write_func, the surface may be queried or used as a source without generating any temporary files. - closure the closure argument for write_func
- 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)
###Returns
A pointer to the newly created surface. The caller owns the surface and
should call Surface#finalize
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 Surface#status
to check for this.
Creates a PostScript surface of the specified size in points to be written to filename.
NOTE that the size of individual pages of the PostScript output can vary.
See PsSurface#set_size
.
###Parameters
- filename a filename for the PS output (must be writable),
nil
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)
###Returns
A pointer to the newly created surface. The caller owns the surface and
should call Surface#finalize
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 Surface#status
to check for this.
Class Method Detail
Used to retrieve the list of supported levels.
See PsSurface#restrict_to_level
.
###Returns Supported level list.
Instance Method Detail
This function indicates that subsequent calls to
PsSurface#dsc_comment
should direct comments to the
PageSetup section of the PostScript output.
This function call is only needed for the first page of a surface.
It should be called after any call to PsSurface#dsc_begin_setup
and before any drawing is performed to the surface.
See PsSurface#dsc_comment
for more details.
This function indicates that subsequent calls to
PsSurface#dsc_comment
should direct comments to
the Setup section of the PostScript output.
This function should be called at most once per surface,
and must be called before any call to PsSurface#dsc_begin_page_setup
and before any drawing is performed to the surface.
See PsSurface#dsc_comment
for more 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
PsSurface#dsc_begin_setup
.
For comments to appear in the Setup section, this function should be
called after a call to PsSurface#dsc_begin_setup
but before a call
to PsSurface#dsc_begin_page_setup
.
For comments to appear in the PageSetup section, this function should
be called after a call to PsSurface#dsc_begin_page_setup
.
NOTE that it is only necessary to call PsSurface#dsc_begin_page_setup
for the first page of any surface. After a call to Context#show_page
or
Context#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:
surface = PsSurface.new(filename, width, height)
...
surface.dsc_comment("%%Title: My excellent document")
surface.dsc_comment("%%Copyright: Copyright (C) 2006 Cairo Lover")
...
surface.dsc_begin_setup
surface.dsc_comment("%%IncludeFeature: *MediaColor White")
...
surface.dsc_begin_page_setup
surface.dsc_comment("%%IncludeFeature: *PageSize A3")
surface.dsc_comment("%%IncludeFeature: *InputSlot LargeCapacity")
surface.dsc_comment("%%IncludeFeature: *MediaType Glossy")
surface.dsc_comment("%%IncludeFeature: *MediaColor Blue")
... draw to first page here ..
cr.show_page
...
surface.dsc_comment("%%IncludeFeature: *PageSize A5")
###Parameters
- comment a comment string to be emitted into the PostScript output
Check whether the PostScript surface will output Encapsulated PostScript.
###Returns
true
if the surface will output Encapsulated PostScript.
If eps is true
, 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.
###Parameters
- eps
true
to output EPS format PostScript.
Restricts the generated PostSript file to level.
See PsSurface#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.
###Parameters
- level PostScript level
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 Context#show_page
or Context#copy_page
.
###Parameters
- 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)