在vb里打印机的脚本的写法是什么ESC
另外谁能说说WritePrinter()、Open "LPT1"、Printer、Escape()、SpoolFile()最后一个函数查不到!

解决方案 »

  1.   

    完整的printer对象打印代码:Public Sub PrintGZLTJ(ByVal strSql As String, ByVal dtmBegin As Date, dtmStop As Date)
    On Error Resume Next
        Dim rsTemp As ADODB.Recordset
        Dim i As Integer
        Dim lngTotal As Long
        
        Dim intPage As Integer
        Dim sngCurrY As Single
        Dim intCurrLine As Integer
        
        Dim sngTitleTop As Single
        Dim sngHospitalTop As Single
        
        Dim sngPersonTop As Single
        Dim sngTextLeft As Single
        Dim sngHeaderTop As Single
        Dim sngTextTop As Single
        Dim sngTextBottom As Single
        Dim sngPageNumberTop As Single
        
        Me.MousePointer = 11
        
        sngTitleTop = 25
        sngHospitalTop = 34
        sngPersonTop = 42
        sngTextLeft = 40
        sngHeaderTop = 52
        sngTextTop = 59
        sngTextBottom = 272
        sngPageNumberTop = 285
        
        Set rsTemp = New ADODB.Recordset
        rsTemp.Open strSql, GCon, adOpenStatic, adLockOptimistic
        If rsTemp.EOF Then
            MsgBox "没有需要打印的内容,请重新设置时间范围!", vbInformation, "提示"
            GoTo ExitLab
        End If
        
        intPage = 1 '从第一页开始
        '打印第一页的标题
        GoSub PrintTitle    rsTemp.MoveFirst
        With Printer
            '打印报表正文
            '循环打印所有记录
            intCurrLine = 1
            For i = 1 To rsTemp.RecordCount
                .FontSize = 9
                .FontBold = False
                '计算纵坐标
                sngCurrY = sngTextTop + (intCurrLine - 1) * .TextHeight("高度") * 1.5
                If sngCurrY > sngTextBottom Then '该分页
                    Printer.NewPage
                    intPage = intPage + 1
                    GoSub PrintTitle
                    
                    intCurrLine = 1
                    .FontSize = 9
                    .FontBold = False
                    '分页后重新计算纵坐标
                    sngCurrY = sngTextTop + (intCurrLine - 1) * .TextHeight("高度") * 1.5
                End If
                .CurrentX = sngTextLeft
                .CurrentY = sngCurrY
                Printer.Print rsTemp(0)
                
                .CurrentX = sngTextLeft + 100
                .CurrentY = sngCurrY
                Printer.Print IIf(IsNull(rsTemp(1)), "", rsTemp(1))
                
                If Not IsNull(rsTemp(1)) Then
                    lngTotal = lngTotal + rsTemp(1)
                End If
                
                intCurrLine = intCurrLine + 1
                rsTemp.MoveNext
            Next
            
            '在最后一页上打印合计
            .FontSize = 9
            .FontBold = True
            sngCurrY = sngTextTop + (intCurrLine - 1) * .TextHeight("高度") * 1.5 + 5
            Printer.Line (sngTextLeft - 5, sngCurrY - 1.5)-(sngTextLeft + 120, sngCurrY - 1.5)
            .CurrentX = sngTextLeft
            .CurrentY = sngCurrY
            Printer.Print "合计:"
            
            .CurrentX = sngTextLeft + 100
            .CurrentY = sngCurrY
            Printer.Print lngTotal
            
            '提交打印
            Printer.EndDoc
        End With
        GoTo ExitLab'打印报表标题
    PrintTitle:
        With Printer
            '打印标题
            .FontName = "宋体"
            .FontSize = 17
            .FontBold = True
            .FontItalic = False
            .FontUnderline = False
            
            .CurrentX = (Printer.ScaleWidth - .TextWidth("**工作量统计")) / 2
            .CurrentY = sngTitleTop
            If mblnKShi = True Then
                Printer.Print "**工作量统计"
            Else
                Printer.Print "**工作量统计"
            End If
            
            '打印单位
            .FontSize = 11
            .CurrentX = (Printer.ScaleWidth - .TextWidth(gstrDWMC)) / 2
            .CurrentY = sngHospitalTop
            Printer.Print gstrDWMC
            
            '打印起始日期
            .FontSize = 9
            .CurrentX = (Printer.ScaleWidth - .TextWidth("(" & dtmBegin & " 至 " & dtmStop & ")")) / 2
            .CurrentY = sngPersonTop
            Printer.Print "(" & dtmBegin & " 至 " & dtmStop & ")"
            
            '打印报表题头
            Printer.DrawWidth = 5
            Printer.Line (sngTextLeft - 5, sngHeaderTop - 1.5)-(sngTextLeft + 120, sngHeaderTop - 1.5)
            
            .CurrentX = sngTextLeft
            .CurrentY = sngHeaderTop
            If mblnKShi = True Then
                Printer.Print "**名称"
            Else
                Printer.Print "工作人员"
            End If
            
            .CurrentX = sngTextLeft + 100
            .CurrentY = sngHeaderTop
            Printer.Print "工作量(人次)"
            Printer.Line (sngTextLeft - 5, sngHeaderTop + .TextHeight("高度") + 1)-(sngTextLeft + 120, sngHeaderTop + .TextHeight("高度") + 1)
        
            .CurrentX = (Printer.ScaleWidth - .TextWidth(Str(intPage))) / 2
            .CurrentY = sngPageNumberTop
            Printer.Print intPage
        End With
        Return
        
    ExitLab:
        Me.MousePointer = 0
    End Sub
      

  2.   

    : kissoflife(明月高楼休独倚,酒入愁肠,化作相思泪!) 
    非常感谢!不过我记得Printer是按页打印的,能控制按行打印吗?比如说给顾客打印小票后要直接撕纸。这就是我需要直接控制打印机ESC/PK、ESC/POS命令集的原因,但是不知道用法。
      

  3.   

    : kissoflife(明月高楼休独倚,酒入愁肠,化作相思泪!) 
    非常感谢!不过我记得Printer是按页打印的,能控制按行打印吗?比如说给顾客打印小票后要直接撕纸。这就是我需要直接控制打印机ESC/PK、ESC/POS命令集的原因,但是不知道用法。