文档详情

C#之Windows自带打印功能的实现.docx

发布:2025-05-12约3.41万字共36页下载文档
文本预览下载声明

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();//执行打印方法

另外说明一下,这里执行的时候,有一

显示全部
相似文档