使用GDI裁切纸(“送纸和裁切”)?

问题描述 投票:1回答:1

[许多打印机都有一个“送纸和裁切”或“裁切纸”命令(我说的是POS-这里的打印机)。

由于并非总是可以使用POS.NET(严重的驱动程序不兼容性),并且GDI可以做得更多,因此,在使用GDI进行打印时,我们也想使用切纸器。

有办法吗?可能在发出EndDocument()时?

甚至可能来自.NET?

printing gdi point-of-sale
1个回答
2
投票

GDI甚至是抽象的Windows打印模型都可能对您没有帮助。您将必须使用通常希望接收数据的语言将供纸和剪切命令发送到打印机。

例如,Epson TM-T88III thermal receipt printer本身讲ESC / POS语言,而不是GDI或PCL命令序列。但是,大多数这些打印机都附带打印机驱动程序,这些驱动程序使Windows将其视为常规GDI打印机。这些驱动程序通常的工作方式是,将所有GDI命令光栅化为软件中的一个大位图,然后通过其本机语言“打印位图”命令将位图分发给打印机以进行打印。这通常具有不良效果:

  • 将大量的位图数据发送到打印机的效率要比它知道如何解释的二进制命令序列要低得多(就所需的时间和传输的数据而言)。 (您希望发送要打印的文本图像,还是仅发送实际文本和字体大小规范?类似于HTML / CSS与文本图像。)
  • 这些打印机通常具有较低的分辨率,并且是单色的(即,全黑或全白,没有灰度或彩色)。它们的预加载字体旨在在这些限制下正常工作,以实现清晰清晰的呈现。通过栅格化为位图,由于像素被捕捉并从网格四舍五入,我们失去了精心设计的结果,从而在实际的打印输出上呈现出锯齿状的文本。如果您要绘制对这种舍入非常敏感的东西(例如条形码),那么您就是SOL,除非您在使用GDI时不遗余力地记住打印机设备上下文的DPI。

例如,这是an extensive example on my usually-irrelevant blog中的代码段。您可以在结尾处看到如何在Epson热敏票据打印机上用等于“进纸并裁切”命令的必要字节顺序填充BinaryWriterAsciiControlChars只是一个带有常量的静态类):

        using (var ms = new MemoryStream())
        using (var bw = new BinaryWriter(ms))
        {
            // Reset the printer bws (NV images are not cleared)
            bw.Write(AsciiControlChars.Escape);
            bw.Write('@');

            // Render the logo
            RenderLogo(bw);

            // Feed 3 vertical motion units and cut the paper with a 1 point cut
            bw.Write(AsciiControlChars.GroupSeparator);
            bw.Write('V');
            bw.Write((byte)66);
            bw.Write((byte)3);

            bw.Flush();

            return ms.ToArray();
        }

然后,您可以使用该文章末尾的代码将字节作为RAW文档直接发送到打印机,该代码可与各种Win32打印机功能配合使用,或者使用Microsoft的RawPrinterHelper class

您需要查找特定于打印机的命令。可能是它与您在此处看到的没有太大不同:POS语言已经开始标准化,但这也就像说SQL是一种标准-人类可以相互理解,但如果不进行一些调整就无法真正实现互操作。

[如果您确实仍然想使用GDI,则可以按常规方式将GDI文档打印到打印机(同样,假设它确实存在GDI打印机驱动程序),然后发出第二个小的RAW文档发送到包含本机送纸和剪切命令的打印机。 (或者,某些GDI打印机驱动程序使您可以在“打印机”控制面板中直接指定“在打印文档后始终剪切”,但是祝您好运,以编程方式很好地访问该驱动程序功能!)

希望这有助于描绘GDI与POS打印机的关系。


0
投票

[向您问好,您有库存爱普生TM-T88V打印机,我想购买100台爱普生TM-T88V打印机。请发送报价,我们的付款条件是信用卡。

David Shively.1-346-246-0339。

© www.soinside.com 2019 - 2024. All rights reserved.