【问题标题】:Printing in (Parallel Port) Dot Matrix over C#通过 C# 在(并行端口)点阵中打印
【发布时间】:2011-01-09 08:46:52
【问题描述】:

为了项目的需要,我想在 LPT1 的特定位置打印,这将在点阵打印机中打印文档,我应该在它们应该去的地方打印值。我真的很讨厌回去,我不知道从哪里开始。 Internet 没有关于使用 C# 在 LPT 端口中打印的具体信息,尤其是在打印时如何在特定位置发送值。有什么好的例子吗?这个教程?将是一个生命的救星。

【问题讨论】:

  • 现在销售的消费者系统是否仍然具有并行端口?
  • 不幸的是,这些打印机仍然需要打印商业文件:(但实际上这也是为了支持旧方式......

标签: c#-3.0 printing parallel-port dot-matrix


【解决方案1】:

我可以建议一件事让您的生活更轻松,安装通用文本打印机驱动程序(这是标准配置)并将其设置为 LPT1 端口。然后你可以简单地打开'LPT1'并发送escape code序列来指定字体类型(粗体/斜体)、强调、字体间距等。我不知道是否需要资源。但我想它会是这样的:

System.IO.StreamWriter sr = new System.IO.StreamWriter(@"\\.\LPT1"); sr.Write(0x1b); sr.Write('k'); sr.Write('1'); sr.Write("你好"); // 以无衬线字体打印 sr.WriteLine(); sr.Flush(); sr.关闭();

资源:

  • 使用 VB.NET 打印到 zebra printer(这可以轻松转换为 C# 或将其编译为 DLL 并在您的 C# 项目中引用)
  • MSDN 上关于如何与 LPT1 接口的文章
  • 这是与Parallel Port 相关的详细信息列表。 (进一步往下看标题为“端口 I/O 和中断的编程工具”的部分),讨论这个名为 inpout32 的 DLL 的用法。
  • 这是MSDN 上的另一篇文章,展示了如何进行原始打印。

于 2017-07-12 编辑:更新了并行端口链接以使用 Wayback Archive Machine。

【讨论】:

  • Parallel Port link 不再显示您在回答中描述的内容。有没有类似的链接来源?
  • @MauricioAriasOlave:更新了链接,很惊讶你没有想到使用回程机器。
【解决方案2】:

有问题的打印机没有 Windows 打印驱动程序吗?如果是这样,它是否在 LPT1 上打印并不重要,它只是使用标准的 Print 东西。

类似问题:Dot Matrix printing in C#?

【讨论】:

  • 你的意思是我可以创建一个报告并将其发送到那台打印机?
  • 如果您有打印机的打印机驱动程序(即,它在控制面板/设备中显示为打印机),是的。大多数打印机都有通用兼容模式,即使您没有精确的型号匹配,也可以使用它们。
  • 这会使发票的打印速度降低 500%,因为它将文本打印为图像。
【解决方案3】:

如果您的打印机有 Windows 驱动程序,那么您可以使用标准打印技术。请参阅 Petzold 的书 Programming Microsoft Windows with C# 以获得很好的介绍。

【讨论】:

    【解决方案4】:

    嘿,我在 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 卡。

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多