gpt4 book ai didi

android - 使用 esc/pos 热敏打印机 Android 打印真正的自定义尺寸位图

转载 作者:行者123 更新时间:2023-11-29 16:41:43 26 4
gpt4 key购买 nike

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

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

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

我尝试了两种解决方案:

-进纸与 View 高度和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");
}
}

但我不知道位图的高度、每行的高度和纸张的300mm之间的关系。

有人能帮帮我吗?非常感谢!

最佳答案

您的问题包含三个要素:

  • 要制作多大的位图才能在 300 毫米高处打印。
  • 如何使位图达到该大小
  • 如果打印件不够高,如何用正确数量的空白填充打印件。

制作位图的大小

对于 300 毫米高的打印,我需要多少像素?

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

例如,DPP-250 data sheet列出了 8x8 DPMM 的密度,这意味着垂直每毫米 8 个点,水平每毫米 8 个点。

300mm × 8 dots/mm = 2400 dots

在同一台打印机上,打印宽度为 48mm(384 点),因此您将旨在生成 384x2400 像素的图像以发送到打印机进行 48x300mm 打印。

在这部分工作之前,您可以从堆栈中删除 Android 和打印机驱动程序。独立命令行工具可以将图像转换为 ESC/POS 代码供您调试,所以带上笔记本电脑,twg/png2escpos ,以及连接打印机的 USB 数据线,这是查看不同尺寸图像在打印机上显示效果的正确方法。

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

如何使位图达到该大小

如果 View 制作的 Bitmap 尺寸错误,那么您应该缩放它,或者在后台生成正确尺寸的东西。专注于在保持纵横比的同时缩放宽度,然后用空白填充底​​部(在图像中或作为一系列空白行)。

StackOverflow 上还有其他答案比我能更好地解决图像缩放问题,such as this one .

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

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

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

请注意,并不总是可以将 32 的增量添加到 300 毫米的圆形,因此:

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

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

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

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

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

关于android - 使用 esc/pos 热敏打印机 Android 打印真正的自定义尺寸位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50408336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com