2 manbuyuji manbuyuji 于 2014.07.03 14:50 提问

C# 热敏打印机打印二维码
问题是这样,最近在用热敏打印机做东西,其中一向可能要涉及到热敏打印机打印二维码的问题:
 并口打印(USB映射为并口):
 当次打印二维码的的时候图片总有很多白线。
 热敏打印机不放纸张的时候选择打印二维码提示完成后,再把纸张放进去,一次性来的码就没有(基本没有)白线。
当我打开并口一次性执行完再关闭并口的时候就不打印了,热敏打印机跟据接收指令一样。
 请问该怎么解决.

 if (!SetLineSpace(0))
        {
            return false;
        }

        if (!Alignment("left"))
        {
            return false;
        }

        Bitmap bmp = new Bitmap(path);
        int width = bmp.Width;
        if (0 != width % 4)
        {
            int extra = 4 - width % 4;
            width += extra;
        }
        int height = bmp.Height;
        byte[] data = new byte[3];
        //byte[] data = {0x00};
        byte[] bmpModel = {0x1B, 0x2A, (byte)'\x21',(byte)(width % 256), (byte)(width / 256)};

        Color pixel;

        //if (!OpenPrinter())
        //{
        //    return false;
        //}

        for (int i = 0; i != (height / 24 + 1); ++i)
        {
            if (!SetBitmapMode(24, width))
            {
                return false;
            }
            //if (!PrinterCmd(bmpModel))
            //{
            //    return false;
            //}

            for (int j = 0; j != width; ++j)
            {
                for (int k = 0; k != 24; ++k)
                {
                    if (((i * 24) + k) < bmp.Height)
                    {
                        pixel = bmp.GetPixel(j, (i * 24) + k);
                        if (pixel.R == 0)
                        {
                            data[k / 8] += (byte)(128 >> (k % 8));
                        }
                    }
                }

                if (!WritePixel(data))
                {
                    return false;
                }
                //if (!PrinterCmd(data))
                //{
                //    return false;
                //}

                data[0] = 0x00;
                data[1] = 0x00;
                data[2] = 0x00;
            }

            //byte[] cmd = { 0x0A };
            //if (!PrinterCmd(cmd))
            //{
            //    return false;
            //}

            if (!PrintNull())
            {
                return false;
            }
        }

        //if (!ClosePrinter())
        //{
        //    return false;
        //}

        if (!PrintNull())
        {
            return false;
        }

        bmp.Dispose();

        return true;

1个回答

shuizhibai14
shuizhibai14   2015.04.23 14:02

楼主,您这使用的打印方法是POS_S_DownloadAndPrintBmp吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java调用热敏打印机打印(包含二维码生成)
项目中需要用到热敏打印机,并且在打印的同时,要生成二维码。并且打印,先说说二维码的生成吧 package com.jinke.util; import com.google.zxing.common.BitMatrix; import javax.imageio.ImageIO; import java.io.File; import java.io.OutputStream
C#热敏打印图片 串口打印图片
如图,一步一步慢慢调出来的 //串口通信类public System.IO.Ports.SerialPort serialPort = null;serialPort = new System.IO.Ports.SerialPort(&quot;COM1&quot;); serialPort.BaudRate =19200; serialPort.DataBits = 8; serialPort.Stop...
热敏打印机打印二维码图片
最近研究热敏打印机打印二维码,用到了北洋OPOS二次开发包DLL,借鉴该代码:http://www.cnblogs.com/datacool/archive/2012/11/27/2014666.html ,下面是扩展的一个打印图片的方法 /// /// 打印图片 /// /// public void PrintBmp(Bitmap bmp) { byte[] data =
热敏打印机数据截取+追加打印二维码
目前市场上出现新的需求,就是通过在收银机和小票打印机中间添加硬件的方式,采集每一张小票的信息,并且追加打印二维码。往往应用在商超,购物中心,景点娱乐,金融监控等方面,这种方式最大的优点是不需要在收银机上安装任何软件或者修改收银机设置,收银员也不需要任何操作,即插即用。数贝通(TB有售)正是这样的产品。数贝通是一个硬件小票采集器,可以兼容USB、并口、串口、网口的小票打印机,高效,精准识别每一张需要
Android打印二维码对热敏打印机的适配
经过一段时间的研究,目前得出了Android连接蓝牙打印机打印二维码的方式有2种:第一种:采用ESC/POS二维码指令打印的方式打印,代码如下    /** * 设置二维码大小 */ public static final byte[] setCodeSize = new byte[8]; /** * 设置纠错正等级 */ publi...
C# 串口热敏打印
Printer类代码: using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.IO.Ports; using System.Collections; using System.Windows.Forms; using System.Drawing; n
小票打印机打印二维码 demo
本测试程序 调用北洋通用接口 打印机打印二维码图片,生成二维码 并将产生的二维码图片转换成打印机可以打印的单色位图
android热敏打印示例程序
android 蓝牙 USB wifi连接便捷式打印机,打印小票,条码, 二维码图片等示例代码,亲测可用。
佳博标签热敏打印机C#二次开发源码
C#调用佳博打印机打印标签源码,自测环境:win8+vs10,用管理员权限打开项目即可
C# 实现Epson热敏打印机打印 Pos机用
public class EpsopnPrinter     { //打印文字(端口号 字符)         public static string PrintString(int Port, string val)         {             System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPo