我有一台 Citizen cl-s621 打印机,在哪里可以找到编程 code39 或 ean code 条形码标签的示例。 我曾与 zebra y sato 打印机合作过,但从未与 Citizen 合作过。
根据规格,CL-S621可以模拟Zebra ZPL-II语言。
https://www.citizen-systems.com/us/products/printer/label/cl-s621/
这是使用 Zebra 打印机打印条形码 39 的示例。需要重构。
' module code
Public Type DOCINFO
pDocName As String
pOutputFile As String
pDatatype As String
End Type
Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Public Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Public Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As Long
Public Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As DOCINFO) As Long
Public Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Public Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
Public Const BARCODE_PLACEHOLDER = "@@@@@"
' label script created using ZebraDesigner
Public Const LABEL_TEMPLATE_39 = "^XA~TA000~JSN^LT0^MNW^MTD^PON^PMN^LH0,0^JMA^PR6,6~SD15^JUS^LRN^CI0^XZ" _
& "^XA" _
& "^MMT" _
& "^PW609" _
& "^LL0406" _
& "^LS0" _
& "^BY4,3,160^FT586,219^B3I,N,,Y,N" _
& "^FD@@@@@^FS" _
& "^PQ1,0,1,Y^XZ"
Public Function AddMOD43CheckChar(Text As String) As String
Const charSet As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
Dim I As Long
Dim T As Long
For I = 1 To Len(Trim$(UCase(Text)))
T = InStr(charSet, Mid$(Text, I, 1)) - 1 + T
Next I
AddMOD43CheckChar = Text & Mid$(charSet, (T Mod 43 + 1), 1)
End Function
Public Function ClearCommandChars(Text As String) As String
Dim sTmp As String
sTmp = Replace(Text, "^", vbNullString, Compare:=vbBinaryCompare)
sTmp = Replace(sTmp, "~", vbNullString, Compare:=vbBinaryCompare)
ClearCommandChars = Replace(sTmp, "_", vbNullString, Compare:=vbBinaryCompare)
End Function
Public Function PrintCode39toZebra(PrinterName As String, BarCodeText As String, Optional AddCheckChar As Boolean) As Boolean
Dim sBCtext As String
Dim lPrinterHandle As Long, lRetVal As Long, lWritten As Long
Dim tDocInfo As DOCINFO
' clear barcode text and add check character
sBCtext = ClearCommandChars(BarCodeText)
If AddCheckChar Then sBCtext = AddMOD43CheckChar(sBCtext)
' insert barcode into label template
sBCtext = Replace(LABEL_TEMPLATE_39, BARCODE_PLACEHOLDER, sBCtext, Compare:=vbTextCompare)
' send label script to printer
tDocInfo.pDocName = "LoremIpsum"
tDocInfo.pOutputFile = vbNullString
tDocInfo.pDatatype = vbNullString
lRetVal = OpenPrinter(PrinterName, lPrinterHandle, 0)
If lRetVal <> 0 Then
lRetVal = StartDocPrinter(lPrinterHandle, 1, tDocInfo)
If lRetVal <> 0 Then
lRetVal = StartPagePrinter(lPrinterHandle)
If lRetVal <> 0 Then
lRetVal = WritePrinter(lPrinterHandle, ByVal sBCtext, Len(sBCtext), lWritten)
If lRetVal <> 0 Then
lRetVal = EndPagePrinter(lPrinterHandle)
If lRetVal <> 0 Then
lRetVal = EndDocPrinter(lPrinterHandle)
If lRetVal <> 0 Then
ClosePrinter lPrinterHandle
PrintCode39toZebra = True
End If
End If
End If
End If
End If
End If
End Function
' form code
Private Sub Command1_Click()
' "ZDesigner GX420d" - printer name from Devices and Printers
' "01234" - test barcode text
PrintCode39toZebra "ZDesigner GX420d", "01234", True
End Sub
我尝试向 cl-s621II 打印机发出 ZPL 命令来打印 hello。打印机通过 USB 连接。我正在使用 C++ 视觉工作室。 “打印测试页”命令工作正常。但我的代码不起作用。
这条线有什么问题吗:
bool sendZPLToPrinter(const char* 打印机名称, const char* zplData)
{
HANDLE printerHandle = CreateFile(printerName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (printerHandle == INVALID_HANDLE_VALUE) {
cerr << "Failed to open printer handle." << GetLastError() << endl;
return false;
}
这一行: if (!WriteFile(printerHandle, zplData, strlen(zplData), &bytesWritten, NULL))
这一行: bool sendZPLToPrinter(const char* PrinterName, const char* zplData)
ZPL命令:const char* zplCommand = "^XA^FO20,20^A0N,50,50^FDHello^FS^XZ"; const char* 打印机名称 = "COM1";
我只是使用#include
#包括