标题:VB打印程序
只看楼主
晓礼
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2017-8-17
结帖率:100%
已结贴  问题点数:20 回复次数:6 
VB打印程序
有一个固定的表格,然后我想用VB编辑个程序输入数据,数据输入完成后将输入的数据打印在固定的表格上。那位大神有时间愿意指导指导小弟的谢谢了!!!
我的联系方式254765767@
搜索更多相关主题的帖子: VB 打印 固定 输入 数据 
2017-08-17 16:37
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:7 
套打吗?

WINDOWS下面定位打印是一件很简单的事。
VB6提供了一个对象 printer ,代表系统中的默认打印机。
打印内容和在屏幕上显示内容是一样的命令。
CurrentX、CurrentY 定位,print 命令输出。
打印机坐标,你也可以按 缇 来计算,按 cm 换算成 缇,得到每个字符的位置,然后一个字符,一个字符的输出。
自己控制每个字之间的简距。

只是打印机多了几个命令个
NewPage  开始新的一页
EndDoc   告诉打印机,所有页打印完成了。
KillDoc  终止当前打印

-------------
你开始写的时候,使用一个 PictureBox 来模拟打印。可以到这个 PictureBox 里加载你的表格的扫描件。大小,按你的实际纸张大小,转换为缇来计算。
左上角为原点,0:0,这里不建议你修改坐标系。
每个字符的每个坐标值,需要有二个变量控值。
整体偏移量 + 偏移量
偏移量,为每个字符不相同,控制对齐格子用的。这个在设计阶段定好后,一般不允许用户自行修改。
整体偏移量,用于控制打印机装纸与你设计时打印机装纸之间存在的偏移误差。这个偏移量允许用户临时调整。



授人于鱼,不如授人于渔
早已停用QQ了
2017-08-17 16:55
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
我以前写的一个程序的 部分
程序代码:
Public Sub 打印预览(fr As 打印预览)
    
    On Error Resume Next
    fr.Picture3.Cls
    
    'Printer.Orientation = vbPRORPortrait                        '纵向
    打印机纸方向 = vbPRORPortrait
    Call fr.setpage               '设置纸大小
    Call viewdate(fr.Picture3, 左边距2 * 缇转厘米, 上边距2 * 缇转厘米)               '固定部分
    
    Call fr.SETDATAFR(Me)                                                            '告诉预览窗体是从哪个窗体调用过来的,以便提供打印功能调用
    
    Call 显示结果(fr.Picture3, 左边距2 * 缇转厘米, 上边距2 * 缇转厘米)                 '套打部分
    
    fr.Show
    
End Sub

Public Sub 打印()
On Error Resume Next
    If 注册否 Then
        If 打印机存在 Then
            Printer.Orientation = vbPRORPortrait                        '纵向
            
            Call viewdate(Printer, 左边距2 * 缇转厘米, 上边距2 * 缇转厘米)           '固定部分
            Call 显示结果(Printer, 左边距2 * 缇转厘米, 上边距2 * 缇转厘米)           '套打部分
            
            Printer.EndDoc
        Else
            MsgBox "错误:未发现打印机,无法打印!", vbCritical, 程序标题
        End If
    Else
        MsgBox "警告:未注册用户不能打印!", vbInformation, 程序标题
        
    End If

End Sub

Private Sub 显示结果(pp As Object, lefts As Long, tops As Long)

On Error Resume Next

'------显示建议卡动态部分-------
Dim i As Long
Dim fj() As String
For i = 0 To UBound(数据内容)
    'If Len(数据内容(i)) > 0 Then
        fj = Split(DateS(i), ",")               '分解
        fj(4) = 数据内容(i)                     '置换内容
        DateS(i) = Join(fj(), ",")              '重新连接起来
    'End If
    Call viewtext(DateS(i), pp, lefts, tops)    '调用显示
Next i

End Sub

Public Sub viewdate(pp As Object, lefts As Long, tops As Long)
'画线及显示固定部分
On Error Resume Next

