Создание Windows-приложений на основе Visual C#

         

Печать содержимого PictureBox


Теперь займемся печатью изображений, помещенных в PictureBox. Добавляем на форму элементы PrintDocument, PageSetupDialog, PrintPreviewDialog и PrintDialog. На этот раз мы не будем настраивать визуально свойства этих элементов. Создаем обработчиков пунктов меню, в которых просто вызываем диалоговые окна:

Листинг 6.9.

(html, txt)

Обратите внимание на свойство диалоговых окон Document — мы программно устанавливаем значение printDocument1. Переключаемся в режим дизайна, выделяем объект printDocument1 и в окне Properties дважды щелкаем в поле события PrintPage:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { }

Дальнейший код будет относиться к этому обработчику. Проверяем наличие изображения в pictureBox1:

if (pictureBox1.Image == null) { e.Cancel = true; return; }

Определяем печатную область страницы:

float leftMargin = e.MarginBounds.Left; float rightMargin = e.MarginBounds.Right; float topMargin = e.MarginBounds.Top; float bottomMargin= e.MarginBounds.Bottom; float printableWidth = e.MarginBounds.Width; float printableHeight = e.MarginBounds.Height;

Cоздаем экземпляр graph класса Graphics:

Graphics graph = e.Graphics;

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

Font font= new Font("Comic Sans MS", 16); //Определяем высоту шрифта float fontHeight = font.GetHeight(graph); //Определяем размер пробелов float spaceWidth = graph.MeasureString(" ", font).Width;

Определяем область, в которую будет вписываться изображение; размер наибольшей стороны изображения составляет 90% от кратчайшей стороны листа:

float imageLength; float Xposition = leftMargin; float Yposition = topMargin + fontHeight; if (printableWidth < printableHeight) { imageLength = printableWidth * 90/100; Yposition += imageLength; } else { imageLength = printableHeight * 90/100; Xposition += imageLength + spaceWidth; }



Содержание раздела