2

我想使用 Datecs Termal 打印机打印一个 ScrollView。视图就像购买票一样是一张票。我想在纸上精确测量 300 毫米的高度。我使用这种方法将滚动视图转换为位图:

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;
}

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

我尝试了两种解决方案:

- 进纸与视图高度和 300 毫米之间的差异一样多

- 生成位图高度正好是 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毫米之间的关系。

有谁能够帮我?非常感谢!

4

1 回答 1

4

您的问题包含三个要素:

  • 制作位图的尺寸以使其打印 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 数据线作为查看不同尺寸图像在打印机上如何显示的正确方法。

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

如何使位图达到该大小

如果ViewaBitmap的大小不正确,那么您应该缩放它,或者在背景中生成正确大小的东西。专注于在保持纵横比的同时缩放宽度,然后用空白填充底​​部(在图像中或作为一系列空白行)。

StackOverflow 上还有其他答案比我能更好地解决图像缩放问题,例如这个

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

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

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

请注意,并非总是可以将 32 的增量添加到 300 毫米左右,因此:

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

一旦您将图像缩放到 384 像素宽并知道行距,那么这不会在设备之间改变。

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

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

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

于 2018-05-18T11:23:03.853 回答