메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

.NET 애플리케이션에서의 인쇄 기능 관리(2)

한빛미디어

|

2007-06-25

|

by HANBIT

12,478

제공 : 한빛 네트워크
저자 : Wei-Meng Lee
역자 : 김탁용
원문 : Managing Printing in Your .NET Application

[이전 기사 보기]
.NET 애플리케이션에서의 인쇄 기능 관리(1)

인쇄 미리 보기

출력물을 바로 프린터로 보내는 대신에 인쇄 전에 미리 보기를 사용자에게 제공하는 것이 좋습니다. 이는 PrintPreviewDialog() 클래스를 사용해 할 수 있습니다.
    Private Sub btnPrint_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles btnPrint.Click

        "---show preview---
        Dim dlg As New PrintPreviewDialog()
        With dlg
            .Document = printDoc
            .ShowDialog()
        End With
    End Sub
위의 코드는 분리된 윈도우에 출력물을 미리 보여줍니다. 여기에서 프린터 아이콘을 클릭하면 프린터로 인쇄할 수 있습니다. 또한 페이지를 확대하거나 한 화면에 여러 페이지를 볼 수도 있습니다. (그림 4)


[그림 4] 인쇄 미리 보기

미리보기 창에서 인쇄를 하기 위해 프린터 아이콘을 누르는 순간 PrintDocument의 모든 이벤트 핸들러가 다시 수행된다는 것에 주의하십시오. 이 때문에 BeginPrint 이벤트 핸들러에서 인쇄에서 사용하는 모든 필요한 변수들을 초기화시켜 주어야 합니다.

여러 장 인쇄하기

인쇄할 내용이 여러 장이라면, 다른 작업을 해줘야 할 필요가 있습니다. Form1에 [그림 5]처럼 라벨 컨트롤과 텍스트 컨트롤들을 추가하고 2개의 텍스트박스 컨트롤은 이름을 지정합니다.


[그림 5] Form1에 컨트롤 추가

자, 이제 사용자가 여러 페이지를 인쇄할 수 있도록 해보겠습니다. 사용자가 인쇄할 페이지 범위를 입력하면 각각의 페이지들이 인쇄될 것입니다.

BeginPrint 이벤트 핸들러에서 아래 굵게 표시된 것처럼 페이지 카운터를 초기화합니다. (역주: Source의 Bold체는 원문페이지에서 편집 오류로 빠진 것으로 보입니다)
Private Sub _beginPrint( _
       ByVal sender As Object, _
       ByVal e As PrintEventArgs)

        "---initialize the page counter---
        pagecounter = CInt(txtFrom.Text)

        "---initialize the fonts---
        f_title = New Font("Arial", 16, FontStyle.Bold)
        f_body = New Font("Times New Roman", 10)
    End Sub
PrintPage 이벤트 핸들러에서 인쇄할 페이지가 더 있는지 여부를 결정합니다. 만약 있다면 PrintPageEventArgs 클래스의 HasMorePages 프로퍼티를 True로 설정하여 PrintPage 이벤트 핸들러가 다시 한번 호출되게 합니다. 더 인쇄할 페이지가 남아있지 않다면 HasMorePages를 False로 설정합니다.
Private Sub _printPage( _
       ByVal sender As Object, _
       ByVal e As PrintPageEventArgs)
        ...
        "---increments the page counter---
        pagecounter += 1

        "---determine if you have more pages to print---
        If pagecounter <= txtTo.Text Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If
    End Sub
[그림 6]은 사용자가 2쪽부터 5쪽까지 선택하고 2쪽부터 출력물이 시작되는 것을 보여 줍니다. 미리보기 창 오른쪽 위에 있는 위/아래 화살표를 클릭 해 다른 페이지로 이동시킬 수 있습니다.


[그림 6] 여러 장 인쇄 미리 보기

프린터 선택하기

여러 대의 프린터가 컴퓨터에 연결되어 있다면 사용자에게 기본 프린터로 출력하는 것 대신에 원하는 프린터로 출력이 되도록 선택하게 하는 것이 좋습니다. 아래에 나와 있는 PrintDialog 클래스를 통해 이를 할 수 있습니다.
Private Sub btnPrint_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles btnPrint.Click

        "---let user select a printer to print---
        Dim pd As New PrintDialog
        With pd
            .Document = printDoc
            .AllowSomePages = True
        End With
        Dim result As DialogResult = pd.ShowDialog()
        If result = Windows.Forms.DialogResult.OK Then
            printDoc.Print()
        End If
    End Sub
PrintDialog 클래스가 보여질 때 어떻게 나오는가를 [그림7]에서 볼 수 있습니다.


[그림 7] 사용자가 인쇄할 프린터를 선택

아래 굵게 표시된 프로퍼티들처럼, PrintDialog 클래스의 디폴트 값들을 설정할 수 있습니다.
   Dim pd As New PrintDialog
        With pd
            .Document = printDoc
            .AllowSomePages = True
            .PrinterSettings.Copies = 3
            .PrinterSettings.FromPage = 2
            .PrinterSettings.ToPage = 5
        End With
[그림 8]에서 보면 설정한 디폴트 값들이 나오는 것을 확인할 수 있습니다.


[그림 8] 디폴트 값이 설정된 프린터 선택 다이얼로그

인쇄 완료 알리기

인쇄가 완료되었을 때 사용자에게 이를 알리는 것은 언제나 좋은 관례입니다. 이를 위해서, 아래와 같이 EndPrint 이벤트 핸들러에서 간단하게 메시지를 보이도록 하겠습니다.
Private Sub _endPrint( _
       ByVal sender As Object, _
       ByVal e As PrintEventArgs)

        "---de-reference the fonts---
        f_title = Nothing
        f_body = Nothing

        MessageBox.Show(printDoc.DocumentName & _
           " has finished printing.")
    End Sub
페이지 설정하기

앞서 다룬 프린터 선택 말고도 페이지 설정을 제공하는 것 또한 사용자들에게 유용할 것입니다. 페이지 설정을 통해 페이지 방향, 용지 크기와 같은 세부적인 사항들을 설정합니다. 예제로 살펴보려면, 페이지에 Button 컨트롤 하나를 추가하고(그림9) 아래와 같은 코드를 입력하십시오.


[그림 9] 페이지 설정 Button 컨트롤 추가
Private Sub btnPageSetup_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) _
       Handles btnPageSetup.Click

        Dim pageSetup As New PageSetupDialog
        With pageSetup
            .PageSettings = printDoc.DefaultPageSettings
            .ShowDialog()
        End With
    End Sub
PageSetupDialog 클래스가 보여질 때 어떻게 나오는가를 [그림10]에서 볼 수 있습니다.


[그림 10] 페이지 설정

요약

이 아티클을 통해 Windows 애플리케이션에서 인쇄를 제공하기 위한 주요 단계들을 살펴보았습니다. 여러분의 애플리케이션에서 인쇄하기를 지원하고 있나요? 아래 링크를 사용해 다른 독자들과 여러분의 생각을 공유해 보세요.


저자 Wei-Meng Lee (weimenglee.blogspot.com)는 기술전문가이며 최신 Microsoft 기술교육 전문회사인 Developer Learning Solution의 설립자입니다.


역자 김탁용님은 연세대학교 컴퓨터과학과를 졸업하고 현재 대한항공 정보시스템실에서 근무하고 있습니다. 무엇인가 새로운 것을 만드는 일, 그로 인해 다른 사람들에게 도움이 되는 일에 관심이 많아 소프트웨어 개발을 계속 하고 있습니다.
TAG :
댓글 입력
자료실

최근 본 책0