后来发现, 部分条码出现空格断裂, 导致PDA无法扫描, 经搜索在一个帖子里, 发现是因为: 宏计算条码时, 会出现校验位刚好是空格的情况, 而空格在code128字体里是不显示的, 所以最后的现象就是条码断裂, 无法扫描
解决思路, 如果校验位为空格, 那么修改起始位或者结束位, 来达到修改校验位的结果
修改之后的宏如下: 其中function encodeToCode128()

function toSetC(text) { return text.match(/\d{2}/g).map((ascii, index) => { var codeC = Number(ascii); var charCode = codeC > 94 ? codeC + 100 : codeC + 32; return String.fromCharCode(charCode) }).join(''); } function checkSum128(data, startCode) { var sum = startCode; for (var i = 0; i < data.length; i++) { var code = data.charCodeAt(i); var value = code > 199 ? code - 100 : code - 32; sum += (i + 1) * (value); } var checksum = (sum % 103) + 32; if (checksum > 126) checksum = checksum + 68 ; return String.fromCharCode(checksum); } //function encodeToCode128(text, codeABC = "B") { //text = text.Text ?? text //var startCode = String.fromCharCode(codeABC.toUpperCase().charCodeAt() + 138); //var stop = String.fromCharCode(206); //text = codeABC == 'C' && toSetC(text) || text; //var check = checkSum128(text, startCode.charCodeAt(0) - 100); ////text = text.replace(" ", String.fromCharCode(194)); //return startCode + text + check + stop; //} function encodeToCode128(text, codeABC = "B") { text = text.Text ?? text; var originalStartCode = codeABC.toUpperCase().charCodeAt() + 138; // e.g., 'B' → 204 var startCode = originalStartCode; var stopCode = 206; var encodedText = codeABC == 'C' ? toSetC(text) : text; // 计算默认校验位 var check = checkSum128(encodedText, startCode - 100); var checksum = check.charCodeAt(0); // 仅在校验位为空格(32)时尝试调整起始符和结束符 if (checksum === 32) { // 尝试不同的起始符(A/B/C) var startOptions = [ 203, // Start A 204, // Start B 205 // Start C ]; for (var i = 0; i < startOptions.length; i++) { var newStartCode = startOptions[i]; if (newStartCode === originalStartCode) continue; // 跳过原始起始符(已经计算过) check = checkSum128(encodedText, newStartCode - 100); checksum = check.charCodeAt(0); if (checksum !== 32) { // 找到非空格校验位,使用新的起始符 startCode = newStartCode; break; } } // 如果所有起始符都导致空格校验位,尝试修改停止符(206→238) if (checksum === 32) { stopCode = 238; check = checkSum128(encodedText, startCode - 100); // 重新计算校验位 } } return String.fromCharCode(startCode) + encodedText + check + String.fromCharCode(stopCode); }