开发的软件调用打印,使用硬字库模式,打印出来的字符是乱码(使用其他品牌打印机正常),
如果使用图形模式,可以正常打印,但打印速度非常慢。
使用C#开发,代码如下private void button5_Click(object sender, EventArgs e)
{
//变量 要打印的信息 string 类型
line += "123456\n\n";
line += "测试打印用 \n\n";
//设置打印机名称 变量
printDocument1.PrinterSettings.PrinterName = 登陆验证.PrintName;
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
printDocument1.Print();
}
 
//打印事件        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            try
            {
                PointF abc = new PointF();
                abc.X = Convert.ToInt32(登陆验证.LeftL);
                abc.Y = Convert.ToInt32(登陆验证.UpL);
               //字体大小
                float size = (float)Convert.ToDouble(fontsize);
                //字体 测试过宋体 ,Fixedsys,Arial 等几种字体均不行
                System.Drawing.Font printFont = new System.Drawing.Font("宋体", size, System.Drawing.FontStyle.Regular);
                e.Graphics.DrawString(line, printFont, System.Drawing.Brushes.Black, abc);
                line = "";
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }有没有人遇到同样的问题,求高人指教

解决方案 »

  1.   

    这个是跟条码打印机原理一样的,你如果用硬字模式的话,你要先查一下打印机里内置了什么字体才可以的,然后后在调用支持中文的字体.如果使用图形模式的话肯定会慢的,因为需要先把要打印的内容,画到bitmap里,然后在发送给打印机,然后打印机在进行处理的.
      

  2.   

    对于热敏POS打印机,直接向打印机发送指令,不要使用printer对象类。比如直接向 prn. 文件,或者操作 lpt1 端口,或者是串口,直接发送要打印的文字,换行。(根据你的打印机与pc的接口不同而不同)切纸、定位到下一张发票、换纸等命令(假设你选择的机器有这类功能的话)按照打印机手册上的ESC/POS命令集来发送。
      

  3.   

    设备供应商通常都会有打印机在windows下的驱动程序例子,可以从你的程序直接输出字符命令串给打印机。如果没有,比如许多年前,我使用POS时正好赶上一个机器没有我所使用的windows版本的驱动,于是我就用十几行汇编语句写了一个简单的将磁盘设备驱动程序,开发时只要打开 c:\pos.txt 文件然后往里边写内容,驱动就把内容直接写到主板的 378H 地址去了。这也很简单。