Иллюстрированный самоучитель по Visual Basic .NET

Многостраничный вывод. О классе PrintPageEventArgs.

Процесс многостраничной печати основан на небольшой хитрости: если процедура обработки события PrintPage задает свойству HasMorePages объекта PrintPageEventArgs значение True, то объект PrintDocument узнает о наличии дополнительных страниц для печати и автоматически инициирует заново событие PagePrint.

Проблемы, возникающие при многостраничной печати, имеют мало общего с самой печатью. Они присущи любому сложному выводу на графической поверхности: программа должна помнить обо всем. Предположим, вы хотите написать небольшую программу для вывода содержимого текстового поля или текстового файла. В псевдокоде все выглядит просто.

  1. Прочитать строку из поля или из файла.
  2. Не превышает ли длина строки предельное допустимое значение? Если превышает, разбить на несколько фрагментов.
  3. Помещаются ли эти фрагменты на текущей странице?
  4. Если помещаются, напечатать их функцией DrawString начиная с текущей позиции. Если не помещаются, напечатать сколько удастся, начать новую страницу и вывести на ней остальные фрагменты.
  5. Повторить процесс до тех пор, пока не будут обработаны все строки текстового поля или файла.

Однако проверка возможности размещения новой строки на странице не имеет ничего общего с печатью; в ней используются различные метрики, вычисляемые на основании ширины и высоты текстовой строки. В свою очередь, эти параметры зависят от семейства и размера используемого шрифта. К счастью, вы можете положиться на такие методы, как MeasureString; эти методы используют метрики, связанные с текущим контекстом устройства.

О классе PrintPageEventArgs

Объект PrintPageEventArgs содержит два ReadOnly-свойства, при помощи которых можно получить информацию о размерах страницы. Значения обоих свойств задаются в сотых долях дюйма.

  • PageBounds: возвращает размеры прямоугольной области всей страницы.
  • MarginBounds: возвращает размеры прямоугольной области, ограниченной полями.

В свойстве PageSettings объекта PrintPageEventArgs хранится дополнительная информация. В табл. 8.2 перечислены важнейшие свойства класса PageSettings (большинство принтеров позволяет читать эти свойства, но не все принтеры поддерживают запись).

Таблица 8.2. Свойства класса PageSettings.

Свойство Описание
Bounds Возвращает размеры страницы с учетом возможной альбомной ориентации печати. Свойство доступно только для чтения
Color Признак печати страницы в цвете. Логическое свойство, доступное для чтения и записи
Landscape Ориентация страницы. Логическое свойство, доступное для чтения и записи
Margins Размеры полей (по умолчанию равны 1 дюйму). Свойство доступно для чтения и записи
PaperSize Размеры бумаги. Свойство доступно для чтения и записи
PaperSource Источник бумаги. Свойство доступно для чтения и записи
PrinterResolution Разрешение принтера. Некоторые принтеры поддерживают нестандартные разрешения, другие позволяют выбирать только между черновой и качественной печатью. Свойство доступно для чтения и записи
PrinterSettings Настройка принтера для данной страницы. Свойство доступно для чтения и записи

Например, многие принтеры не позволяют печатать ближе, чем в 0.5 дюйма от края бумаги. В этом случае минимальные поля задаются следующей командой:

е.PageSettings.Margins = New System.Drawing.Printing.Margins(50.50.50.50)

Следующий фрагмент начинает печать с левого верхнего края области, ограниченной полями:

Dim g As Graphics
g = e.Graphics
g.DrawImage(PictureBoxl.Image, e.MarginBounds.Left, e.MarginBounds.Top)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.