Небольшая запись, рассказывающая о том, как на самом деле просто выводить на печать текст и изображения средствами 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" (если оно есть в папке с программой), а так же четыре строчки текста, причем первые три строки имеют отступ в виде пробелов.
Вот пожалуй и все.