본문 바로가기
ProjectMyPOS

VB6 - 인쇄하기

by 존버2028 2024. 6. 12.

1. 폼디자인 그대로 인쇄하기

간단히 폼이름.PrintForm메서드를 이용한다. 용지에 맞춰 확대, 축소라던가 미리보기라던가 이런 기능은 직접 추가를 해야 한다. 머리가 매우 아플듯...

2. Printer 오브젝트를 이용하기

인쇄할 문서폼을 정밀하게 조정할 수 있는데 미리 한글이나 워드에서 작업해서 출력후에 각각의 위치를 자로 재서 작업하면 작업시간을 아낄 수 있다. 아래는 영수증 출력을 위해 만든 프린트모듈의 소스이다.

Option Explicit
​
Private Const INITIALX As Integer = 5  
Private Const INITIALY As Integer = 5  
Private Const PRINTWIDTH As Integer = 45  
Private Const LINESPACE As Integer = 3
​
Private Const ALIGNLEFT As Integer = 0  
Private Const ALIGNRIGHT As Integer = 1  
Private Const ALIGNCENTER As Integer = 2
​
'Pinter.CurrentY는 값이 지맘대로 바뀌므로 이 변수를 사용한다
Dim iCurrentY As Integer
​
'영수증을 인쇄한다  
Public Function PrintReceipt() As Boolean  
On Error GoTo ERROR_PRINT
​
    '프린트헤더의 위치와 글꼴, 줄간격 등을 세팅한다
    SetupBeforePrint
​
    '가게이름, 주소, 전화번호를 출력한다
    PrintReceiptHead
​
    '트랜잭션에 관련된 모든 자료를 출력한다
    PrintReceiptBody
​
    '감샤함다 메시지와 손님용 영수증이라는 부분을 출력한다(사실 별로 필요는...)
    PrintReceiptTail
​
    '이제 실제로 프린터에 출력을 하고 함수를 종료한다
    Printer.EndDoc
    Exit Function
​
'에러가 발생하면 메시지박스에 에러코드를 보여준다  
ERROR_PRINT:  
    MsgBox Err.Description, vbCritical, "Print Error!"  
    Printer.KillDoc  
End Function
​
'프린트커서의 위치와 글꼴, 줄간격 등을 세팅한다  
Private Sub SetupBeforePrint()
​
    '프린터커서 위치설정
    Printer.CurrentX = INITIALX
    iCurrentY = INITIALY
​
    '프린터용지 방향과 프린터커서 단위설정
    Printer.Orientation = vbPRORPortrait
    Printer.ScaleMode = vbMillimeters
​
    '글꼴과 크기, 모양설정
    Printer.Font = "D2Coding"
    Printer.FontSize = 9
    Printer.FontBold = True
​
    '프린터용지설정용 박스을 그린다 : 나중에는 지우세욤~
    Printer.Line (0, 0)-(PRINTWIDTH + 10, iCurrentY + 105), vbBlack, B
    ' Printer.Line (InitialCursorX - 5, CursorY)-(InitialCursorX - 5, CursorY + 80)  
    ' Printer.Line (InitialCursorX, CursorY)-(InitialCursorX, CursorY + 80)  
    ' Printer.Line (InitialCursorX + 45, CursorY)-(InitialCursorX + 45, CursorY + 80)  
    ' Printer.Line (InitialCursorX + 50, CursorY)-(InitialCursorX + 50, CursorY + 80)
​
    '프린터커서 위치설정
    'Call MoveToNextLine
​
End Sub
​
'가게이름, 주소, 전화번호를 출력한다  
Private Sub PrintReceiptHead()
​
    Call PrintLine(iCurrentY, "* BEER & WINE *", ALIGNCENTER)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, "(705)706-5098", ALIGNCENTER)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, "1204 MEMORIALAVE", ALIGNCENTER)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, "BRACEBRIDGE ON T1R4N4", ALIGNCENTER)  
    Call EndOfParagraph
​
End Sub
​
'트랜잭션에 관련된 모든 자료를 출력한다  
Private Sub PrintReceiptBody()
​
    '이부분은 지금으로서는 일단 테스트용, 원래는 DB에서 불러온 실제 데이터를 사용해야 한다
    Call PrintLine(iCurrentY, "TRANSACTION #1", ALIGNLEFT)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, CStr(TDate & " " & VBA.Format(Now, "hh:mm:ss")), ALIGNLEFT)  
    Call EndOfParagraph
​
    Call PrintLine(iCurrentY, "CIGARETTE", ALIGNLEFT)  
    Call PrintLine(iCurrentY, "2 @ $10.00 H", ALIGNRIGHT)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, "HST ITEM", ALIGNLEFT)  
    Call PrintLine(iCurrentY, "$49.99 H", ALIGNRIGHT)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, "NO-TAX ITEM", ALIGNLEFT)  
    Call PrintLine(iCurrentY, "10 @ $2.75 N", ALIGNRIGHT)  
    Call EndOfParagraph
​
End Sub
​
'감샤함다 메시지와 손님용 영수증이라는 부분을 출력한다(사실 별로 필요는...)  
Private Sub PrintReceiptTail()
​
    Call PrintLine(iCurrentY, "*** CUSTOMER COPY ***", ALIGNCENTER)  
    Call MoveToNextLine  
    Call PrintLine(iCurrentY, "THANK YOU", ALIGNCENTER)  
    Call EndOfParagraph
​
End Sub
​
'정렬방법에 맞춰서 프린터커서를 움직인 후에 문자열을 출력한다  
Private Sub PrintLine(iy As Integer, sstr As String, ialign As Integer)
​
    '왼쪽 정렬로 출력  
    If ialign = ALIGNLEFT Then  
        Printer.CurrentX = INITIALX  
        Printer.CurrentY = iy  
        Printer.Print sstr  
    '오른쪽 정렬로 출력  
    ElseIf ialign = ALIGNRIGHT Then  
        Printer.CurrentX = INITIALX + PRINTWIDTH - Printer.TextWidth(sstr)  
        Printer.CurrentY = iy  
        Printer.Print sstr  
    '가운데 정렬로 출력  
    Else  
        Printer.CurrentX = INITIALX + (PRINTWIDTH - Printer.TextWidth(sstr)) / 2  
        Printer.CurrentY = iy  
        Printer.Print sstr  
    End If
​
End Sub
​
'다음 라인을 인쇄하기 위해 프린터커서를 이동한다  
Private Sub MoveToNextLine()
​
    Printer.CurrentX = INITIALX  
    iCurrentY = iCurrentY + LINESPACE
​
End Sub
​
'문단이 끝나면 2줄을 띄우는게 맞지않냐?
Private Sub EndOfParagraph()
​
    Printer.CurrentX = INITIALX  
    iCurrentY = iCurrentY + LINESPACE * 2
​
End Sub