我的打印机是TLP 2742,我要打印商品名称、条码和单价,采用EPL2编程,VB代码如下:
Dim strOut As String
Dim FileNumber
FileNumber = FreeFile
strOut = "A80,10,0,2,1,1,N,""男成衣""" & vbCrLf '商品名称
strOut = strOut & "B80,40,0,E30,3,7,80,B,""123456789012""" & vbCrLf '条码
strOut = strOut & "A200,150,0,3,1,1,N,""120.00""" & vbCrLf '单价
strOut = vbCrLf & "N" & vbCrLf & strOut & "P1" & vbCrLf
Open "PRN" For Binary Access Write As #FileNumber
Put #FileNumber, , strOut
Close #Fil
商品名称打印出乱码,请赐教!急!
Dim strOut As String
Dim FileNumber
FileNumber = FreeFile
strOut = "A80,10,0,2,1,1,N,""男成衣""" & vbCrLf '商品名称
strOut = strOut & "B80,40,0,E30,3,7,80,B,""123456789012""" & vbCrLf '条码
strOut = strOut & "A200,150,0,3,1,1,N,""120.00""" & vbCrLf '单价
strOut = vbCrLf & "N" & vbCrLf & strOut & "P1" & vbCrLf
Open "PRN" For Binary Access Write As #FileNumber
Put #FileNumber, , strOut
Close #Fil
商品名称打印出乱码,请赐教!急!
2.打印CODE39的示例
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
'从画笔的当前位置到(x,y)画一条线
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
'在(x,y)处输出一个字符串
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
'MoveToEx() 函数需要的参数
Private Type POINTAPI
xp As Long
yp As Long
End Type
Dim papi As POINTAPI
Private Sub PrintBarCode(ByVal Pic As Object, ByVal PrintDC As Long, ByVal strBarCode As String, Optional ByVal intXPos As Integer = 0, Optional ByVal intYPos As Integer = 0, Optional ByVal intPrintHeight As Integer = 100, Optional ByVal bolPrintText As Boolean = True)
'注释: 参数说明:
'注释: strBarCode -要打印的条形码字符串
'注释: intXPos, intYPos - 打印条形码的左上角坐标(缺省为(0,0),坐标刻度为:毫米)
'注释: intHeight - 打印高度(缺省为一厘米,坐标刻度为:毫米)
'注释: bolPrintText -是否打印人工识别字符(缺省为true)
'注释: "0"-"9","A-Z","-","%","$"和"*" 的条码编码格式,总共 40 个字符
Static strBarTable(39) As String
'注释: 初始化条码编码格式表
strBarTable(0) = "000110100" '注释: 0
strBarTable(1) = "100100001" '注释: 1
strBarTable(2) = "001100001" '注释: 2
strBarTable(3) = "101100000" '注释: 3
strBarTable(4) = "000110001" '注释: 4
strBarTable(5) = "100110000" '注释: 5
strBarTable(6) = "001110000" '注释: 6
strBarTable(7) = "000100101" '注释: 7
strBarTable(8) = "100100100" '注释: 8
strBarTable(9) = "001100100" '注释: 9
strBarTable(10) = "100001001" '注释: A
strBarTable(11) = "001001001" '注释: B
strBarTable(12) = "101001000" '注释: C
strBarTable(13) = "000011001" '注释: D
strBarTable(14) = "100011000" '注释: E
strBarTable(15) = "001011000" '注释: F
strBarTable(16) = "000001101" '注释: G
strBarTable(17) = "100001100" '注释: H
strBarTable(18) = "001001101" '注释: I
strBarTable(19) = "000011100" '注释: J
strBarTable(20) = "100000011" '注释: K
strBarTable(21) = "001000011" '注释: L
strBarTable(22) = "101000010" '注释: M
strBarTable(23) = "000010011" '注释: N
strBarTable(24) = "100010010" '注释: O
strBarTable(25) = "001010010" '注释: P
strBarTable(26) = "000000111" '注释: Q
strBarTable(27) = "100000110" '注释: R
strBarTable(28) = "001000110" '注释: S
strBarTable(29) = "000010110" '注释: T
strBarTable(30) = "110000001" '注释: U
strBarTable(31) = "011000001" '注释: V
strBarTable(32) = "111000000" '注释: W
strBarTable(33) = "010010001" '注释: X
strBarTable(34) = "110010000" '注释: Y
strBarTable(35) = "011010000" '注释: Z
strBarTable(36) = "010000101" '注释: -
strBarTable(37) = "000101010" '注释: %
strBarTable(38) = "010101000" '注释: $
strBarTable(39) = "010010100" '注释: *
If strBarCode = "" Then Exit Sub '注释: 不打印空串
'注释: 保存打印机 ScaleMode
Dim intOldScaleMode As ScaleModeConstants
intOldScaleMode = Pic.ScaleMode
'注释: 保存打印机 DrawWidth
Dim intOldDrawWidth As Integer
intOldDrawWidth = Pic.DrawWidth
'注释: 保存打印机 Font
Dim fntOldFont As StdFont
Set fntOldFont = Pic.Font
Pic.ScaleMode = vbTwips '注释: 设置打印用的坐标刻度为缇(twip=1)
Pic.DrawWidth = 1 '注释: 线宽为 1
Pic.FontName = "宋体" '注释: 打印在条码下方字符的字体和大小
Pic.FontSize = 8
Dim strBC As String '注释: 要打印的条码字符串
strBC = UCase(strBarCode)
'注释: 将以毫米表示的 X 坐标转换为以缇表示
Dim x As Integer
x = Pic.ScaleX(intXPos, vbMillimeters, vbTwips)
'注释: 将以毫米表示的 Y 坐标转换为以缇表示
Dim y As Integer
y = Pic.ScaleY(intYPos, vbMillimeters, vbTwips)
'注释: 将以毫米表示的高度转换为以缇表示
Dim intHeight As Integer
intHeight = Pic.ScaleY(intPrintHeight, vbMillimeters, vbTwips)
'注释: 是否在条形码下方打印人工识别字符
If bolPrintText = True Then
'注释: 条码打印高度要减去下面的字符显示高度
End If
Const intWidthCU As Integer = 60 '注释: 粗线和宽间隙宽度
Const intWidthXI As Integer = 20 '注释: 细线和窄间隙宽度
Dim intIndex As Integer '注释: 当前处理的字符串索引
Dim i As Integer, j As Integer, k As Integer '注释: 循环控制变量
'注释: 添加起始字符
If Left(strBC, 1) <> "*" Then
strBC = "*" & strBC
End If
'注释: 添加结束字符
If Right(strBC, 1) <> "*" Then
strBC = strBC & "*"
End If
'注释: 循环处理每个要显示的条码字符
For i = 1 To Len(strBC)
'注释: 确定当前字符在 strBarTable 中的索引
Select Case Mid(strBC, i, 1)
Case "*"
intIndex = 39
Case "$"
intIndex = 38
Case "%"
intIndex = 37
Case "-"
intIndex = 36
Case "0" To "9"
intIndex = CInt(Mid(strBC, i, 1))
Case "A" To "Z"
intIndex = Asc(Mid(strBC, i, 1)) - Asc("A") + 10
Case Else
MsgBox "要打印的条形码字符串中包含无效字符!" '当前版本只支持字符 注释:0注释:-注释:9注释:,注释:A注释:-注释:Z注释:,注释:-注释:,注释:%注释:,注释:$注释:和注释:*注释:"
End Select
'注释: 是否在条形码下方打印人工识别字符
If bolPrintText = True Then
Printer.CurrentX = x
Printer.CurrentY = y + intHeight
' TextOut PrintDC, x, y + intHeight, Mid(strBC, i, 1), 1
If TypeName(Pic) = "Printer" Then Printer.Print Mid(strBC, i, 1)
'pic.Print Mid(strBC, i, 1)
End If
For j = 1 To 5
'注释: 画细线
If Mid(strBarTable(intIndex), 2 * j - 1, 1) = "0" Then
For k = 0 To intWidthXI - 1
'MoveToEx PrintDC, x + k, y, papi
'LineTo PrintDC, x + k, y + intHeight + 1
If TypeName(Pic) = "Printer" Then Printer.Line (x + k, y)-Step(0, intHeight)
'pic.Line (x + k, y)-Step(0, intHeight)
Next k
x = x + intWidthXI
'注释: 画宽线
Else
For k = 0 To intWidthCU - 1
'MoveToEx PrintDC, x + k, y, papi
'LineTo PrintDC, x + k, y + intHeight + 1
If TypeName(Pic) = "Printer" Then Printer.Line (x + k, y)-Step(0, intHeight)
'pic.Line (x + k, y)-Step(0, intHeight)
Next k
x = x + intWidthCU
End If
'注释: 每个字符条码之间为窄间隙
If j = 5 Then
x = x + intWidthXI
Exit For
End If
'注释: 窄间隙
If Mid(strBarTable(intIndex), 2 * j, 1) = "0" Then
x = x + intWidthXI
'注释: 宽间隙
Else
x = x + intWidthCU
End If
Next j
Next i
'注释: 恢复打印机 ScaleMode
If TypeName(Pic) = "Printer" Then Pic.EndDoc
Pic.ScaleMode = intOldScaleMode
'注释: 恢复打印机 DrawWidth
Pic.DrawWidth = intOldDrawWidth
'注释: 恢复打印机 Font