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

한빛출판네트워크

IT/모바일

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

한빛미디어

|

2007-06-22

|

by HANBIT

12,122

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

.NET 프레임워크는 여러분의 .NET 애플리케이션에서 인쇄 기능을 제공하는 것이 매우 간단하도록 해줍니다. 이번 아티클에서는 .NET 2.0에서의 인쇄의 기초와 페이지 설정, 여러 페이지 인쇄, 인쇄 미리 보기, 또한 사용자가 인쇄할 프린터를 선택하는 방법들에 대해 다루도록 하겠습니다.

샘플 애플리케이션 만들기

Visual Studio 2005에서 Visual Basic .NET을 사용하는 새로운 Windows 애플리케이션 프로젝트를 만듭니다. .NET에서 모든 인쇄 기능들은 ToolBox에 있는 PrintDocument 컨트롤(그림 1) 안에 포함되어 있습니다. PrintDocument 컨트롤은 프린터로 출력물을 내보내는 다양한 메소드들을 정의합니다.

인쇄 기능을 여러분의 Windows 애플리케이션에 넣기 위해서는 PrintDocument 컨트롤을 폼 안에 드래그&드랍을 하거나, 런타임 시에 PrintDocument 인스턴스를 생성하면 됩니다. 이번 아티클에서는 후자의 방법을 사용하도록 하겠습니다.


[그림1] ToolBox에 위치한 PrintDocument 컨트롤

인쇄 작업을 시작하기 위해 PrintDocument 객체의 Print() 메소드를 사용합니다. PrintDocument는 일반적으로 인쇄작업을 커스터마이징하는 세 개의 이벤트를 제공합니다. 그 이벤트들은 다음과 같습니다.
  • BeginPrint는 문서의 첫 번째 페이지가 인쇄되기 전에 호출됩니다. 보통 BeginPrint에서 인쇄 중 사용되는 폰트, 파일스트림, 그 외 리소스들을 초기화합니다.
  • PrintPage는 현재 페이지에 인쇄될 출력물이 필요할 때 호출됩니다. 프린터에 보낼 출력물을 만드는 로직을 담당하는 주 이벤트입니다.
  • EndPrint는 문서의 마지막 페이지가 인쇄될 때 호출됩니다. 보통 인쇄 중 사용된 폰트, 파일스트림이나 다른 리소스들을 해제하는데 EndPrint를 사용합니다.
기본 폼에 PictureBox 컨트롤과 Button 컨트롤을 담아 Form1을 만듭니다.(그림2) PictureBox는 이미지를 나타내도록 설정합니다.(여기서 저는 2D 바코드[QRCode]를 보여주도록 했습니다)


[그림2] 여러 컨트롤을 담은 기본 Form1 만들기

Form1의 코드-비하인드로 전환하여 다음 네임스페이스를 import합니다.
Imports System.Drawing.Printing
다음 멤버변수들을 선언합니다.
Public Class Form1

   "---font variables---
    Private f_title As Font
Private f_body As Font

   "---page counter---
    Private pagecounter As Integer

   "---PrintDocument variable---
    Dim printDoc As PrintDocument()
폼이 로드될 때, PrintDocument의 인스턴스를 하나 생성하고 앞에서 설명한 세 개의 메인 이벤트핸들러들을 연결합니다.
Private Sub Form1_Load( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) _
       Handles MyBase.Load

        "---create an instance of the PrintDocument class---
        printDoc = New PrintDocument

        "---set the document name---
        printDoc.DocumentName = "Printing from Windows Forms"

        "---wire up the event handlers---
        AddHandler printDoc.BeginPrint, _
           New PrintEventHandler(AddressOf Me._beginPrint)
        AddHandler printDoc.PrintPage, _
           New PrintPageEventHandler(AddressOf Me._printPage)
        AddHandler printDoc.EndPrint, _
           New PrintEventHandler(AddressOf Me._endPrint)

    End Sub
BeginPrint 이벤트핸들러에서 페이지카운터와 인쇄 시 사용될 텍스트 폰트들을 초기화합니다.
Private Sub _beginPrint( _
       ByVal sender As Object, _
       ByVal e As PrintEventArgs)

        "---initialize the page counter---
        pagecounter = 1

        "---initialize the fonts---
        f_title = New Font("Arial", 16, FontStyle.Bold)
        f_body = New Font("Times New Roman", 10)

    End Sub
EndPrint 이벤트핸들러에서는 사용된 폰트 변수들 참조를 해제합니다.
    Private Sub _endPrint( _
       ByVal sender As Object, _
       ByVal e As PrintEventArgs)

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

    End Sub
끝으로, PrintPage 이벤트 핸들러에 프린터에 출력을 보내는 대부분의 작업들이 놓이게 됩니다. 기본적으로 인쇄되는 출력물을 나타내기 위해 PrintPageEventArgs 클래스에 있는 Graphics 객체를 사용합니다. 예를 들어, 사각형을 그리려면 e.Graphics.DrawRectangle() 메소드를 쓰고(e는 PrintPageEventArgs 클래스의 인스턴스입니다) 문자열을 출력하려면 e.Graphics.DrawString()메소드를 사용하면 됩니다.
Private Sub _printPage( _
       ByVal sender As Object, _
       ByVal e As PrintPageEventArgs)

        Dim g As Graphics = e.Graphics

        "---draws the title---
        g.DrawString("2D Barcode for Learn2Develop.net", _
           f_title, Brushes.Black, _
           20, 30)

        "---draws a border---
        Dim border As Rectangle = _
           New Rectangle(10, 10, _
           500, 240)
        g.DrawRectangle(Pens.Black, border)

        "---draws the barcode---
        If PictureBox1.Image IsNot Nothing Then
            g.DrawImage(PictureBox1.Image, 20, 60, _
            PictureBox1.Size.Width, _
            PictureBox1.Size.Height)
        End If

        "---draws the page count---
        g.DrawString("Page " & pagecounter, _
           f_body, Brushes.Black, _
           20, 220)

        "---increments the page counter---
        pagecounter += 1

    End Sub
사용자가 인쇄 버튼을 클릭했을 때, Print() 메소드를 사용하면 바로 출력이 기본 프린터로 전달됩니다.
    Private Sub btnPrint_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles btnPrint.Click

        "---print straight to printer---
        printDoc.Print()
    End Sub
시작 | 설정 | 프린터 및 팩스 에서 기본 프린터를 선택하여 인쇄되는 문서 이름을 확인할 수 있습니다. (그림 3)


[그림 3] 기본 프린터로 전달되어 인쇄 중인 문서
TAG :
댓글 입력
자료실

최근 본 책0