任何人都可以告诉我代码如何在C#windows应用程序中的点阵打印机上打印文档。
答案 0 :(得分:9)
您可以在Windows中内置“图形化”点阵,虽然速度较慢。
但是如果你只想用简单的格式打印纯文本,你需要向你的点阵打印机发送转义命令,这比图形打印更快。不同的打印机有不同的转义命令。
以下是典型的转义命令(适用于爱普生):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 Only 上打印),这些打印机具有用于打印条形码的自己的转义命令,这比以图形方式打印Windows更快。
答案 1 :(得分:4)
当您使用喷墨打印机或激光打印机进行打印时,通常不使用打印机的内置字体。您使用Windows字体。发生的情况是打印机驱动程序要么构建像素图像(包括文本)并将其发送到打印机,要么发送用于绘制线条,样条曲线和其他形状的命令到打印机,字体表示为线条和样条线(概述)。
当您打印到较旧的点阵式打印机时,您可以这样做,但速度很慢。每行文本必须从像素“构建”,并且文本行通常与打印头的通过不匹配(特别是对于大于或小于12点的字体)。
使用这些打印机的旧方式,就像它们的用途一样,是将文本的实际ASCII码发送到打印机。发送数字65(十进制),你得到一个大写(大写)“A”。数字49(十进制)将打印数字“1”,而数字32将是空白空间,33是感叹号(“!”),依此类推。一个字节=一个字符。点阵式打印机有自己的内置字体,它会在其字体ROM中查找ASCII代码,并从那里确定打印线在生成这些字母时必须准确敲击页面的确切时间。 / p>
通过使用ESCape代码,您可以将这些效果指定为伪粗体(基本上将字母敲击两次,第二个副本向右移动一个点宽度),双倍宽度(每列导线两次敲击)通常会被击打的每一次的一行,因此加倍字母的宽度),加下划线(无论字母形状是否在那个点上要求它,都打到底部的打印线),依此类推。
打印机自己的ROM处理了有关打印线等的所有这些机械细节。您的所有程序必须提供的是文本的实际ASCII代码(包括控制代码,例如13号[Carriage Return aka CR],以将打印头返回到左边距[或者,对于双向打印机,准备打印下一行与上一行相反的顺序],通常后跟数字10 [换行也称LF]将纸张向上卷一行以准备打印下一行。)
如果您想打印打印机没有的花哨字体或打印图形,您必须使用ESCape代码将打印机设置为“图形模式”,在该模式中您基本上发送了其位将指定的字节在直接程序控制下触发打印头的各个导线,而不是在打印机的Font ROM中查找字符形状。当您使用特定于打印机的驱动程序从Windows正常打印时,通常会发生这种情况。
对于菊花轮或其他固定字符打印机(例如 IBM Selectric型球机构),ASCII代码会将轮子或球旋转到正确的位置,然后敲击色带,从而在页面上打印字母,或者向右发送锤子以打开色带,从而打开页面(TeleType或旧打字机构)。除了通过打印重复周期和微推进打印头和纸张周期的宽度/高度而不是文本的字符/行(通常会磨损周期字符)之外,不可能用这些做像素图形。菊花轮或球的速度非常快,因此很多都有金属加固时期。
答案 2 :(得分:0)
这与喷墨或激光打印机上的打印有何不同?
Preview and Print from Your Windows Forms App with the .NET Printing Namespace
答案 3 :(得分:0)
虽然它不在C#中,但我编写的Access报告使用了Epson打印机的原生字体。几年前 - 使用Windows XP - 但是当选择默认打印机时,可以通过字体选择器选择打印机的“本机”字体。
它非常整洁 - 我可以使用我喜欢的任何字体标题,这些字体打印速度很慢。然后我可以选择详细行的本机打印机字体,这很快。这样做我必须小心,所有“原生”字体细节stauff具有完全相同的垂直对齐,否则它会再次变慢。