Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET将原始数据打印到热敏打印机_C#_Thermal Printer - Fatal编程技术网

C# 使用.NET将原始数据打印到热敏打印机

C# 使用.NET将原始数据打印到热敏打印机,c#,thermal-printer,C#,Thermal Printer,我正试图将原始ascii数据打印到热敏打印机上。我使用下面的代码示例来实现这一点:但是我的打印机总是只打印一个字符,并且直到我按下表单馈送按钮时才会打印。如果我用记事本打印东西,打印机将自动执行表单馈送,但不打印任何文本 打印机通过lpt2usb适配器通过usb连接,Windows 7使用“通用->通用/纯文本”驱动程序 有人知道出了什么问题吗?如何打印一些单词和进行一些表单提要?我必须发送一些控制字符吗?如果是,我如何发送 编辑14.04.2010 21:51 我的代码(C#)如下所示: Pr

我正试图将原始ascii数据打印到热敏打印机上。我使用下面的代码示例来实现这一点:但是我的打印机总是只打印一个字符,并且直到我按下表单馈送按钮时才会打印。如果我用记事本打印东西,打印机将自动执行表单馈送,但不打印任何文本

打印机通过lpt2usb适配器通过usb连接,Windows 7使用“通用->通用/纯文本”驱动程序

有人知道出了什么问题吗?如何打印一些单词和进行一些表单提要?我必须发送一些控制字符吗?如果是,我如何发送

编辑14.04.2010 21:51

我的代码(C#)如下所示:

PrinterSettings s =  new PrinterSettings();
s.PrinterName = "Generic / Text Only";

RawPrinterHelper.SendStringToPrinter(s.PrinterName, "Test");
在我按下表单提要按钮后,该代码将返回一个“T”(这里的这个小黑色按钮:swissmania.ch/images/935-151.jpg-抱歉,没有足够的声誉来创建两个超链接)

编辑15.04.2010 16:56

我现在使用的代码形式是:c-sharpcorner.com/UploadFile/johnodonell/printing directlytotheprinter 11222005001207am/printing directlytotheprinter.aspx

我对其进行了一些修改,以便可以使用以下代码:

byte[] toSend;
// 10 = line feed
// 13 carriage return/form feed
toSend = new byte[1] { 13 };
PrintDirect.WritePrinter(lhPrinter, toSend, toSend.Length, ref pcWritten);
运行此代码的效果与按下表单馈送按钮的效果相同,工作正常

但这样的代码仍然不起作用:

byte[] toSend;
// 10 = line feed
// 13 carriage return/form feed
toSend = new byte[2] { 66, 67 };
PrintDirect.WritePrinter(lhPrinter, toSend, toSend.Length, ref pcWritten);

这将只打印出一个“B”,但我希望“BC”在运行任何代码后,我必须重新连接USB电缆以使其再次工作。有什么想法吗?

好吧,所有这些东西的原因只是我使用了一个适配器,因为我的计算机没有旧的lpt端口。我把我的应用程序复制到一台运行WindowsXP的旧电脑上,一切正常

现在我不得不希望我买的其他lpt2usb适配器能够正确工作

编辑2010年4月20日

使用另一个lpt2usb适配器,现在一切正常。如果有人对我现在使用的所有代码感兴趣,请与我联系或在此处发表评论。

快速逐步解决方案 因为没有提供代码,我通过提供的链接使其工作,下面是代码:

代码 用法 此.Print(printerAddress、documentText、documentName);

资料来源:
  • (链接不再处于活动状态)

您使用的是什么打印机,发送的是什么文本?大多数打印机使用控制语言;你向他们发送命令,他们不会打印出你发送的任何内容。我在这里使用这个命令,但直到现在我还找不到任何关于它的文档:你必须得到制造商的技术支持;只有他们知道打印机的设计语言是什么。我很想看看你们是如何用C#打印到LPT的,谢谢你们,我正在做一个需要打印到热敏打印机的项目。你能用同样的方法记录你的经历吗?我用这个Nuget源代码打印到热敏打印机上你的链接死了!您的代码没有正确复制粘贴!您的
struct
中缺少
marshallas
public
。否,该链接是microsoft官方网站文章中的目标链接,不再存在。这是另一个arcile:请编辑您的答案并包含正确的链接,好吗?这是一个C#控制台应用程序,用于向打印机发送原始打印作业
using System;
using System.Runtime.InteropServices;
using System.Windows;

[StructLayout(LayoutKind.Sequential)]
public struct DOCINFO {
    [MarshalAs(UnmanagedType.LPWStr)]
    public string pDocName;
    [MarshalAs(UnmanagedType.LPWStr)] 
    public string pOutputFile;
    [MarshalAs(UnmanagedType.LPWStr)] 
    public string pDataType;
}

public class PrintDirect {
    [DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
    public static extern long OpenPrinter(string pPrinterName, ref IntPtr phPrinter, int pDefault);

    [DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
    public static extern long StartDocPrinter(IntPtr hPrinter, int Level, ref DOCINFO pDocInfo);

    [DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern long StartPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.drv", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern long WritePrinter(IntPtr hPrinter, string data, int buf, ref int pcWritten);

    [DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern long EndPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern long EndDocPrinter(IntPtr hPrinter);

    [DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern long ClosePrinter(IntPtr hPrinter);
}

private void Print(String printerAddress, String text, String documentName) {
    IntPtr printer = new IntPtr();

    // A pointer to a value that receives the number of bytes of data that were written to the printer.
    int pcWritten = 0;

    DOCINFO docInfo = new DOCINFO();
    docInfo.pDocName = documentName;
    docInfo.pDataType = "RAW";

    PrintDirect.OpenPrinter(printerAddress, ref printer, 0);
    PrintDirect.StartDocPrinter(printer, 1, ref docInfo);
    PrintDirect.StartPagePrinter(printer);

    try {
    PrintDirect.WritePrinter(printer, text, text.Length, ref pcWritten);
    } catch (Exception e) {
        Console.WriteLine(e.Message);
    }

    PrintDirect.EndPagePrinter(printer);
    PrintDirect.EndDocPrinter(printer);
    PrintDirect.ClosePrinter(printer);
}
String printerAddress = "\\\\ComputerName\\PrinterName";
String documentName = "My document";
String documentText = "This is an example of printing directly to a printer.";