반응형
C#에서 인쇄와 관련된 컨트롤에는 다음과 같은 것들이 있습니다.
PageSetupDialog
페이지 설정 대화 상자(용지, 방향, 여백 등)
PrintDialog
인쇄 옵션을 선택할 수 있는 대화상자
(프린트 선택, 매수, 페이지 방향)
PrintDocument
프린터로 출력을 보낼 개체 정의
PrintPreviewControl
인쇄 미리보기 대화상자
(대화상자나 버튼은 없다.)
PrintPreviewDialog
인쇄 미리보기 대화상자
다음 예제는 "인쇄 미리보기" 대화상자에 텍스트 파일을 출력하는 예제입니다.
예제 1
1. 프로젝트를 생성합니다.
- Windows Forms 앱(.NET Framework)
2. 도구 상자에서 다음과 같은 컨트롤을 가져옵니다.
버튼 1개, PrintDocument 1개, PrintPreview 1개
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#) PictureBox 이미지 좌우대칭 상하대칭 (0) | 2023.05.17 |
---|---|
(C#) DBConn.cs 클래스 이용: 뷰(view)를 데이터그리드뷰에 출력하기 (2) | 2023.05.07 |
(C#) Linq, 구조체(struct), List<T> 응용: 나이 순으로 정렬하기 (0) | 2023.04.24 |
(C#) WebBrowser: 웹 브라우저 만들기 (0) | 2023.04.23 |
(C#) 웹 크롤링: 웹사이트 긁어오기 (0) | 2023.04.23 |