Изображение логотипа не выравнивается по центру в чековом принтере - PullRequest
0 голосов
/ 20 января 2019

Принтер не учитывает выравнивание изображения.Логотип всегда выровнен по умолчанию.Текст выравнивается без проблем.Так что в методе aligncenter() нет ничего плохого. Когда я устанавливаю выравнивание внутри цикла while, по всей бумаге печатаются серии вопросительных знаков.

public void printImage(Bitmap bitmap, boolean center) {

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int newWidth = this.mType58 ? 384 : 576;

       if (width > (this.mType58 ? 384 : 576)) {
            bitmap = LibUtil.setImgSize(bitmap, (float) newWidth, (float) (height / (width / newWidth)), (float) width, (float) height);
       }

    try {
          PrinterWriter mThirdPrinter = this.mType58 ? new PrinterWriter58mm(384, 384) : new PrinterWriter80mm(576, 576);            
          ArrayList<byte[]> datas = mThirdPrinter.getImageByte(bitmap);

           if (mThirdPrinter.getDataAndClose() == null) {

               if (this.mCallback != null) {
                     this.mCallback.onError(ErrorCode.IMAGE_NOT_FONUD);
           }

          return;
      }

        try {
               datas.add(mThirdPrinter.getDataAndClose());
        } catch (NullPointerException e) {
            e.printStackTrace();
        }

        if (datas == null) {
            DebugLog.LogD("imgpath is empty, datas is null, maybe is TFCard");
            return;
        }

        this.mPrinterModule.sendData(new byte[]{(byte) 27, (byte) 74, (byte) 0});

        Iterator it = datas.iterator();
        byte [] alignment = alignCenter();          
        int i = 0 ;
        byte [] data1 = null ;

        while (it.hasNext()) {              
            data1[i] = (byte) it.next();
        }

        this.mPrinterModule.sendData(alignment);
        this.mPrinterModule.sendData(data1);

    } catch (IOException e2) {
        e2.printStackTrace();
    }

}

1 Ответ

0 голосов
/ 21 января 2019

, когда я был в другом офисе, и в этом проекте у меня была похожая проблема, все функции выравнивания в библиотеке не работали. Но у меня есть хитрое решение сделать так, чтобы изображение логотипа стало центром. Я рисую растровое изображение с белым или прозрачным разрешением и помещаю позицию ширины прямо в середину квитанции

public Bitmap createBitmap(Rect rectImage, int i, int j) {

        Paint p = new Paint();
        p.setStyle(Style.FILL_AND_STROKE);
        p.setAntiAlias(true);
        p.setFilterBitmap(true);
        p.setDither(true);
        p.setColor(Color.WHITE);

        Bitmap bitmap = Bitmap.createBitmap(rectImage.width() * 2,
                rectImage.height() * 2, Bitmap.Config.ARGB_8888);

        Canvas c = new Canvas(bitmap);
//      c.drawColor(Color.RED);
        c.drawRect(rectImage.left, rectImage.top, rectImage.right,
                rectImage.bottom, p);
        return bitmap;

    }

Затем объедините это растровое изображение с вашим логотипом , используйте код, подобный этому (не этот код)

public static Bitmap mergeToPin(Bitmap left, Bitmap right) {
    Bitmap result = Bitmap.createBitmap(left.getWidth(), left.getHeight(), left.getConfig());
    Canvas canvas = new Canvas(result);
    int widthleft = left.getWidth();
    int widthright = right.getWidth();
    canvas.drawBitmap(left, 0f, 0f, null);
    canvas.drawBitmap(right, widthleft, 0f, null);
    return result;
}

Как известно, размер чека можно прогнозировать. Таким образом, вы можете сделать статическое значение для ширины прозрачного изображения

...