C#

(C#) 인쇄: 인쇄 미리보기 - PrintPreviewDialog ...

코딩ABC 2023. 4. 24. 06:39
반응형

C#에서 인쇄와 관련된 컨트롤에는 다음과 같은 것들이 있습니다.

C#, 인쇄

 

PageSetupDialog

           페이지 설정 대화 상자(용지, 방향, 여백 등)

PrintDialog

           인쇄 옵션을 선택할 수 있는 대화상자

           (프린트 선택, 매수, 페이지 방향)

PrintDocument

           프린터로 출력을 보낼 개체 정의

PrintPreviewControl

           인쇄 미리보기 대화상자

           (대화상자나 버튼은 없다.)

PrintPreviewDialog

           인쇄 미리보기 대화상자

 

다음 예제는 "인쇄 미리보기" 대화상자에 텍스트 파일을 출력하는 예제입니다.

 

예제 1

1. 프로젝트를 생성합니다.

  • Windows Forms 앱(.NET Framework)

2. 도구 상자에서 다음과 같은 컨트롤을 가져옵니다.

버튼 1개, PrintDocument 1개, PrintPreview 1개

C#, 인쇄

 

3. "인쇄 미리보기" 버튼에 코드를 작성합니다.

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace 인쇄_2023
{
    public partial class Form1 : Form
    {
        private Font printFont;     // 인쇄 폰트
        private StreamReader streamToPrint; // 텍스트 파일 읽기

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                streamToPrint = new StreamReader
                                ("C:\\temp\\test-print.txt");

                try
                {
                    printFont = new Font("Arial", 10);  // 인쇄 폰트 설정

                    // 인쇄 미리보기
                    printPreviewDialog1.Document = printDocument1;
                    if (printPreviewDialog1.ShowDialog() == 
                                                 DialogResult.OK ) 
                    {
                        // 미리보기 안의 인쇄 버튼을 누르면 인쇄한다.
                        printDocument1.Print();
                    }
                    
                }
                finally
                {
                    streamToPrint.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        // PrintPage 이벤트는 각 페이지마다 발생한다.
        private void printDocument1_PrintPage(object sender, 
                                                 PrintPageEventArgs ev)
        {
            float linesPerPage = 0;
            float yPos = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;    // 왼쪽 마진
            float topMargin = ev.MarginBounds.Top;      // 위쪽 마진
            string line = null;

            // 페이지 당 출력할 라인수를 계산한다.
            // 페이지당_출력할_행_수 = 인쇄 영역의 높이 / 폰트 크기(높이)
            linesPerPage = ev.MarginBounds.Height /    
               printFont.GetHeight(ev.Graphics);    

            // 파일에서 한 줄씩 인쇄한다.
            while (count < linesPerPage &&
               ((line = streamToPrint.ReadLine()) != null))
            {
                // 출력할 y 좌표 계산
                yPos = topMargin + (count * 
                   printFont.GetHeight(ev.Graphics));
                ev.Graphics.DrawString(line, printFont, Brushes.Black,
                   leftMargin, yPos, new StringFormat());
                count++;
            }

            // 출력할 행이 더 있으면 새 페이지에 인쇄한다.
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;
        }
    }
}

 

 

 

실행된 결과는 다음과 같습니다.

C# 인쇄 미리보기


C# 인쇄 미리보기


C# 인쇄 미리보기


C# 인쇄 미리보기


반응형