使用esc / pos termal打印机Android打印真实自定义尺寸位图

时间:2018-05-18 09:40:15

标签: android printing bitmap escpos

我想使用Datecs Termal打印机打印ScrollView。该视图是一张像购票一样的票。我想在纸张上精确测量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;
}

问题是隐藏或显示textviews时,更改Bitmap的高度。此外,它还会根据屏幕的密度改变大小。 我想用300毫米的纸张填充视图和空白区域。

我尝试了两种解决方案:

- 进纸数量与视线高度和300mm

之间存在差异

- 生成高度的位图正好是300mm。

我不能以任何方式做到这一点。

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 :(得分:2)

您的问题有三个要素:

  • 使位图打印的尺寸为300毫米高。
  • 如何将位图设置为该大小
  • 如果打印不够高,如何用正确数量的空白填充打印件。

制作位图的大小

300毫米高的打印件需要多少像素?

要确定在纸上创建特定尺寸图像的点数(以毫米为单位),您需要知道它将在何处打印(以“DPI”或“DPMM”测量)。对于热敏打印机,这不是用户可选择的,您可以在打印机的数据表中找到该指标。

例如,DPP-250 data sheet列出的密度为8x8 DPMM,即每毫米垂直8点,水平每毫米8点。

300mm × 8 dots/mm = 2400 dots

在同一台打印机上,打印宽度为48毫米(384点),因此您目标是生成384x2400像素图像,以便发送到打印机以进行48x300mm打印。

在此部件工作之前,您可以从堆栈中删除Android和打印机驱动程序。独立的命令行工具可以将图像转换为ESC / POS代码供您调试,因此请将笔记本电脑,twg/png2escpos和USB电缆连接到打印机,作为查看不同尺寸图像在您的打印机上的显示方式的正确方法打印机。

我不知道这台打印机与您的打印机有多相似,请调整这些数字以匹配打印机的数据表。

如何将位图设置为该大小

如果View的{​​{1}}大小错误,那么您应该缩放它,或者在后台生成正确大小的内容。专注于在保持宽高比的同时缩放宽度,然后用空白填充底​​部(在图像中或作为一系列空行)。

StackOverflow还有其他答案可以更好地解决图像缩放问题such as this one

如何使用正确数量的空白填充打印件

对于填充,您使用空白行而不是扩展图像是正确的,因为打印空白行更快!

我链接的数据表中未指定默认行间距。如果您想要估计,请使用32点(4毫米),但要获得准确的答案,您需要打印几行下划线并测量它们之间的空间。

请注意,并非总是可以将增量32添加到300毫米的圆形,所以要么:

  • 使用大约正确数量的空行填充图像,并对近似值或
  • 感到满意
  • 将带有空格的图像填充为32像素的倍数,然后添加空行。

将图像缩放到384像素宽并知道行间距后,设备之间不会改变。

例如,要填充高度为1234像素且32像素空行的图像,为了使其高2400像素,您需要大约36行:行:

Bitmap

同样,这些数字不适用于您的打印机,请根据您自己的数据表和行高测量进行调整,如上所述。