我需要发送一个字符串的点阵打印机使用爱普生FX仿真,将打印一个简单的条形码.我可以通过手动将控制代码输入字符串来打印它.

This is an example from manual: https://files.support.epson.com/pdf/general/escp2ref.pdf#page=327 enter image description here

我手动将数据输入到字符串中:

var barcode = "\x1B\x28\x42\x10\x00\x06\x02\x00\x7D\x00\x01\x41\x32\x33\x40\x41\x21\x43\x44\x5B\x5D";

然后用"QZ托盘"模块发送.

这很好地工作,打印机通过正确打印所示的代码来响应.现在我的努力实际上是给它我自己的数据和改变最后10个字符串的代码,我已经try 了许多方法来正确地编码10个字符的字符串,到目前为止都没有奏效.在JavaScript中有什么方法可以做到这一点吗?

EDIT:

正在做的事情:

var barcode = "\x1B\x28\x42\x10\x00\x06\x02\x00\x7D\x00\x01" + "1234567890";

是我try 的第一件事,结果导致打印机处于空闲状态,完全没有对命令做出react .事实上,我发现第一个命令1B不起作用,我必须用String.fromCharCode(27)发送它.然后,打印条形码的完整工作命令变为:

var barcode = String.fromCharCode(27) + "\x28\x42\x10\x00\x06\x02\x00\x7D\x00\x01\x41\x32\x33\x40\x41\x21\x43\x44\x5B\x5D";

它会像手动打印一样打印数据.用转义的十六进制数据替换"1234567890",不知何故就会 destruct 它,打印机就什么都不做了.

EDIT2 , The solution:

原来,在将数据发送到打印机时,我无意中跳过了负责设置条形码数据类型的控制代码,在这种情况下,它将是A.如果没有它,打印机将处于空闲状态.工作代码:

String.fromCharCode(27) + "\x28\x42\x10\x00\x06\x02\x00\x0A\x00\x01" + "A" + "1234567890";

推荐答案

以下内容的十六进制值:

  • \x41\x32\x33\x40\x41\x21\x43\x44\x5B\x5D

只是以下文本,以十六进制格式进行了编码(或者更确切地说,是转义):

特别注意第一个字符A,每wikipedia个:(感谢 comments 中的@Thomas)

  • 100 (Code Set A)-ASCII字符00到95(0-9、A-Z和控制代码)、特殊字符和FNC 1-4
  • 100 (Code Set B)-ASCII字符32到127(0-9、A-Z、a-z)、特殊字符和FNC 1-4
  • 100 (Code Set C) - 00-99(用单个码位编码两位数)和FNC 1
  • A23@A!CD[]

您可以在JavaScript中验证这一点:

console.log("\x41\x32\x33\x40\x41\x21\x43\x44\x5B\x5D");
// prints: "A23@A!CD[]"

因此,您可以将您的示例更改为:

var barcode = "\x1B\x28\x42\x10\x00\x06\x02\x00\x7D\x00\x01" + "A123456789";

...或者让它更具可读性:

var barcode = 
    "\x1B\x28\x42\x10\x00" + // Barcode command and data length
    "\x06" +                 // Barcode type k = Code 128
    "\x02" +                 // Module width m = 2 dots / 180 inch
    "\x00" +                 // Space adj value s = +0 dots / 360 inch
    "\x7D\x00" +             // Bar length v1,v2 = 125 / 180 inch
    "\x01" +                 // Control flags c
    "A123456789";            // Barcode Data

...或者使用QZ托盘的数组表示法:

var data = [
    "\x1B\x28\x42\x10\x00",  // Barcode command and data length
    "\x06",                  // Barcode type k = Code 128
    "\x02",                  // Module width m = 2 dots / 180 inch
    "\x00",                  // Space adj value s = +0 dots / 360 inch
    "\x7D\x00",              // Bar length v1,v2 = 125 / 180 inch
    "\x01",                  // Control flags c
    "A123456789"             // Barcode Data
];

qz.print(config, data);

Edit:感谢@Thomas在 comments 中提到应该保留A.

我相信数据是使用EPSON ESC/P2条形码格式格式化的,此处定义,第C-195:https://files.support.epson.com/pdf/general/escp2ref.pdf

Javascript相关问答推荐

当没有固定间隔时,是否可以在d3.js中进行画笔捕捉?

使用reaction创建可排序的表不起作用

我可以在useState中调用函数并使用其数据吗

导入图像与内联包含它们NextJS

输入有关HTML复选框的已判断属性的信息

如果没有尾随斜线,托管在收件箱中的React/Vite将无法工作

如何使用React渲染器放置根dis?

如何获取转换字节的所有8位?

IMDB使用 puppeteer 加载更多按钮(nodejs)

单击子元素时关闭父元素(JS)

类型脚本中只有字符串或数字键而不是符号键的对象

无法在nextjs应用程序中通过id从mongoDB删除'

MongoDB中的引用

Mongoose post hook在使用await保存时不返回Postman响应

使用POST请求时,Req.Body为空

提交链接到AJAX数据结果的表单

IF语句的计算结果与实际情况相反

是否可以在Photoshop CC中zoom 路径项?

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

如何在AG-Grid文本字段中创建占位符