Распечатайте настоящий растровый файл нестандартного размера, используя esc / pos термальный принтер Android - PullRequest
0 голосов
/ 18 мая 2018

Я хочу напечатать ScrollView, используя принтер Datecs Termal.Представление - это билет, похожий на билет покупки.Я хочу точно измерить высоту 300 мм на бумаге.Я использую этот метод для преобразования Scrollview в Bitmap:

public static Bitmap getBitmapFromView(View view, int height, int   width) {
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(bitmap);
    Drawable bgDrawable = view.getBackground();
    canvas.drawColor(Color.WHITE);
    if (bgDrawable != null)
        bgDrawable.draw(canvas);
    else
        canvas.drawColor(Color.WHITE);
    view.draw(canvas);

    return bitmap;
}

Проблема заключается в том, когда скрыты или отображаются текстовые просмотры, изменяется высота Bitmap.Кроме того, он также меняет размер в зависимости от плотности экрана.Я хочу заполнить 300 мм бумагой для просмотра и пробелов.

У меня есть два решения:

- Подайте на бумагу столько строк, сколько есть разницы между высотой видаи 300мм

- Генерировать растровое изображение до высоты точно 300мм.

Я никак не мог это сделать.

Datecs SDK содержит этот метод подачи бумаги:

public void feedPaper(int lines) throws IOException {
    if (lines >= 0 && lines <= 255) {
        byte[] buf = new byte[]{27, 74, (byte)lines};
        synchronized(this) {
            this.write(buf);
        }
    } else {
        throw new IllegalArgumentException("The lines is out of range");
    }
}

Но я не знаю отношения между высотой растрового изображения, высотой каждой строки и 300 мм бумаги..

Кто-нибудь может мне помочь?Большое спасибо!

1 Ответ

0 голосов
/ 18 мая 2018

Ваш вопрос состоит из трех элементов:

  • Какой размер сделать растровым изображением для печати на высоте 300 мм.
  • Как получить растровое изображение до этого размера
  • Как дополнить отпечаток правильным количеством пробела, если он недостаточно высок.

Какой размер сделать растровое изображение

Сколько пикселей я хочу дляПечать 300 мм?

Чтобы определить, сколько точек создает изображение определенного размера на бумаге (в миллиметрах), вам необходимо знать, с какой плотностью оно будет напечатано (измеряется в «DPI» или «DPMM»).).Для термопринтеров это не выбирается пользователем, и вы можете найти метрику в технических характеристиках вашего принтера.

Например, в листе данных DPP-250 указана плотность8x8 DPMM, что означает 8 точек на миллиметр по вертикали и 8 точек на миллиметр по горизонтали.

300mm × 8 dots/mm = 2400 dots

На том же принтере ширина печати составляет 48 мм (384 точки), поэтому вы должны стремиться создатьИзображение размером 384x2400 пикселей для отправки на принтер с печатью 48x300 мм.

Пока эта часть не работает, вы можете удалить Android и драйвер принтера из стека.Автономные инструменты командной строки могут конвертировать изображения в ESC / POS-код для отладки, поэтому возьмите с собой ноутбук, twg / png2escpos и USB-кабель к принтеру, чтобы увидеть, как различны размерыизображения отображаются на вашем принтере.

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

Как получить растровое изображение такого размера

Если View делает Bitmap неправильного размера, вам следует либо масштабировать его, либо сгенерировать что-то правильного размера на заднем плане.Сфокусируйтесь на , масштабируя ширину, сохраняя соотношение сторон, а затем добавляя нижнюю часть с пробелами (либо на изображении, либо в виде серии пустых строк).

Есть другие ответы наStackOverflow, который решает проблему масштабирования изображения лучше, чем я, , например, этот .

Как дополнить печать правильным количеством пробелов

Для заполнения вы правыиспользовать пустые строки вместо расширения изображения, потому что быстрее печатать пустую строку!

Межстрочный интервал по умолчанию не указан в таблице данных, которую я связал.Если вы хотите получить оценку, используйте 32 точки (4 мм), но для точного ответа вам нужно будет напечатать несколько строк подчеркивания и измерить расстояние между ними.

Обратите внимание, что это не всегда возможночтобы добавить приращения от 32 до круглых 300 мм, либо:

  • Добавьте к изображению приблизительно правильное количество пустых строк и будьте довольны приближением, либо
  • Добавьтеизображение с пробелом, кратным 32 пикселям, затем добавьте пустые строки.

Как только вы масштабируете изображение до 384 пикселей в ширину и узнаете расстояние между строками, это не изменится между устройствами.

Например, чтобы дополнить изображение высотой 1234 пикселя 32-пиксельными пустыми строками, чтобы сделать его 2400 пикселем, вам потребуется около 36 строк: строк:

(2400 dots - 1234 dots) ÷ 32 dots/line ≈ 36 lines

Сноваэти цифры не для вашего принтера, настройте их на основе ваших собственных данных и измерения высоты линии, как описано выше.

...