其实发票打印什么的也不是很难,主要有两个方面需要注意:
1:在VB中可以自己写好打印的封装函数用来调用,就如楼上所写的,我也可以从程序里抓出几个来个你用:
自定义数据结构,用来对打印机的一些常用属性进行设置:
Type PrintSetting
XO As Single
YO As Single
XRatio As Single
YRatio As Single
Orientation As Long
ScaleMode As Long
FontSize As Long
PaperSize As Long
PrintName As String * 100
End Type
dim PrintSettings As PrintSetting
'初始化打印机
'循环中的语句是当有多个打印机连接时从中找出特定的打印机(发票打印和文档打印一般是在不同打印机上的)
Private Sub InitPrint()
Dim Ptr As Printer
For Each Ptr In Printers
If Ptr.DeviceName = Trim(PrintSettings.PrintName) Then
Set Printer = Ptr
Exit For
End If
Next
Printer.Orientation = PrintSettings.Orientation
Printer.ScaleMode = PrintSettings.ScaleMode '=6 设定单位为毫米
Printer.PaperSize = PrintSettings.PaperSize
'Printer.Font = PrintSettings.FontSize
AddOpe "InitPrint"
End Sub
因为将打印机设置放在自定义数据结构中,即方便保存为配置文件,也方便于调用
'下面的函数是将字符串用指定大小的字体在指定的位置输出
Public Sub PrintStr(ByVal x As Long, ByVal y As Long, ByVal PString As String, ByVal FontS As Long)
Dim I As Single
I = 0.5 * FontS + 8
Printer.CurrentX = x
Printer.CurrentY = y
Printer.FontSize = I
Printer.Print PString
End Sub
下面的语句将所有的连接的打印机和相关的支持的输出信息添加到一个COMBO和GRID控件中:
下面的代码用于获取打印机信息:
Private Sub GetPaperInfo()
Dim I As Long, Ret As Long
Dim Length As Integer
Dim Width As Integer
Dim PaperNo() As Integer
Dim PaperName() As String
Dim PaperSize() As Pos
Dim Ptr As Printer
Dim Tmp As String
For Each Ptr In Printers
If Ptr.DeviceName = Combo1.Text Then Set Printer = Ptr
Next
Ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_MAXEXTENT, ByVal 0&, ByVal 0&)
Length = Ret \ 65536
Width = Ret - Length * 65536
Ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_MINEXTENT, ByVal 0&, ByVal 0&)
Length = Ret \ 65536
Width = Ret - Length * 65536
Ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERS, ByVal 0&, ByVal 0&)
ReDim PaperNo(1 To Ret) As Integer
Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERS, PaperNo(1), ByVal 0&)
Dim arrPageName() As Byte
Dim allNames As String
Dim lStart As Long, lEnd As Long
ReDim PaperName(1 To Ret) As String
ReDim arrPageName(1 To Ret * 64) As Byte
Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERNAMES, arrPageName(1), ByVal 0&)
allNames = StrConv(arrPageName, vbUnicode)
I = 1
Do
lEnd = InStr(lStart + 1, allNames, Chr$(0), vbBinaryCompare)
If (lEnd > 0) And (lEnd - lStart - 1 > 0) Then
PaperName(I) = Mid$(allNames, lStart + 1, lEnd - lStart - 1)
I = I + 1
End If
lStart = lEnd
Loop Until lEnd = 0
ReDim PaperSize(1 To Ret) As Pos
Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERSIZE, PaperSize(1), ByVal 0&)
With Grid1
.FormatString = "^纸张编号|^纸张名称 |^纸 长|^纸 宽"
.Rows = 1
For I = 1 To Ret
'If Trim(PaperNo(I)) <> "" Then
.AddItem PaperNo(I) & vbTab & PaperName(I) & vbTab & PaperSize(I).y \ 10 & vbTab & PaperSize(I).x \ 10
'End If
Next I
End With
End Sub
参考以下的定位打印代码:
Option Explicit
Dim x As Integer
Dim y As Integer
Dim fnt As Byte
Dim txt As String
Dim dd As Variant
Public Function prnt(x As Variant, y As Variant, fnt As Variant, txt As Variant)
Printer.CurrentX = x
Printer.CurrentY = y
Printer.FontSize = fnt
Printer.Print txt
End Function
Private Sub Command1_Click()'打印字符串
Printer.FontSize = 36
Printer.Print "This is the first line of text in a pair."
Printer.Print "This is the second line of text in a pair."
Printer.EndDoc
End Sub
Private Sub Command3_Click()'打印文本内容
fnt = 16
x = 100
y = 100
txt = Text1
dd = prnt(x, y, fnt, txt)
Printer.EndDoc
End Sub