PrintCompositor
Superclasses: Object
Compose a Buffer
for printing.
The GtkSourcePrintCompositor
object is used to compose a Buffer
for printing. You can set various configuration options to customize the
printed output. GtkSourcePrintCompositor
is designed to be used with the
high-level printing API of gtk+, i.e. PrintOperation
.
The margins specified in this object are the layout margins: they define the
blank space bordering the printed area of the pages. They must not be
confused with the “print margins”, i.e. the parts of the page that the
printer cannot print on, defined in the PageSetup
objects. If the
specified layout margins are smaller than the “print margins”, the latter
ones are used as a fallback by the GtkSourcePrintCompositor
object, so that
the printed area is not clipped.
Constructors
- class PrintCompositor
- classmethod new(buffer: Buffer) PrintCompositor
Creates a new print compositor that can be used to print
buffer
.- Parameters:
buffer – the
Buffer
to print.
- classmethod new_from_view(view: View) PrintCompositor
Creates a new print compositor that can be used to print the buffer associated with
view
.This constructor sets some configuration properties to make the printed output match
view
as much as possible. The properties set aretab_width
,highlight_syntax
,wrap_mode
,body_font_name
andprint_line_numbers
.- Parameters:
view – a
View
to get configuration from.
Methods
- class PrintCompositor
- draw_page(context: PrintContext, page_nr: int) None
Draw page
page_nr
for printing on the the Cairo context encapsuled incontext
.This method has been designed to be called in the handler of the
draw_page
signal as shown in the following example:// Signal handler for the GtkPrintOperation::draw_page signal static void draw_page (GtkPrintOperation *operation, GtkPrintContext *context, gint page_nr, gpointer user_data) { GtkSourcePrintCompositor *compositor; compositor = GTK_SOURCE_PRINT_COMPOSITOR (user_data); gtk_source_print_compositor_draw_page (compositor, context, page_nr); }
- Parameters:
context – the
PrintContext
encapsulating the context information that is required when drawing the page for printing.page_nr – the number of the page to print.
- get_body_font_name() str
Returns the name of the font used to print the text body.
The returned string must be freed with
free()
.
- get_bottom_margin(unit: Unit) float
Gets the bottom margin in units of
unit
.- Parameters:
unit – the unit for the return value.
- get_buffer() Buffer
Gets the
Buffer
associated with the compositor.The returned object reference is owned by the compositor object and should not be unreferenced.
Returns the name of the font used to print the page footer.
The returned string must be freed with
free()
.
- get_header_font_name() str
Returns the name of the font used to print the page header.
The returned string must be freed with
free()
.
- get_highlight_syntax() bool
Determines whether the printed text will be highlighted according to the buffer rules.
Note that highlighting will happen only if the buffer to print has highlighting activated.
- get_left_margin(unit: Unit) float
Gets the left margin in units of
unit
.- Parameters:
unit – the unit for the return value.
- get_line_numbers_font_name() str
Returns the name of the font used to print line numbers on the left margin.
The returned string must be freed with
free()
.
- get_n_pages() int
Returns the number of pages in the document or <code>-1</code> if the document has not been completely paginated.
- get_pagination_progress() float
Returns the current fraction of the document pagination that has been completed.
Determines if a footer is set to be printed for each page.
A footer will be printed if this function returns
True
and some format strings have been specified withset_footer_format
.
- get_print_header() bool
Determines if a header is set to be printed for each page.
A header will be printed if this function returns
True
and some format strings have been specified withset_header_format
.
- get_print_line_numbers() int
Returns the interval used for line number printing.
If the value is 0, no line numbers will be printed. The default value is 1 (i.e. numbers printed in all lines).
- get_right_margin(unit: Unit) float
Gets the right margin in units of
unit
.- Parameters:
unit – the unit for the return value.
- get_top_margin(unit: Unit) float
Gets the top margin in units of
unit
.- Parameters:
unit – the unit for the return value.
- ignore_tag(tag: TextTag) None
Specifies a tag whose style should be ignored when compositing the document to the printable page.
Added in version 5.2.
- Parameters:
tag – a
TextTag
- paginate(context: PrintContext) bool
Paginate the document associated with the
compositor
.In order to support non-blocking pagination, document is paginated in small chunks. Each time
paginate
is invoked, a chunk of the document is paginated. To paginate the entire document,paginate
must be invoked multiple times. It returnsTrue
if the document has been completely paginated, otherwise it returnsFalse
.This method has been designed to be invoked in the handler of the
paginate
signal, as shown in the following example:// Signal handler for the GtkPrintOperation::paginate signal static gboolean paginate (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data) { GtkSourcePrintCompositor *compositor; compositor = GTK_SOURCE_PRINT_COMPOSITOR (user_data); if (gtk_source_print_compositor_paginate (compositor, context)) { gint n_pages; n_pages = gtk_source_print_compositor_get_n_pages (compositor); gtk_print_operation_set_n_pages (operation, n_pages); return TRUE; } return FALSE; }
If you don’t need to do pagination in chunks, you can simply do it all in the
begin_print
handler, and set the number of pages from there, like in the following example:// Signal handler for the GtkPrintOperation::begin-print signal static void begin_print (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data) { GtkSourcePrintCompositor *compositor; gint n_pages; compositor = GTK_SOURCE_PRINT_COMPOSITOR (user_data); while (!gtk_source_print_compositor_paginate (compositor, context)); n_pages = gtk_source_print_compositor_get_n_pages (compositor); gtk_print_operation_set_n_pages (operation, n_pages); }
- Parameters:
context – the
PrintContext
whose parameters (e.g. paper size, print margins, etc.) are used by the thecompositor
to paginate the document.
- set_body_font_name(font_name: str) None
Sets the default font for the printed text.
font_name
should be a string representation of a font description Pango can understand. (e.g. "Monospace 10"). Seefrom_string
for a description of the format of the string representation.This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
font_name – the name of the default font for the body text.
- set_bottom_margin(margin: float, unit: Unit) None
Sets the bottom margin used by
compositor
.- Parameters:
margin – the new bottom margin in units of
unit
.unit – the units for
margin
.
Sets the font for printing the page footer.
If
None
is supplied, the default font (i.e. the one being used for the text) will be used instead.font_name
should be a string representation of a font description Pango can understand. (e.g. "Monospace 10"). Seefrom_string
for a description of the format of the string representation.This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
font_name – the name of the font for the footer text, or
None
.
See
set_header_format
for more information about the parameters.- Parameters:
separator –
True
if you want a separator line to be printed.left – a format string to print on the left of the footer.
center – a format string to print on the center of the footer.
right – a format string to print on the right of the footer.
- set_header_font_name(font_name: str | None = None) None
Sets the font for printing the page header.
If
None
is supplied, the default font (i.e. the one being used for the text) will be used instead.font_name
should be a string representation of a font description Pango can understand. (e.g. "Monospace 10"). Seefrom_string
for a description of the format of the string representation.This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
font_name – the name of the font for header text, or
None
.
- set_header_format(separator: bool, left: str | None = None, center: str | None = None, right: str | None = None) None
Sets strftime like header format strings, to be printed on the left, center and right of the top of each page.
The strings may include strftime(3) codes which will be expanded at print time. A subset of strftime() codes are accepted, see
format
for more details on the accepted format specifiers. Additionally the following format specifiers are accepted:N
: the page numberQ
: the page count.
separator
specifies if a solid line should be drawn to separate the header from the document text.If
None
is given for any of the three arguments, that particular string will not be printed.For the header to be printed, in addition to specifying format strings, you need to enable header printing with
set_print_header
.This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
separator –
True
if you want a separator line to be printed.left – a format string to print on the left of the header.
center – a format string to print on the center of the header.
right – a format string to print on the right of the header.
- set_highlight_syntax(highlight: bool) None
Sets whether the printed text will be highlighted according to the buffer rules. Both color and font style are applied.
This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
highlight – whether syntax should be highlighted.
- set_left_margin(margin: float, unit: Unit) None
Sets the left margin used by
compositor
.- Parameters:
margin – the new left margin in units of
unit
.unit – the units for
margin
.
- set_line_numbers_font_name(font_name: str | None = None) None
Sets the font for printing line numbers on the left margin.
If
None
is supplied, the default font (i.e. the one being used for the text) will be used instead.font_name
should be a string representation of a font description Pango can understand. (e.g. "Monospace 10"). Seefrom_string
for a description of the format of the string representation.This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
font_name – the name of the font for line numbers, or
None
.
Sets whether you want to print a footer in each page.
The footer consists of three pieces of text and an optional line separator, configurable with
set_footer_format
.Note that by default the footer format is unspecified, and if it’s empty it will not be printed, regardless of this setting.
This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
print
- set_print_header(print_: bool) None
Sets whether you want to print a header in each page.
The header consists of three pieces of text and an optional line separator, configurable with
set_header_format
.Note that by default the header format is unspecified, and if it’s empty it will not be printed, regardless of this setting.
This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
print
- set_print_line_numbers(interval: int) None
Sets the interval for printed line numbers.
If
interval
is 0 no numbers will be printed. If greater than 0, a number will be printed everyinterval
lines (i.e. 1 will print all line numbers).Maximum accepted value for
interval
is 100.This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
interval – interval for printed line numbers.
- set_right_margin(margin: float, unit: Unit) None
Sets the right margin used by
compositor
.- Parameters:
margin – the new right margin in units of
unit
.unit – the units for
margin
.
- set_tab_width(width: int) None
Sets the width of tabulation in characters for printed text.
This function cannot be called anymore after the first call to the
paginate
function.- Parameters:
width – width of tab in characters.
Properties
- class PrintCompositor
- props.body_font_name: str
Name of the font used for the text body.
Accepted values are strings representing a font description Pango can understand. (e.g. "Monospace 10"). See
from_string
for a description of the format of the string representation.The value of this property cannot be changed anymore after the first call to the
paginate
function.
Name of the font used to print page footer. If this property is unspecified, the text body font is used.
Accepted values are strings representing a font description Pango can understand. (e.g. "Monospace 10"). See
from_string
for a description of the format of the string representation.The value of this property cannot be changed anymore after the first call to the
paginate
function.
- props.header_font_name: str
Name of the font used to print page header. If this property is unspecified, the text body font is used.
Accepted values are strings representing a font description Pango can understand. (e.g. "Monospace 10"). See
from_string
for a description of the format of the string representation.The value of this property cannot be changed anymore after the first call to the
paginate
function.
- props.highlight_syntax: bool
Whether to print the document with highlighted syntax.
The value of this property cannot be changed anymore after the first call to the
paginate
function.
- props.line_numbers_font_name: str
Name of the font used to print line numbers on the left margin. If this property is unspecified, the text body font is used.
Accepted values are strings representing a font description Pango can understand. (e.g. "Monospace 10"). See
from_string
for a description of the format of the string representation.The value of this property cannot be changed anymore after the first call to the
paginate
function.
- props.n_pages: int
The number of pages in the document or <code>-1</code> if the document has not been completely paginated.
Whether to print a footer in each page.
Note that by default the footer format is unspecified, and if it is unspecified the footer will not be printed, regardless of the value of this property.
The value of this property cannot be changed anymore after the first call to the
paginate
function.
- props.print_header: bool
Whether to print a header in each page.
Note that by default the header format is unspecified, and if it is unspecified the header will not be printed, regardless of the value of this property.
The value of this property cannot be changed anymore after the first call to the
paginate
function.
- props.print_line_numbers: int
Interval of printed line numbers.
If this property is set to 0 no numbers will be printed. If greater than 0, a number will be printed every “print-line-numbers” lines (i.e. 1 will print all line numbers).
The value of this property cannot be changed anymore after the first call to the
paginate
function.
Fields
- class PrintCompositor
- parent_instance