现在在用C#做一个POS系统,涉及到小票打印部分,在网上搜了一下,资料不多,而且都是基于热敏打印的,我不知道针式打印的方法和热敏打印的程序实现是否一样,如果不一样,怎么处理呢?

解决方案 »

  1.   

    我原来些的热敏打印是通过CreateFile 这种方式打开并口来实现打印,这种方法可以应用于针式POS打印机器吗?
      

  2.   

    针打以前是把位置写死在XML文件里面的
      

  3.   

    有没有人可以写段示例代码呀?对于POS打印这方面的东西,我完全没有这方面的经验
      

  4.   

    在windows打印机伺服器中进行控制,报表就用水晶报表都可以了...可以设定一个新的格式...
      

  5.   

    #region 声明
    using System;
    using System.Runtime.InteropServices;
    using System.IO;
    #endregion
    namespace LongRuan
    {
    /// <summary>
    /// POSPrinter 的摘要说明。
    /// </summary>
    public class POSPrinter
    {
    const int OPEN_EXISTING = 3;
    string prnPort ="LPT1";
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    private static extern IntPtr CreateFile(string lpFileName,
    int dwDesiredAccess, 
    int dwShareMode, 
    int lpSecurityAttributes,
    int dwCreationDisposition ,
    int dwFlagsAndAttributes ,
    int hTemplateFile);
    public POSPrinter()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public POSPrinter(string prnPort)
    {
    this.prnPort=prnPort;//打印机端口
    }
    public  string PrintLine(string str)
    {
    IntPtr iHandle = CreateFile(prnPort,  0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
    if(iHandle.ToInt32() == -1)
    {
    return "没有连接打印机或者打印机端口不是LPT1";
    }
    else
    {
    FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
    StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
    sw.WriteLine(str);
    //开钱箱
    //sw.WriteLine(Chr(&H1B) & Chr(70) & Chr(0) & Chr(20) & Chr(&HA0))
    sw.Close();
    fs.Close();
    return "";
    }
    }
    }
    }--------------------------------------------------------------------------------
    调用方法:
    LongRuan.POSPrinter prn = new LongRuan.POSPrinter("LPT1");
    string str =prn.PrintLine("写端口测试!");
    if(str !="")
    MessageBox.Show(str);
      

  6.   

    #region 声明
    using System;
    using System.Runtime.InteropServices;
    using System.IO;
    #endregion
    namespace LongRuan
    {
    /// <summary>
    /// POSPrinter 的摘要说明。
    /// </summary>
    public class POSPrinter
    {
    const int OPEN_EXISTING = 3;
    string prnPort ="LPT1";
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    private static extern IntPtr CreateFile(string lpFileName,
    int dwDesiredAccess, 
    int dwShareMode, 
    int lpSecurityAttributes,
    int dwCreationDisposition ,
    int dwFlagsAndAttributes ,
    int hTemplateFile);
    public POSPrinter()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public POSPrinter(string prnPort)
    {
    this.prnPort=prnPort;//打印机端口
    }
    public  string PrintLine(string str)
    {
    IntPtr iHandle = CreateFile(prnPort,  0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
    if(iHandle.ToInt32() == -1)
    {
    return "没有连接打印机或者打印机端口不是LPT1";
    }
    else
    {
    FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
    StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
    sw.WriteLine(str);
    //开钱箱
    //sw.WriteLine(Chr(&H1B) & Chr(70) & Chr(0) & Chr(20) & Chr(&HA0))
    sw.Close();
    fs.Close();
    return "";
    }
    }
    }
    }--------------------------------------------------------------------------------
    调用方法:
    LongRuan.POSPrinter prn = new LongRuan.POSPrinter("LPT1");
    string str =prn.PrintLine("写端口测试!");
    if(str !="")
    MessageBox.Show(str);