C#: Печать на принтере

Небольшая запись, рассказывающая о том, как на самом деле просто выводить на печать текст и изображения средствами FrameWork в среде VS на языке C#.

Нельзя сказать что данную задачу нужно решать очень часто, однако порой, все таки, решать ее приходится. На самом деле Печать на принтере в языке программирования CSharp это не что иное как рисование (порой складывается впечатление, что класс графики является чуть ли не основным, а куда деваться…).

Начнем. Прежде всего нам необходимо подключить нужный неймспейс:

using System.Drawing.Printing;

Теперь в качестве отступления стоит отметить следующий факт. Так как по сути печать — это процесс рисования, то не стоит забывать что рисуем мы на чем-либо. В нашем случае это «что-либо» — лист бумаги. А лист как известно имеет свои размеры. В связи с этим не стоит забывать что рисование ограничено областью листа, и все операции учета высоты и ширины листа стоит учитывать самостоятельно (разбиение на страницы не исключение).

Для того чтобы печатать, будем использовать класс PrintDocument.

private PrintDocument PD = new PrintDocument();

Если посмотреть свойства и методы объекта PD, то не сложно догадаться, что печать вызывается методом Print(). Однако вот тут и появляется вопрос, а что собственно, где и как будет печататься? Ведь метод не имеет параметров. Вот тут как раз я и опишу пару основных параметров.

Первое. Нам необходимо задать параметры где мы будем печатать. Это делается путем назначения свойства PD.PrinterSettings.

Например:

string PrinterName = "Canon MF2540";
PrinterSettings PS = new PrinterSettings();
PS.PrinterName = PrinterName;
PD.PrinterSettings = PS;

Важно: Имя принтера можно взять из коллекции PrinterSettings.InstalledPrinters!

Второе. Нужно задать что и как мы будем печатать. Для этого нужно определить событие печати документа. Другими словами, вызов метода PD.Print() — это ни что иное, как вызов события печати и не более.

PD.PrintPage += new PrintPageEventHandler(PD_PrintPage);

и определяем данный метод.

private void PD_PrintPage(object sender, PrintPageEventArgs e)
{
   string PrintText = "            <- отступ для картинки\r\n";
   PrintText += "            <- отступ для картинки 2\r\n";
   PrintText += "            <- отступ для картинки 3\r\n";
   PrintText += "Текст без отступа на 4ой строке";
   Font PrintFont = new Font("Times New Roman", 3, FontStyle.Regular, GraphicsUnit.Millimeter);
   if (File.Exists("img.gif")) 
    e.Graphics.DrawImage(Image.FromFile("img.gif"), 0, 0);
   e.Graphics.DrawString(PrintText, PrintFont, Brushes.Black, new PointF(0, 0));
}

Данный метод будет печатать без отступов от верхнего левого угла. Не сложно заметить что будет напечатано изображении "img.gif" (если оно есть в папке с программой), а так же четыре строчки текста, причем первые три строки имеют отступ в виде пробелов.

Вот пожалуй и все.

Запись опубликована в рубрике C# с метками , , , , . Добавьте в закладки постоянную ссылку.