我正在尝试在delphi,android平台(firemonkey)的热定位蓝牙打印机上打印二维码。打印机已连接,我可以打印文本,但无法生成和打印二维码,如果有人能提供帮助,我将不胜感激。
pos打印机的商标是P08-580LD(紫江)。
这是我在 delphi-android 10.2 中使用的代码。
sock.connect;
// Reset Printer
ostream.write(StringToJA(escResetPrinter,'iso8859-2'));
ostream.write(StringToJA(pO8escBoldOn,'iso8859-2'));
ostream.write(StringToJA('Naziv 1'+escNewLine , 'iso8859-2'));
ostream.write(StringToJA(pO8escBoldOff,'iso8859-2'));
ostream.write(StringToJA(pO8escFontA,'iso8859-2'));
ostream.write(StringToJA('Adresa'+escNewLine , 'iso8859-2'));
ostream.write(StringToJA(escResetPrinter,'iso8859-2'));
ostream.write(StringToJA(pO8escFontB,'iso8859-2'));
ostream.write(StringToJA('MB xxxxx, ID HR-AB-99-0125--54'+escNewLine , 'iso8859-2'));
ostream.write(StringToJA(escResetPrinter,'iso8859-2'));
ostream.write(StringToJA(pO8escUnerlineOn,'iso8859-2'));
ostream.write(StringToJA('IBAN: xxxxxxxxx'+escNewLine , 'iso8859-2'));
ostream.write(StringToJA(pO8escUnerlineOff,'iso8859-2'));
ostream.write(StringToJA('OIB 99999999'+escNewLine , 'iso8859-2'));
// start - qr-code //
ostream.write(StringToJA(chr(27)+chr(90)+chr(0)+chr(7)+chr(15)+chr(25)+chr(30)+'dada' ,'iso8859-2'));
ostream.write(StringToJA(escResetPrinter,'iso8859-2'));
Sleep(250);
ostream.flush();
ostream.close;
这是来自打印机的文档,它说明了如何构建代码(十进制)。
https://mega.nz/file/fu4zTCSR#UZ53LSty7dUpRyqzvz8li27amG1KvVlLk0slQFhd5Os
我设法生成了如下图所示的二维码,但不行。
这就是根据打印机文档生成二维码的方式
我在android studio中找到了一个函数,如何构建二维码,如果有人知道如何将一个函数变成delphi,我将不胜感激。
......
byte[] qrcode = PrinterCommand.getBarCommand("Zijiang Electronic Thermal Receipt Printer!", 0, 3, 6);//
Command.ESC_Align[2] = 0x01;
SendDataByte(Command.ESC_Align);
SendDataByte(qrcode);
public static byte[] getBarCommand(String str, int nVersion, int nErrorCorrectionLevel, int nMagnification)
{
if(nVersion<0 | nVersion >19 | nErrorCorrectionLevel<0 | nErrorCorrectionLevel > 3
| nMagnification < 1 | nMagnification > 8){
return null;
}
byte[] bCodeData = null;
try
{
bCodeData = str.getBytes("GBK");
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
return null;
}
byte[] command = new byte[bCodeData.length + 7];
command[0] = 27;
command[1] = 90;
command[2] = ((byte)nVersion);
command[3] = ((byte)nErrorCorrectionLevel);
command[4] = ((byte)nMagnification);
command[5] = (byte)(bCodeData.length & 0xff);
command[6] = (byte)((bCodeData.length & 0xff00) >> 8);
System.arraycopy(bCodeData, 0, command, 7, bCodeData.length);
return command;
}