! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

WinForms PrintDocument를 사용하여 .NET 6 Financial Report 앱 빌드 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

WinForms PrintDocument를 사용하여 .NET 6 Financial Report 앱 빌드

페이지 정보

작성자 GrapeCity 작성일 2022-06-15 17:14 조회 2,216회 댓글 0건

본문

최근에 Microsoft는 Visual Studio 2022 Preview에서 작업 중인 개발자를 위해 .NET 6 Preview 환경을 출시했습니다(.NET 6는 기본적으로 Visual Studio 2019에서 작동하지 않습니다). .NET 6 릴리스와 함께 최신 WinForms 버전에서 작업 경험을 훨씬 쉽게 만들어줄 자체 .NET 6 컨트롤을 릴리스했습니다. 이번에는 WinForms PrintDocument 컨트롤을 사용하여 연간 재무 보고서를 만드는 방법을 배워 봅니다.

연간 재무 보고서

보고 컨트롤(예: FlexReport) 중 하나 대신 PrintDocument 컨트롤을 사용하는 주요 이점 중 하나는 PrintDocument를 사용하면 어떤 항목을 어디에, 어떻게 배치할지를 비롯하여 문서의 전체 렌더링을 완벽하게 제어할 수 있다는 점입니다. PrintDocument 컨트롤 내 모든 행을 완벽하게 사용자 정의할 수 있습니다.

다른 보고 컨트롤과 비교하면 PrintDocument를 사용했을 때 개발자 오버헤드가 약간 늘어나지만 PrintDocument가 제공하는 사용자 정의 가능성은 매우 뛰어납니다. 원하는 모든 보고서, 이미지, pdf, 텍스트 등을 만들 수 있지만 이 실용적인 예에서는 연간 재무 보고서를 만들어 보겠습니다. 이 샘플에 사용한 더 자세한 문서를 찾으려면 링크를 방문해 보시기 바랍니다.

시작하기 위해 Visual Studio 2022 Preview를 열고, 새 .NET 6 WinForms 응용 프로그램을 만들고, Visual Studio Tools 메뉴에서 NuGet Package Manager로 이동하여 C1.Win.Printing(6.0.20213.530) 이상을 추가합니다.

다음으로 Form1.cs 디자이너 페이지로 이동하고 Visual Studio 도구 상자를 열어 C1PrintDocument 컨트롤 및 C1PrintPreviewControl을 폼에 추가합니다. C1PrintDocument 및 C1PrintPreviewControl이 둘 다 폼에 있으면 C1PrintPreviewControl의 오른쪽 위 모서리에 있는 스마트 태그를 클릭하여 부모 컨테이너에 고정하려고 합니다.

C1PrintPreviewControl Tasks

빈 PrintDocument 객체를 만드는 것으로 시작합니다.

C1PrintDocument doc = new C1PrintDocument();


다음으로, 데이터가 필요합니다. 기본 데이터베이스가 있는 경우 PrintDocument 컨트롤에 연결하려고 합니다. 렌더링된 객체가 표시하는 데이터의 데이터 소스를 지정할 수 있는 C1DataBinding 유형인 RenderObject의 DataBinding 속성을 통해 연결할 수 있습니다. 그런 다음 이 문서는 C1DataSchema로 표현되는 데이터베이스 스키마를 포함할 수 있고 SQL 쿼리 등 데이터베이스 연결 정보를 포함합니다. 문서 내 C1DataBinding 개체는 해당 스키마의 속성을 참조할 수 있습니다. 또는 C1DataBinding 개체는 DataTable 등과 같은 기존 데이터 소스를 참조할 수 있는데, 이러한 데이터 소스는 폼에서 생성되었거나 PrintDocument를 만든 프로그램의 다른 곳에서 생성되었습니다. 간단히 설명하기 위해 이 예에서는 응용 프로그램 내에 PrintDocument에 데이터를 공급하는 RenderTable을 만듭니다.

여기서는 RenderTables 개체를 두 개 만드는데, 보고서 및 회사의 "제목"용으로 하나 만들고 두 번째 RenderTable은 실제 데이터를 저장합니다.

// Create two RenderTable objects:
RenderTable rt = new RenderTable();
RenderTable rt1 = new RenderTable();

