Распечатайте форму или элемент управления в C#
В этом примере показано, как вы можете распечатать форму или элемент управления в программе на C#. Еще во времена Visual Basic 6 был метод PrintForm. Он просто схватил изображение формы и напечатал ее. Это не было фантазией, но было проще much , чем рисовать распечатку, поэтому многие программы использовали его в качестве своего первоначального метода печати. (И многие программы так и не смогли создать новый метод печати.)
К сожалению, у .NET нет метода PrintForm, поэтому нет простого способа распечатать образ формы. В этом примере показано, как вы можете захватить изображение формы или элемента управления и отобразить его в диалоговом окне предварительного просмотра печати. Вы можете использовать это диалоговое окно для печати, или если вы предпочитаете, чтобы вы отправляли распечатку непосредственно на принтер, вызывая метод PrintDocument объекта Print.
Информацию о том, как захватить изображение формы или элемента управления, см. в сообщении Получить образ элемента управления или формы или клиентской области формы на C# .
В этом примере используется следующий код для отображения изображения элемента управления (включая форму) в диалоговом окне предварительного просмотра печати.
private void ShowControlImage(Control ctl) { using (Bitmap bm = GetControlImage(ctl)) { PrintImage(bm); } }
Этот код вызывает GetControlImage (который использует , чтобы захватить изображение элемента управления. Затем он вызывает следующий PrintImage метод для отображения предварительного просмотра печати.
// Отправьте изображение в PrintPreviewDialog. // (Вы можете изменить его для печати напрямую.) private Image ImageToPrint; private void PrintImage(Image image) { // Сохраним ссылку на изображение для печати. ImageToPrint = image; // Отображение диалогового окна. ppdForm.ShowDialog(); }
Этот код определяет переменную ImageToPrint. Метод PrintImage сохраняет изображение, которое должно отображаться в этой переменной, а затем отображает компонент ppdForm PrintPreviewDialog.
Во время разработки я создал компонент PrintPreviewDialog и объект PrintDocument. Я также установил свойство Document диалогового окна, равное PrintDocument, чтобы он мог отображать документ, когда он был показан.
Последней частью примера является следующий обработчик событий PrintPage.
// Распечатаем страницу. private void pdocForm_PrintPage(object sender, PrintPageEventArgs e) { // Центрировать изображение. int cx = e.MarginBounds.X + e.MarginBounds.Width / 2; int cy = e.MarginBounds.Y + e.MarginBounds.Height / 2; Rectangle rect = new Rectangle( cx - ImageToPrint.Width / 2, cy - ImageToPrint.Height / 2, ImageToPrint.Width, ImageToPrint.Height); e.Graphics.InterpolationMode = InterpolationMode.High; e.Graphics.DrawImage(ImageToPrint, rect); }
Когда объект PrintDocument должен что-то печатать, он вызывает событие PrintPage. Обработчик событий вычисляет положение, которое ему нужно, чтобы предоставить изображение, сохраненное в переменной ImageToPrint, чтобы изображение было сосредоточено в пределах отпечатанных страниц. Затем он создает Rectangle, чтобы определить, где должно быть напечатано изображение.
Далее код устанавливает e.Graphics объект InterpolationMode, чтобы создать немного более плавное изображение. Наконец, код вызывает метод DrawImage, чтобы нарисовать изображение на распечатанной странице.