我正在开发一款具有内置行式打印机的Android设备应用程序.我必须与此打印机进行交互,并使用它在收货时打印详细信息,然后自动切割收据.我在其中看到了一些ESC命令,但我不知道如何执行这些ESC命令.
关于卡西欧设备打印机,我有三个主要问题:
1.我使用了内置打印机的打印代码,但打印后切刀未激活
BuildinEx840 ex840 = new BuildinEx840();
int response = ex840.open();
System.out.println("ex840 open:" + response);
byte[] set = {
'N', 'A', 'R', 'E', 'S', 'H', 'S', 'H', 'A', 'R', 'M', 'A', (byte) 0x0d, (byte) 0x0a
};
try {
ex840.write(set);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
response = ex840.getEndStatus();
System.out.println("getEndStatus:" + response);
response = ex840.initCutter();
ex840.close();
System.out.println("initCutter:" + response);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
2.我不知道如何将ESC命令发送到android中的打印机
有如下命令的数量
ESC FF DataPrint,
[code] …Run Code Online (Sandbox Code Playgroud) 我必须使用热敏打印机打印发票收据.我用Zjiang Thermal打印机打印收据.他们还提供手动和演示项目.在演示项目中,他们使用libray"btsdk.jar"来实现连接和打印.
我已成功建立打印机和Android设备之间的连接.但是没有文本对齐(中心,左,右)和单元格宽度,高度的准则.
我如何通过蓝牙打印机打印发票.
还请解释这一节 -
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x21;
cmd[2] |= 0x10;
Run Code Online (Sandbox Code Playgroud)
cmd 2 - 用于更改字体高度使用cmd [0]和cmd 1
代码将打印消息发送到蓝牙打印机在演示项目中
String msg = "";
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x21;
cmd[2] |= 0x10;
mService.write(cmd);
mService.sendMessage("Congratulations!\n", "GBK");
cmd[2] &= 0xEF;
mService.write(cmd);
msg = " You have sucessfully created communications between your device and our bluetooth printer.\n\n"
+" …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个原型来将文本文件的位图数据打印到支持LAN的epson pos打印机TM-T88V.
虽然我没有问题发送文本和文本格式说明,我不明白,我必须做什么,让我的打印机打印Arecibo消息的数据.
前几行:
00000010101010000000000
00101000001010000000100
10001000100010010110010
10101010101010100100100
00000000000000000000000
00000000000011000000000
00000000001101000000000
00000000001101000000000
00000000010101000000000
00000000011111000000000
00000000000000000000000
11000011100011000011000
10000000000000110010000
11010001100011000011010
11111011111011111011111
00000000000000000000000
00010000000000000000010
00000000000000000000000
00001000000000000000001
Run Code Online (Sandbox Code Playgroud)
该消息有73行和23列,产生1679个图像元素.每个元素由1表示黑色或0表示为白色,应打印为8x8(或16x16)点的正方形.结果会导致
Arecibo消息http://www.satsig.net/seti/message-to-gliese-581.gif
从打印机的规格:
虽然 - 正如我所说 - 连接和发送到打印机是没有问题的,我只是不明白,这个指令想告诉我什么.在Arecibo消息的情况下会是什么
我必须向打印机发送什么号码?我需要发送每个点吗?什么nL, nH specify the number of dots of the image data in the horizontal direction as (nL + nH × 256).意思?
这是我用于原型设计的简单Python程序:
# -*- coding: utf-8 -*-
import struct
import socket
def sendInstructions(mySocket,l):
for x in l:
mySocket.send(struct.pack('h', *[x]),1)
def emphasizeOn(mySocket):
sendInstructions(mySocket,[27,33,48])
def emphasizeOff(mySocket):
sendInstructions(mySocket,[27,33,0]) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,它将通过蓝牙将数据发送到打印机进行打印(热敏打印机用于收据).我已经按照此链接中的代码进行操作.
http://pastie.org/6203514和此链接也是http://pastie.org/6203516
当我将数据发送到打印机时,我能够看到设备及其MAC地址及其名称(打印机上的指示灯停止闪烁并变为标准,即打印机与我的Android手机连接)但是当我发送时数据不打印,也没有给出任何错误.我搜索了很多,我找到了很多代码并尝试了所有代码但无法打印.
请任何人帮助我离开这里.我听说Intent可以很容易地完成,但无法通过Intents获得精确的解决方案.
任何帮助将不胜感激提前感谢
Ganesh神
我正在尝试在支持ESC命令的热敏打印机中打印576像素宽的图像,问题是打印图像位的命令"ESC*"只允许我打印255像素宽的图像(如果我使用的是576)像素图像一些部分被打印,其余部分是随机符号),在documentacion中说这些命令最多接受255个字节,如下所示:
ESC * m nL nH d1Ödk
Name Specify bit image mode
Code ASCII ESC * m nL nHd1...dk
Hex. 1B 2A m nL nHd1...dk
Decimal 27 42 m nL nHd1...dk
Defined Region m = 0,1,32,33
0 ? nL ? 255
0 ? nH ? 3
0 ? d ? 255
Run Code Online (Sandbox Code Playgroud)
所以我不知道如何打印一个最大的打印机页面宽度(576像素)的图像,我有这个代码打印图像:
public class ESCPOSApi {
private final byte[] INITIALIZE_PRINTER = new byte[]{0x1B,0x40};
private final byte[] PRINT_AND_FEED_PAPER = new byte[]{0x0A};
private final byte[] SELECT_BIT_IMAGE_MODE = new byte[]{(byte)0x1B, (byte)0x2A};
private final …Run Code Online (Sandbox Code Playgroud) 我试图将图像保存为单色(黑白,1位深度),但我现在失去了如何做到这一点.
我开始用一个PNG,并转换为位图打印(这是一个热敏打印机,仅支持黑色反正 - 加上它的地狱大型图像慢,如果我尝试将它们发送的彩色/灰度).
到目前为止,我的代码很简单,无法将其转换为位图,但它保留了原始颜色深度.
Image image = Image.FromFile("C:\\test.png");
byte[] bitmapFileData = null;
int bitsPerPixel = 1;
int bitmapDataLength;
using (MemoryStream str = new MemoryStream())
{
image.Save(str, ImageFormat.Bmp);
bitmapFileData = str.ToArray();
}
Run Code Online (Sandbox Code Playgroud) 在网页上添加了IFrame,并将源文件作为文本文件添加.它在Common打印机上工作正常.但是,无法通过Receipt打印机打印收据.它将作为空白纸张出现.
打印机名称:PR-85热敏打印机.点击以下链接查看打印机规格详情..
http://www.essae.com/popup_html/pr-85.html
有人有解决方案吗?

我正在使用Google Cloud Print在网络应用中生成打印生成的PDF文档.
一切都在我使用的所有打印机类型(HP,Zebra等)中正常工作,但大约2周前所有Zebra打印机(热敏打印机)都以纵向模式打印PDF文档(忽略打印机设置).
我需要什么?:Google Clout打印保留了我的打印机设置.
我的测试:我更改了打印机设置(文档方向:纵向/横向).我在发送到Google Cloud Print之前旋转了PDF文档.我发送了票务打印机/功能,但Google Cloud Print忽略了它.
我确定这是Google Update.
存在使用热敏打印机的Google云打印的其他人?
它有什么解决方案吗?
UPDATE1:
Google更新了一些文档https://developers.google.com/cloud-print/?hl=es-419&csw=1
这并没有解决我的问题,但我在java中发布了一个库,希望对其他人有用,也许会鼓励有人参与.
此库与Google Cloud Print API的版本1和版本2兼容
Github存储库https://github.com/fsistemas/GoogleCloudPrintApiClientJava
我能够打印文本,但是当涉及条形码时,它始终不显示或仅显示数字参数
这是我的源代码
//barcode 128
byte[] formats = {(byte) 0x1d, (byte) 0x6b, (byte) 0x73,(byte) 0x0d};
byte[] contents = content.getBytes();
byte[] bytes = new byte[formats.length + contents.length];
System.arraycopy(formats, 0, bytes, 0, formats.length );
System.arraycopy(contents, 0, bytes, formats.length, contents.length);
usbCtrl.sendByte(bytes, dev);
usbCtrl.sendByte(LineFeed(), dev);
Run Code Online (Sandbox Code Playgroud)
但结果条形码没有显示,我错过了什么
请帮我
编辑
我找到了ESC/POS代码:
GS km d1 ... dk NUL或GS kmn d1 ... dk
但仍然没有工作
我正在尝试在热敏打印机上发送 ESC/POS 命令。但是每当我发送它们时,热敏打印机都会将它们打印为文本,而不是将它们作为命令执行。我在 .prn 文件中编写这些命令,每当我执行 lp 命令来打印文件时,这些 .prn 文件也会被打印,但作为文本。
我尝试了以下方法在 .prn 文件中编写 ESC/POS 命令:
1) PRINT #1, CHR$(&H1D);"h";CHR$(80);
PRINT #1, CHR$(&H1D);"k";CHR$(2);
PRINT #1, "48508007";CHR$(0);
PRINT #1, CHR$(&HA);
PRINT #1, CHR$(&H1D);"k";CHR$(67);CHR$(12);
PRINT #1, "48508007";
2) <ESC>(0x1B) <L>(0x4C)
<GS>(0x1D) <k>(0x6B) 73 2 4 5 6 7 8 9 NUL
<FF>(0x0c)
3) <ESC L>
<GS k 73 2 4 5 6 7 8 9 NUL>
Run Code Online (Sandbox Code Playgroud)
4) "ESC L" "GS k 73 2 4 5 6 7 8 9 NUL" "FF" 我还尝试使用 C 程序发送 …