Dim i As Long
Dim fj() As String
Dim vx As Long, vy As Long
Dim Fx As Long, Fy As Long
Dim hx As Long, hy As Long

'--------显示固定文字部分-----------
For i = 0 To UBound(FixedS)
    If Len(FixedS(i)) > 5 Then
        Call viewtext(FixedS(i), pp, lefts, tops)
    End If
Next i

'---------画线----------
For i = 0 To UBound(LineS)
    If Len(LineS(i)) > 5 Then
        fj = Split(LineS(i), ",")
        If UBound(fj) > 2 Then
            pp.Line (lefts + fj(0), tops + fj(1))-(lefts + fj(2), tops + fj(3)), 0
        End If
    End If
Next i

End Sub


设置文件,部分
;设置文件:A4纸型设置

[Page]
;纸芯宽
Width=9636
;纸芯高
Height=14568
;左,上边界,
Left=1134
Top=1134
;默认字体大小
FontSize=12

[Line]
;格式为 x1,y1,x2,y2

;横线
50,1000,9600,1000
50,1800,9600,1800

;竖线
50,1000,50,11400
750,1000,750,11400
2400,1800,2400,11400

[Fixed]
;固定显示部分
;格式: x1,y1,x2,y2,显示内容[,字体[,字号]]   
;字体和字号为可选,但有字号,就必须要有字体

50,1000,750,1800,地点

[Date]
;填表的数据
;警告,不要修改以下标题
;格式: x1,y1,x2,y2,显示内容[,字体[,字号]]   
;字体和字号为可选,但有字号,就必须要有字体

750,1000,3900,1800,地点


授人于鱼,不如授人于渔
早已停用QQ了
2017-08-17 17:06
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
程序代码:
Private Sub viewtext(cs As String, obj As Object, lefts As Long, tops As Long)
'传进来的数据格式为: X1,Y1,X2,Y2,显示内容,[字体[,字号]]
'字体为可选,字号也为可选,如果需要指定字号,就必须指定字体

On Error Resume Next

Dim fj() As String
Dim vx As Long, vy As Long
Dim Fx As Long, Fy As Long
Dim hx As Long, hy As Long

    fj = Split(cs, ",")             '分解传进来的参数
    If UBound(fj) > 4 Then          '有字体设置
        If Len(fj(5)) > 0 Then      '字体名不为空
            obj.FontName = fj(5)
        End If
    Else
        obj.FontName = "宋体"       '默认为宋体
    End If
    
    If UBound(fj) > 5 Then          '有字号设置
        If Val(fj(6)) > 2 Then      '字号最小不得小于2
            obj.FontSize = fj(6)
        End If
    Else
        obj.FontSize = 字体大小
    End If
    
    Fy = obj.TextHeight(fj(4))           '字体高
    Fx = obj.TextWidth(fj(4))            '字体宽
    
    hx = Val(fj(2)) - Val(fj(0))        '有效宽
    hy = Val(fj(3)) - Val(fj(1))        '有效高    

        vx = lefts + Val(fj(0)) + (hx - Fx) / 2
        vy = tops + Val(fj(1)) + (hy - Fy) / 2
        obj.CurrentX = vx
        obj.CurrentY = vy
        obj.Print fj(4)
    
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2017-08-17 17:10
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:7 
既然你的表格是固定的,你可以提前就表格设计好,作为一个单独的界面,在另外一个界面是数据输入界面,添加一个模块,在模块设置所有数据的变量。
在数据输入界面输入数据后提交,将数据存储在模块的变量中,然后调用打印界面,首先将变量填充到相应位置,然后打印就可以了。
难度不是很大。

请不要选我!!!
2017-08-17 18:52
晓礼
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2017-8-17
得分:0 
谢谢各位大神指导,我具体的看看不明白再来请教。
2017-08-17 19:46
晓礼
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2017-8-17
得分:0 
哪位大神可以给个完整的源代码就更好了哈哈😄😄
2017-08-17 19:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480126-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.165721 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved