C#中的点阵打印?

时间:2008-10-29 09:34:35

标签: c# printing xps

我正在尝试使用C#打印到Dot Matrix打印机(各种型号),目前我正在使用Win32 API(您可以在网上找到很多示例)调用将转义码直接从我的C#发送到打印机应用。这很好用,但是......

我的问题是因为我正在生成转义码并且不依赖于Windows打印系统,打印输出无法发送到任何“普通”打印机或PDF打印驱动程序等。 (这现在导致问题,因为我们尝试使用Easy Print [基于XPS]在2008终端服务器上使用该应用程序)

问题是: 如何使用C#打印格式化文档(预打印固定发票)到Dot Matrix打印机(Epson,Oki和Panasonic ......各种型号),不使用直接打印,转义码等。

**只是为了澄清一下,我正在尝试像GDI +(System.Drawing.Printing)之类的东西,但问题是它很难,就像旧代码那样排队。 (旧代码绕过Windows驱动程序将字符直接发送到打印机。)有什么建议可以改进,以便他们可以使用GDI +,但仍像旧代码一样排队吗?

8 个答案:

答案 0 :(得分:10)

您应该使用报告工具制作模板,以便您或用户正确定位与预印文具相关的字段。

使用点阵打印机,您基本上必须使用以下两种模式之一:

  • 行/列文本的简单类型 - 写入器模式,您可以在其中发送转义序列以管理打印机硬件中包含的少量字体,并且必须管理行返回等。
  • 图形输出,其中页面被光栅化,打印机驱动程序只是驱动打印头和引脚输出点。

第一种用法主要是在Windows下弃用,因为它在控制输出方面没有提供太多帮助,而且每台打印机都有自己的特性,软件很难预测和定位页面上的内容(不WYSIWYG)。

第二种只使用图形页面范例,使文本和图形的定位与打印机的实际功能无关。
使用预先打印的信纸时,您的工作是在页面上正确定位数据 手动执行此操作非常耗费资源,当然不建议在代码中创建布局,因为如果打印机,页面格式或打印文具发生变化,您将无法更改代码。

最好的方法是使用.Net提供的标准打印模型和一个报告工具,该工具允许您定义正确定位文本和图形的模型和模板,然后从代码中驱动它。

Visual Studio附带了一个Crystal Reports版本,但还有其他更好的报告系统(我使用的是developer express中的一个),其中一些甚至是free

答案 1 :(得分:5)

根据我的经验,对同一数据使用两种报告会更容易:

  • 使用转义码和其他任何其他内容的点阵打印机的一份报告,保存在文本文件中,然后使用各种方法打印(type file.txt > lpt1或在代码中选择默认打印机并使用{{1} }) - 有关更多打印方法,请参阅this page
  • 使用报告构建工具(Crystal Reports,Report ManagerRLIB或其他任何可用内容)的激光/喷墨打印机的另一份报告

由于为正确类型的报告购买合适类型的打印机并不罕见,因此这种方法的优势在于让客户决定:点阵式打印机用于A3 / A4纸张格式的文本报告(通常用于会计)部门)或激光/喷墨打印机的图形报告。

答案 2 :(得分:4)

我不知道如何在C#中使用Escape序列。但我有所有Escape Sequence for Generic / Text Only打印机。希望它有所帮助。

通用打印转义序列 1)设置行间距 a)1/8英寸 - 27,48 b)1/6英寸--27,50

2)选择草稿质量 a)27,120,0 / 27,120,48

3)信件质量 a)27,120,1 / 27,120,49

4)双倍高度 a)27,119,n i)n = 1开 ii)n = 0关闭

5)双向打印 a)27,85,n i)0 - 双向 ii)1 - 单程

6)增加角色空间 a)27,32,n(增加n / 12英寸)

7)选择粗体字体 a)27,69

8)取消粗体字体 a)27,70

9)选择Italic Font a)27,52

10)取消斜体字体 a)27,53

11)选择 a)10cpi 27,8 b)12cpi 27,77 c)15cpi 27,103 d)18cpi 27,103

12)设置右边距 a)27,81,n

13)设置左边距 a)27,108,n

14)换页 a)12

15)浓缩印刷 a)0F开 b)12关

16)双击打印 a)27,71

17)取消打击打印 a)27,72

18)在线下 a)27,45,0关闭 b)27,45,1 On

19)双倍宽度 a)27,84,0折 b)27,84,1 ON

答案 3 :(得分:4)

首先将Sequence命令转换为字符然后传递给打印机

示例粗体字27,69

的String.Format( “{0} {1}”,Convert.ToChar(27),Convert.ToChar(69));

或许有点短:

的String.Format( “{0} {1}”,(char)的(27),(char)的(69));

答案 4 :(得分:1)

查看System.Drawing.Printing命名空间。

答案 5 :(得分:0)

如果您的打印机有要安装的驱动程序,则可以使用普通的Windows打印系统。大多数打印机,包括POS打印机,都有可用的Windows驱动程序。 (大多数点阵打印机都是Epson兼容的。)有些POS打印机驱动程序也允许将转义码直接发送到打印机(使用特殊字体);可能你不需要这样的功能。

如果不是这种情况,则可以在添加打印机向导的帮助下添加Generic / Text Only打印机(驱动程序)。完成后,您可以为其配置某些命令(转义序列) - 字体大小10/12/17,粗体开/关,下划线开/关,作业开始/停止,进纸和尺寸选择。

我正在使用与FILE端口关联的通用打印机来测试POS打印机的各种报告 - 可以轻松查看文本文件以验证打印输出中的数字。当然需要格式化特定的打印机驱动程序。

答案 6 :(得分:0)

似乎我想做的事情是不可能的。

我的打印选择是直接打印机打印(使用winspool.drv),它允许我对打印机做任何我喜欢的事情,并允许我轻松排列。VB.NET Example或者我可以使用GDI +( System.Drawing.Printing)这很复杂,可以排队,但可以使用非点阵打印机,如XPS和PDF打印机。

答案 7 :(得分:0)

相关问题