【问题标题】:Bitmap not print in the align center of 58mm thermal Printer in kotlin位图未在 kotlin 中的 58mm 热敏打印机的对齐中心打印
【发布时间】:2021-12-12 19:07:11
【问题描述】:

我将布局转换为位图,然后在 58 毫米热敏打印机中打印位图,但图像不在中心打印,它总是在左侧打印。如何在热敏纸的中心打印位图?

 val w = resources.getDimension(R.dimen.test_58mm).toInt()
    val h = binding.printLayout.getChildAt(0).height

    bitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888)
    val c = Canvas(bitmap)
    val sizeSpecWidth: Int = View.MeasureSpec.makeMeasureSpec(w, View.MeasureSpec.EXACTLY)
    val sizeSpecHeight: Int = View.MeasureSpec.makeMeasureSpec(h, View.MeasureSpec.EXACTLY)
    printLayoutBinding.root.measure(sizeSpecWidth, sizeSpecHeight)

    val width: Int = printLayoutBinding.root.measuredWidth
    val height: Int = printLayoutBinding.root.measuredHeight
    Log.d(TAG, "createSnapshot: " + h)
    printLayoutBinding.root.layout(0, 0, width, height)

    printLayoutBinding.root.draw(c)

【问题讨论】:

    标签: image layout printing bitmap


    【解决方案1】:

    您可以添加名为 PrintCommands 的新类,然后在打印之前添加此行

    BLUETOOTH_PRINTER!!.write(PrinterCommands.ESC_ALIGN_CENTER)
    BLUETOOTH_PRINTER!!.printImage(bitmap)
    

    PrintCommands 类

    public class PrinterCommands {
    
    public static final byte HT = 0x9;
    public static final byte LF = 0x0A;
    public static final byte CR = 0x0D;
    public static final byte ESC = 0x1B;
    public static final byte DLE = 0x10;
    public static final byte GS = 0x1D;
    public static final byte FS = 0x1C;
    public static final byte STX = 0x02;
    public static final byte US = 0x1F;
    public static final byte CAN = 0x18;
    public static final byte CLR = 0x0C;
    public static final byte EOT = 0x04;
    
    public static final byte[] INIT = {27, 64};
    public static byte[] FEED_LINE = {10};
    
    public static byte[] SELECT_FONT_A = {20, 33, 0};
    
    public static byte[] SET_BAR_CODE_HEIGHT = {29, 104, 100};
    public static byte[] PRINT_BAR_CODE_1 = {29, 107, 2};
    public static byte[] SEND_NULL_BYTE = {0x00};
    
    public static byte[] SELECT_PRINT_SHEET = {0x1B, 0x63, 0x30, 0x02};
    public static byte[] FEED_PAPER_AND_CUT = {0x1D, 0x56, 66, 0x00};
    
    public static byte[] SELECT_CYRILLIC_CHARACTER_CODE_TABLE = {0x1B, 0x74, 0x11};
    
    public static byte[] SELECT_BIT_IMAGE_MODE = {0x1B, 0x2A, 33, -128, 0};
    public static byte[] SET_LINE_SPACING_24 = {0x1B, 0x33, 24};
    public static byte[] SET_LINE_SPACING_30 = {0x1B, 0x33, 30};
    
    public static byte[] TRANSMIT_DLE_PRINTER_STATUS = {0x10, 0x04, 0x01};
    public static byte[] TRANSMIT_DLE_OFFLINE_PRINTER_STATUS = {0x10, 0x04, 0x02};
    public static byte[] TRANSMIT_DLE_ERROR_STATUS = {0x10, 0x04, 0x03};
    public static byte[] TRANSMIT_DLE_ROLL_PAPER_SENSOR_STATUS = {0x10, 0x04, 0x04};
    
    public static final byte[] ESC_FONT_COLOR_DEFAULT = new byte[] { 0x1B, 'r',0x00 };
    public static final byte[] FS_FONT_ALIGN = new byte[] { 0x1C, 0x21, 1, 0x1B,
            0x21, 1 };
    public static final byte[] ESC_ALIGN_LEFT = new byte[] { 0x1b, 'a', 0x00 };
    public static final byte[] ESC_ALIGN_RIGHT = new byte[] { 0x1b, 'a', 0x02 };
    public static final byte[] ESC_ALIGN_CENTER = new byte[] { 0x1b, 'a', 0x01 };
    public static final byte[] ESC_CANCEL_BOLD = new byte[] { 0x1B, 0x45, 0 };
    
    
    /*********************************************/
    public static final byte[] ESC_HORIZONTAL_CENTERS = new byte[] { 0x1B, 0x44, 20, 28, 00};
    public static final byte[] ESC_CANCLE_HORIZONTAL_CENTERS = new byte[] { 0x1B, 0x44, 00 };
    /*********************************************/
    
    public static final byte[] ESC_ENTER = new byte[] { 0x1B, 0x4A, 0x40 };
    public static final byte[] PRINTE_TEST = new byte[] { 0x1D, 0x28, 0x41 };
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2012-10-05
      • 2014-02-02
      • 1970-01-01
      • 2021-09-12
      • 2013-03-20
      相关资源
      最近更新 更多