【问题标题】:Dot Matrix printing in C#?C#中的点阵打印?
【发布时间】:2010-09-19 18:16:36
【问题描述】:

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

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

问题是: 如何在不使用直接打印、转义码等的情况下使用 C# 将格式化的文档(预先打印的文具上的发票)打印到点阵打印机(Epson、Oki 和 Panasonic ......各种型号)。

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

【问题讨论】:

  • 您能给我们提供打印到点阵打印机的示例链接吗?

标签: c# printing xps


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我正在尝试...在 C# (System.Drawing.Printing) 中使用 GDI+ 打印内容,但问题是它仍然与将文本直接发送到不同(一样好)打印机...例如我需要使用什么字体?
    • 我认为这是正确的答案:您不想只针对一台打印机,而是希望将它们全部针对,因此您最好像现在其他人一样打印,而不仅仅是发送字符输出到行式打印机 (LPT)。这样,您的打印机就变成了图形设备。
    • 我认为文本打印机驱动程序是您的最佳选择。您还应该考虑速度,在矩阵打印机上以图形模式打印比使用转义码要慢得多。缺点是与图形打印机不兼容,但对于预打印表格,使用另一台打印机并没有多大用处。
    【解决方案3】:

    看来我想做的事情是不可能的。

    我的打印选择是不受管理的直接到打印机打印(使用 winspool.drv),这使我可以对打印机执行任何我喜欢的操作,并且可以轻松地排列。VB.NET Example 或者我可以使用 GDI+(System. Drawing.Printing) 排列起来很复杂,但可以与 XPS 和 PDF 打印机等非点阵打印机一起使用。

    【讨论】:

      【解决方案4】:

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

      使用点阵打印机,您基本上必须在两种模式下工作:

      • 行/列文本的简单打字机模式,您可以发送转义序列来管理打印机硬件中包含的少量字体,并且必须管理换行等。
      • 页面被光栅化的图形输出,打印机驱动程序仅驱动打印头和针来输出点。

      第一种用法在 Windows 下大部分已被弃用,因为它没有提供太多控制输出的方式,而且每台打印机都有自己的特点,它变得笨拙且难以让软件预测和定位页面上的内容(没有所见即所得)。

      第二个只是使用图形页面范例,使文本和图形的定位独立于打印机的实际功能。
      使用预印文具时,您的作业需要在页面上正确定位数据。
      手动执行此操作会消耗资源,当然不建议在代码中创建布局,因为如果您的打印机、页面格式或打印的文具发生变化,您将无法更改代码。

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

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

      【讨论】:

      • 谢谢,我不确定这是否能解决我的确切问题,但它可能是我迄今为止最好的答案/解决方案。我也不知道 FYIReporting。
      【解决方案5】:

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

      • 需要使用转义码和其他任何内容的点阵打印机报告,该报告保存在文本文件中,然后使用各种方法打印(type file.txt > lpt1 或在代码中选择默认打印机并使用NOTEPAD /P file.txt) - 请参阅this page 了解更多打印方法。
      • 使用报告生成器工具(Crystal Reports、Report ManagerRLIB 或任何可用的其他工具)的激光/喷墨打印机的另一个报告

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

      【讨论】:

        【解决方案6】:

        我不知道如何在 C# 中使用转义序列。但我有通用/纯文本打印机的所有转义序列。希望对您有所帮助。

        通用打印转义序列 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) 选择斜体字体 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 开

        19) 双倍宽度 a) 27,84,0 关 b) 27,84,1 开启

        【讨论】:

          【解决方案7】:

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

          示例粗体字体 27,69

          string.Format("{0}{1}",Convert.ToChar(27),Convert.ToChar(69));

          可能会短一点:

          string.Format("{0}{1}",(char)(27),(char)(69));

          【讨论】:

            【解决方案8】:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-12
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多