System/Docu/ru/Printing.odc

Printing

DEFINITION Printing;

	IMPORT Fonts, Views, Dates;

	TYPE
		Par = POINTER TO LIMITED RECORD 
			page: PageInfo;
			header, footer: Banner;
			copies-: INTEGER
		END;

		Banner = RECORD 
			font: Fonts.Font;
			gap: INTEGER;
			left, right: ARRAY 128 OF CHAR
		END;

		PageInfo = RECORD 
			first, from, to: INTEGER;
			alternate: BOOLEAN;
			title: Views.Title
		END;

	VAR par: Par;

	PROCEDURE NewPar (IN page: PageInfo; IN header, footer: Banner; copies: INTEGER): Par;
	PROCEDURE NewDefaultPar (title: Views.Title): Par;
	PROCEDURE PrintView (view: Views.View; p: Par);
	PROCEDURE Current (): INTEGER;
	PROCEDURE PrintBanner (f: Views.Frame; IN p: PageInfo; IN b: Banner; IN date: Dates.Date;
											IN time: Dates.Time; x0, x1, y: INTEGER);

END Printing.


Модуль позволяет распечатать документ, включая верхние и нижние колонтитулы.


TYPE Par
Спецификация задания печати. Передается параметром в функцию PrintView. Во время печати она доступна через глобальную переменную par. Во время печати ее состояние может быть изменено.

page: PageInfo
Информация об областях страницы, которые следует напечатать; о номерах страниц; и о том, печатать ли по-разному левые и правые страницы.

header, footer: Banner
Строка верхнего/нижнего колонтитула для каждой страницы.

copies-: INTEGER	copies >= 1
Число копий для печати.


TYPE Banner
Описывает строку верхнего или нижнего колонтитула.

font: Fonts.Font
Шрифт для верхнего/нижнего колонтитула. Возможен только один шрифт.

gap: INTEGER
Расстояние до следующей базовой линии. В настоящий момент игнорируется для нижних колонтитулов.

left, right: ARRAY 128 OF CHAR
Text of the header/footer line. In this string the following abbreviations may occur:
Текст строки верхнего/нижнего колонтитула. В строке могут встречаться следующие аббревиатуры:
	&p - заменяется на номер текущей страницы в арабской нумерации
	&r - заменяется на номер текущей страницы в римской нумерации
	&R - заменяется на номер текущей страницы в заглавной римской нумерации
	&a - заменяется на номер текущей страницы как алфавитно-цифровой символ (as alphanumeric character).
	&A - заменяется на номер текущей страницы как заглавный алфавитно-цифровой символ
	&d - заменяется датой распечатки
	&t - заменяется временем распечатки
	&& - заменяется символом &
	&; - задает точку разрыва (split point)
	&f - имя файла с путем/заголовком

Текст центрируется, если не встречаются точки разрыва. Точки разрыва действуют подобно пружинам: они "разжимают" элементы к левому и правому краям. Например, "&;&p" прижимает арабский номер страницы к правому краю листа.


TYPE PageInfo
Информация о страницах, которые печатаются.

first: INTEGER
Номер первой страницы, которую следует напечатать. Номер текущей печатаемой страницы равен Current() + first. Может быть изменен во время печати.

from, to: INTEGER	(from >= 0) & (to >= from)
Диапазон страниц для печати. Спецификация дается не в номерах страниц, а в абсолютных номерах. Первая страница документа имеет номер 0. Будет напечатано to-from+1 страниц.

alternate: BOOLEAN
Указывает, когда правые и левые страницы обрабатываются по-разному. Если ~alternate, то каждая страница печатается с колонтитулами, заданными для правых страниц. Иначе страницы с нечетными номерами используют правые колонтитулы, в то время как страницы с четными номерами используют левые колонтитулы. Номер текущей страницы равен first + Current().

title: Views.Title
Заголовок документа.


VAR par: Par
Эта переменная устанавливается во время печати документа и может изменяться печатаемым отображением. Однако эту переменную не следует использовать для задания, когда документ печатается или отображается (см. Views.IsPrinterFrame).


PROCEDURE NewPar (IN page: PageInfo; IN header, footer: Banner; copies: INTEGER): Par
Размещает и инициализирует новый объект параметров печати.

Постусловие
result.page = page
result.header = header
result.footer = footer
result.copies = copies
header.font # NIL => result.header.font = header.font
header.font = NIL => result.header.font = Fonts.dir.Default()
footer.font # NIL => result.footer.font = footer.font
footer.font = NIL => result.footer.font = Fonts.dir.Default()

PROCEDURE NewDefaultPar (title: Views.Title): Par
Размещает и инициализирует новый объект параметров печати.

Постусловие
result.page.first = 1
result.page.from = 0
result.page.to = 9999
result.page.alternate = FALSE
result.copies = 1
result.header.gap = 0
result.header.left = ""
result.header.right = ""
result.header.font = Fonts.dir.Default()
result.footer.gap = 0
result.footer.left = ""
result.footer.right = ""
result.footer.font = Fonts.dir.Default()

PROCEDURE Current (): INTEGER
Возвращает номер текущей печатаемой страницы.

Постусловие
result >= 0

PROCEDURE PrintView (view: Views.View; par: Par)
Печатает отображение на текущем принтере, при условии, что принтер будет доступен.
Параметром par может быть передан NIL. В этом случае создается параметр по умолчанию. Он инициализируется:
	copies := 1;
	page.first := 1, page.from := 0, page.to := 9999, page.alternate := FALSE; page.title := title;
	header.gap := 0; header.left := ""; header.right := "";
	header.font := Fonts.dir.Default();
	footer.gap := 0; footer.left := ""; footer.right := "";
	footer.font := Fonts.dir.Default();
иначе
	par.title переписывается title.
Фактически печатается не отображение view, а его копия. PrintView делает поверхностную копию отображения, которое распечатывается, в целях защиты исходного отображения от изменений, связанных с нумерацией страниц, прокруткой, и других изменений, которые могут происходить во время печати.

Предусловие
view # NIL	20
par # NIL =>
	par.page.first >= 0	23
	par.page.from >= 0	24
	par.page.to >= par.page.from	25
	par.copies > 0	25

PROCEDURE PrintBanner (f: Views.Frame; IN p: PageInfo; IN b: Banner;
												IN date: Dates.Date; IN time: Dates.Time; x0, x1, y: INTEGER)
Для внутреннего пользования.