C#之Windows自带打印功能的实现.docx
第
C#之Windows自带打印功能的实现
目录一、打印控件二、系统API接口总结接着上回说,在使用打印机自带的SDK开发失利只后,经过一系列的实验,发现,这个打印机可以直接用我安装好的驱动直接进行打印操作,用word直接调整好字体之后打印是完全没有问题的,所以,推测,应该可以直接调用人家封装好的一些驱动进行打印,但是要怎么连接这些驱动呢?
一、打印控件
首先我们要提到的就是在C#中的一个关于打印的控件了,叫:PrintDocument,说他是一个控件,其实也就是一个关于windows打印的属性和代码的集合而已,但是结合着windows自带的一些对话框窗体,我们可以轻而易举的做一个打印的小程序。
我们要做的是,首先建立一个窗体,然后从工具箱中找到PrintDocument这个控件,然后添加上就可以了,可以看到控件的属性是这样的:
并没有什么特殊的地方,但是在方法里面却有一个很重要的方法,那就是他的printPage这个方法,这个就是每次触发这个控件的打印的内容核心,先贴上如下代码:
privatevoidpd1_PrintPage(objectsender,System.Drawing.Printing.PrintPageEventArgse)
Graphicsg=e.Graphics;//获得绘图对象
floatlinesPerPage=0;//页面的行号
floatyPosition=0;//绘制字符串的纵向位置
intcount=0;//行计数器
floatleftMargin=1;//左边距
floattopMargin=1;//上边距
stringline=;//行字符串
FontprintFont=this.textBox1.Font;//当前的打印字体
SolidBrushmyBrush=newSolidBrush(Color.Black);//刷子
linesPerPage=e.MarginBounds.Height/printFont.GetHeight(g);//每页可打印的行数
//逐行的循环打印一页
while(countlinesPerPage((line=lineReader.ReadLine())!=null))
yPosition=topMargin+(count*printFont.GetHeight(g));
g.DrawString(line,printFont,myBrush,leftMargin,yPosition,newStringFormat());
count++;
//注意:使用本段代码前,要在该窗体的类中定义lineReader对象:
//StringReaderlineReader=null;
//如果本页打印完成而line不为空,说明还有没完成的页面,这将触发下一次的打印事件。在下一次的打印中lineReader会
//自动读取上次没有打印完的内容,因为lineReader是这个打印方法外的类的成员,它可以记录当前读取的位置
if(line!=null)
e.HasMorePages=true;
else
e.HasMorePages=false;
//重新初始化lineReader对象,不然使用打印预览中的打印按钮打印出来是空白页
lineReader=newStringReader(textBox1.Text);//textBox是你要打印的文本框的内容
}
这里需要注意的是,使用了lineReader这个类的对象,这个对象的特点就是可以把对象中赋值的字符串按照行(以\r\n为准的换行)来进行字符串的获取,上面代码中的line就是指的获得的一行的数据。
我们用system.draw的Graphics里面的绘图对象来进行基本的字符绘图,最后把绘图对象打印到我们纸上,就是这个打印里面的内容。
所以,我们这个里面需要引入的一个引用就是usingSystem.Drawing.Printing;这样整个控件加代码就可以运行了,说明一下,这个打印的调用需要触发,使用的是如下代码:
lineReader=newStringReader(stb.ToString());//获取要打印的字符串
pd1.Print();//执行打印方法
另外说明一下,这里执行的时候,有一