打印在.net上的点阵式打印机上

任何人都可以告诉我代码如何在C#windows应用程序中的点阵打印机上打印文档。

您可以“以图形方式”打印到点阵,这是在Windows中内置的,虽然速度较慢。

但是,如果您只想使用简单的格式打印纯文本,则需要将转义命令发送到点阵打印机,这比图形打印更快。 不同的打印机有不同的转义命令

以下是典型的转义命令(适用于epson): http : //www.printfil.com/manualen/c5.htm

这可能会有所帮助: https : //web.archive.org/web/20051212193242/http : //sacpcug.org : 80 / archives / 0306 / prc0603.html

我在VB6中做的是打印到Generic / Text Only打印机,打开PRN或LPT1作为文件句柄,然后在文件句柄上打印转义命令,所有转义命令将被重定向到任何连接到LPT1的打印机或PRN。 您可以使用C#执行相同的操作,只需将PRN或LPT1作为文件打开,然后打印到它。

要添加Generic / Text Only打印机,请使用控制面板>打印机>添加打印机。 在制造商上,选择Generic,然后在打印机上,选择Generic / Text only。

您可以为Zebra打印机执行相同的操作(在Generic / Text上打印),这些打印机具有用于打印条形码的自己的转义命令,这比以图形方式打印Windows更快。

当您使用喷墨打印机或激光打印机进行打印时,通常不使用打印机的内置字体。 您使用Windows字体。 发生的事情是打印机驱动程序要么构建像素图像(包括文本)并将其发送到打印机,要么发送用于绘制线条,样条曲线和其他形状的命令到打印机,字体表示为线条和样条线(概述)。

当您打印到较旧的点阵式打印机时,您可以这样做,但速度很慢。 每行文本必须从像素“构建”,并且通常文本行与打印头的通过不匹配(特别是对于大于或小于12点的字体)。

使用这些打印机的旧方法,就像它们的用途一样,是将文本的实际ASCII码发送到打印机。 发送数字65(十进制),你得到一个大写(大写)“A”。 数字49(十进制)将打印数字“1”,而数字32将是空白空间,33是感叹号(“!”),依此类推。 一个字节=一个字符。 点阵打印机有自己的内置字体,并且在其字体ROM中查找ASCII代码,并从那里确定打印线在生成这些字母时必须准确敲击页面的确切时间。

通过使用ESCape代码,您可以将这些效果指定为伪粗体(基本上将字母敲击两次,第二个副本向右移动一个点宽度),双倍宽度(连续两次敲击每列导线)每次通常会被击打,从而加倍字母的宽度),加下划线(无论字母形状是否在那个点上要求,都要打到底部打印线),依此类推。

打印机自己的ROM处理了有关打印线等的所有这些机械细节。 您的所有程序必须提供的是文本的实际ASCII代码(包括控制代码,如数字13 [回车也称为CR],以将打印头返回到左边距[或者,对于双向打印机,准备打印下一行与前一行的相反顺序],通常后跟数字10 [换行也称LF]将纸卷向上一行以准备打印下一行)。

如果你想用打印机没有的花哨字体打印或打印图形,你必须使用ESCape代码将打印机设置为“图形模式”,在这种模式下你基本上发送的字节的位数将指定用于激活个人打印头的电线在直接程序控制下,而不是在打印机的字体ROM中查找字符形状。 当您使用特定于打印机的驱动程序从Windows正常打印时,通常会发生这种情况。

对于菊花轮或其他固定字符打印机( 例如 IBM Selectric型球机构),ASCII代码会将轮子或球旋转到正确位置,然后敲击色带,从而在页面上打印字母,或发送右锤击打色带,从而击中页面(TeleType或旧打字机制)。 除了通过打印重复周期和微推进打印头和纸张周期的宽度/高度而不是文本的字符/行(通常会磨损周期字符)之外,不能用这些做像素图形。菊花轮或球的速度非常快,因此很多都有金属加强的时间段。

这与喷墨或激光打印机的打印有何不同?

MSDN:打印概述

使用.NET打印命名空间从Windows窗体应用程序预览和打印

虽然它不在C#中,但我编写的Access报告使用了Epson打印机的原生字体。 几年前 – 使用Windows XP – 但是当选择默认打印机时,可以通过字体选择器选择打印机的“本机”字体。

它非常整洁 – 我可以使用我喜欢的任何字体标题,这些字体打印速度很慢。 然后我可以选择详细行的本机打印机字体,这很快。 这样做我必须小心,所有“原生”字体细节stauff具有完全相同的垂直对齐,否则它再次变慢。