// Here we are utilizing our second RenderTable to create extra headers above our grid, and we have lines turned off by default so nothing shows.
rt1.Cells[0, 0].Text = "ANNUAL FINANCIAL REPORT";
rt1.Cells[1, 0].Text = "Enter Company Name Here";
rt1.Rows[0].Style.FontSize = 24;
rt1.Rows[1].Style.FontSize = 20;


데이터를 포함하는 RenderTable의 경우 열 헤더를 설정하는 데 첫 번째 행을 사용했습니다.

// add initial header data
rt.Cells[0, 0].Text = "METRIC";
rt.Cells[0, 1].Text = "THIS YEAR (2022)";
rt.Cells[0, 2].Text = "LAST YEAR (2021)";
rt.Cells[0, 3].Text = "% CHANGE";


그런 다음 각 행에 대한 데이터를 아래와 같이 수동으로 설정합니다.

// Row 1
rt.Cells[1, 0].Text = "Revenue";
rt.Cells[1, 1].Text = "$180,583.88";
rt.Cells[1, 2].Text = "$180,026.64";
rt.Cells[1, 3].Text = "0%";


스타일

데이터를 모두 제공한 다음에는 RenderTables의 스타일 속성을 설정할 차례입니다. 가장 먼저 할 일은 두 번째 RenderTable에 대한 눈금선을 켜고 데이터 행을 명확하게 구분하기 위해 안쪽 여백을 추가하는 것입니다.

rt.Style.GridLines.All = LineDef.Default;
rt.CellStyle.Padding.All = "2mm";


또한 부모 페이지의 너비를 따르는 기본값 대신 열 및 행 내의 데이터에 따라 크기를 자동으로 조정하도록 열 및 행을 설정할 수 있습니다.

// 1) By default, table width is set to parent (page) width,
// for auto-sizing we must change it to auto (i.e. based on content):
rt.Width = Unit.Auto;
// 2) Set ColumnSizingMode to Auto (default means Fixed for columns):
rt.ColumnSizingMode = TableSizingModeEnum.Auto;
// that's it, now the table's columns will be auto-sized.


전체 행 스타일에 쉽게 액세스하기 위해 또는 손쉬운 조작을 위해 행 범위를 그룹화하려는 경우 RowGroups 컬렉션에 쉽게 액세스하기 위해 RenderTable 클래스에 포함된 여러 컬렉션을 사용할 수도 있습니다. 아래 이미지에서는 RowGroups.Header 속성을 사용하여 첫 번째 행을 헤더 및 페이지 헤더로 레이블을 지정합니다.

// Add the first row as a header and make the text color white and bolded
rt.RowGroups[0, 1].Header = C1.C1Preview.TableHeaderEnum.Page;
rt.Rows[0].Style.TextColor = Color.White;
rt.Rows[0].Style.FontBold = true;
rt.RowGroups[0, 1].PageHeader = true;
// Change the header background color
rt.RowGroups[0, 1].Style.BackColor = Color.Green;


그런 다음, Rows.Count 속성과 함께 다음 로직을 사용하여 행마다 다른 배경색을 추가할 수 있습니다.

for(int i = 1; i < rt.Rows.Count; i++){
    if (i % 2 == 0){
        rt.Rows[i].Style.BackColor = Color.White;
    } else {
        rt.Rows[i].Style.BackColor = Color.LightGray;
    }
}


마지막으로, PrintDocument 객체에 RenderTables를 추가한 다음 몇 행의 코드와 함께 PrintPreview 컨트롤에 PrintDocument 객체를 로드할 수 있습니다.

// Add the tables to the document
doc.Body.Children.Add(rt1);
doc.Body.Children.Add(rt);

// Show the document
this.c1PrintPreviewControl1.Document = doc;


이 응용 프로그램을 실행하면 PrintPreview 컨트롤에서 직접 "저장" 아이콘을 통해 파일을 인쇄하거나 여러 가지 다양한 파일 형식(예: PDF, .xlsx, .xls, .rtf 등)으로 내보낼 수 있습니다. 전체 목록은 아래 이미지에 나와 있습니다.

PrintPreview 컨트롤 목록


샘플 다운로드




지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!

 
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.