在C#中通过并口打印点阵字符

4

为了项目的需要,我想在特定位置通过LPT1打印,这将在点阵打印机上打印一个文档,在应该放置值的位置打印。我真的很讨厌回头,也不知道从哪里开始。互联网上没有关于使用C#在LPT端口打印以及如何在打印时发送特定位置的值的具体信息。有没有好的例子?教程可以拯救生命。


今天是否仍有出售带有并行端口的消费系统? - Anon.
2
不幸的是,仍然有商业文件需要在那些打印机上打印 :( 但实际上这也是为了支持旧的方式... - George Taskos
4个回答

5

我可以建议一件事情让您的生活更轻松,安装一个通用文本打印机驱动程序(这是标准的),并将其设置为LPT1端口。然后,您只需打开“LPT1”并发送转义代码序列来指定字体类型(粗体/斜体)、强调、字体间距等。我不知道是否需要资源。但我想应该是这样的:

using (System.IO.StreamWriter sr = new System.IO.StreamWriter(@"\\.\LPT1"))
{
    sr.Write(0x1b);
    sr.Write('k');
    sr.Write('1');
    sr.Write("Hello"); // print in Sans Serif
    sr.WriteLine();
    sr.Flush();
}

资源:

  • 使用VB.NET打印到zebra打印机 (这可以很容易地转换为C#或编译成DLL并在您的C#项目中引用)
  • 关于如何与LPT1接口的MSDN文章
  • 这里有一个涉及Parallel Port的广泛信息列表。(查看标题为“Programming Tools for Port I/O and Interrupts”的部分),讨论了使用名为inpout32的DLL。
  • 这是另一篇MSDN文章,展示了如何进行原始打印。

编辑于2017-07-12:更新了Parallel Port链接以使用Wayback Archive Machine。


并口链接不再显示您在答案中描述的内容。您是否有类似的链接来源? - Mauricio Arias Olave
@MauricioAriasOlave:更新了链接,惊讶你没有想到使用wayback机器。 - t0mm13b

3

这个打印机是否有适用于Windows的打印驱动程序呢?如果有,那么无论它是否通过LPT1进行打印,它都只是使用标准的打印功能。

类似的问题:C#中的点阵打印?


你的意思是我可以创建一个报告并将其发送到那台打印机上? - George Taskos
如果您有打印机驱动程序(即在控制面板/设备中显示为打印机),那么可以。大多数打印机都具有通用兼容模式,即使您没有完全匹配的型号编号,也可以使用它们。 - Donald Byrd
1
这会使发票打印变慢500%,因为它将文本打印成图像。 - Vedran

1

0

嘿,我在2019年刚买了一台点阵打印机,你现在仍然可以花5英镑购买打印带。

using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

public class ParallelPrinter
{
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern SafeFileHandle CreateFile(string lpFileName, FileAccess dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);

    public static void Print(string text)
    {
        using (SafeFileHandle fileHandle = CreateFile("LPT1:", FileAccess.Write, 0, IntPtr.Zero, FileMode.OpenOrCreate, 0, IntPtr.Zero))
        {
            if (fileHandle.IsInvalid == true)
                throw new ApplicationException("Printer is Invalid");

            using (FileStream stream = new FileStream(fileHandle, FileAccess.Write))
            {
                using (StreamWriter writer = new StreamWriter(stream, Encoding.ASCII))
                {
                    writer.Write(text);
                }
            }
        }
    }
}

没有驱动程序,你只需要一个并口,如果没有的话可以买一张PCI-e扩展卡。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接