首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于用vb实现票据套打的有关问题

2012-01-10 
关于用vb实现票据套打的问题?我想问下大家,在网上现在有免费使用的增值税发票套打的用vb做的软件吗??如果

关于用vb实现票据套打的问题?
我想问下大家,在网上现在有免费使用的增值税发票套打的用vb做的软件吗??
如果有~可以给个下载地址我吗?
要是没有~可以给个vb的实现票据套打的源码让我参考一下吗??

[解决办法]
源码是有,但是不能给你,就算给你也没有用,没有后台数据库是运行不起来的.
而且代码很多,会看得你发晕的,呵呵.

其实发票打印什么的也不是很难,主要有两个方面需要注意:
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

以上为VB控制的主要部分,
还有一个地方需要注意:要输出的打印机中必须要有指定的纸张尺寸(即发票输出的特殊纸张尺寸)
否则将会按照默认的A4大小输出.

下面的语句将所有的连接的打印机和相关的支持的输出信息添加到一个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

热点排行
Bad Request.